2018年11月25日日曜日

【flask】Aws lambda上にflaskをdeployする

  • 公開日:2018年11月25日
  • 最終更新日:2018年11月25日

記事概要

Aws lambdaでflaskアプリをdeployする方法を記載した記事です。

記事の対象者

  • Aws lambdaでflaskをdeployしたい
  • flaskを使った実装を理解している

環境

  • flask
  • python3.6
  • aws lambda
  • zappa
  • doorkeeper 16.1.0

flaskアプリ作成の準備

アプリ構築用のフォルダを作成します。

terminal

mkdir flask-app

続いて仮想環境を構築します。Zappaを使ってbuildとdeployをするので、仮想環境の構築が必須になります。

仮想環境の構築には、virtualenvを使います。virtualenvはPythonの仮想的な環境を作ることができます。
Zappaがpyenvでdeployできるかどうかは確認していません。

virtualenvは、プロジェクトごとにPythonのバージョンを変えたり、必要なパッケージを分けてインストールして動かす事もできます。

terminal

cd flask-app/

$ virtualenv .env
Using base prefix '/Users/{user_name}/.pyenv/versions/3.6.3'
New python executable in /Users/{user_name}/workspace/flask-app/.env/bin/python3.6
Also creating executable in /Users/{user_name}/workspace/flask-app/.env/bin/python
Installing setuptools, pip, wheel...
done.

仮想環境に入ります。

terminal

source .env/bin/activate

(.env) 

terminalのプロンプトの最初が(.env)に変わってれば入れています。

確認のために仮想環境を出ます。

terminal

deactivate

terminalのプロンプトから(.env)が消えていれば、仮想環境を出ています。

flaskアプリの作成

アプリを作成します。requirements.txtを作成します。

terminal

// 仮想環境に入る
source .env/bin/activate

touch requirements.txt

requirements.txtに必要なパッケージを記載します。

flask-app/requirements.txt

flask
zappa

ライブラリをpipでinstallします。

terminal

pip install -r requirements.txt

Hello worldのアプリを作成します。

flask-app/app.py

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def hello_world():
    return jsonify({"message": "Hello World!"})

if __name__ == '__main__':
 app.run()

ローカルで動作することを確認します。
http://localhost:5000/でブラウザにアクセスします。

ブラウザ

{"message":"Hello World!"}

問題ありませんね。

flaskアプリをlambdaにdeploy

ZAPPAを使います。

terminal

$ zappa init

// 全てデフォルト

zappa_settings.jsonが作成されていることを確認します。

terminal

$ ls -l
total 24
-rw-r--r--@ 1 edy  staff  178 11 24 21:57 app.py
-rw-r--r--  1 edy  staff   11 11 24 21:49 requirements.txt
-rw-r--r--  1 edy  staff  240 11 24 23:09 zappa_settings.json

内容を確認すると、色々と設定が記載されているはずです。

deployします。

terminal

zappa deploy dev

deployします。
The role defined for the function cannot be assumed by Lambdaというエラーが表示されて deployに失敗することがありますが、何回か叩くとうまくいくはずです。

URLが返却されたらURLをブラウザで叩いてみてください。

ブラウザ

{"message":"Hello World!"}

上手くいきました。

flaskアプリをlambdaから削除

削除もコマンドで行えます。

terminal

zappa undeploy

これで削除されます。便利ですね。

まとめ

lambdaを使うと低コストでサーバーを利用することができます。
シンプルなAPIを作成するなら、これで十分です。機械学習のAPIとかなら、十分ですね。いやー、凄い時代になりました。

以上です。

参照サイト


この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

12 件のコメント:

Related Posts Plugin for WordPress, Blogger...