ZappaでAPI開発をするメモ
はじめに
Zappa & Flaskを使いAPI開発をするメモ。
今回は、ローカルでのdocker環境の構築からAWSへのデプロイまで行う。
※データベースは使わない。
Setup your Environment - Guide to using Django with Zappa
こちらの公式の手順を参考にしつつ、自身に合うように改変していく。
まとめたリポジトリが以下。 GitHub - mickey390/zappa_sample_api
手順
AWSクレデンシャル
- awsのユーザで
zappa-user
を作成。 AdministratorAccess
ポリシーを付与した- 念の為他のクレデンシャルと隔離するために、
~/.aws_zappa/
以下に保存
dockerでZappa環境の構築
# リポジトリ取得 (local)$ git clone git@github.com:mickey390/zappa_sample_api.git (local)$ cd zappa_sample_api # docker imageのビルド (local)$ docker build -t sample_zappa_app . # docker起動 (local)$ alias zappashell3='docker run -ti \ --name SAMPLE_ZAPPA_APP \ -e AWS_PROFILE=zappa-user \ -p 8080:8080 \ -v $(pwd):/var/task \ -v ~/.aws_zappa/:/root/.aws \ --rm sample_zappa_app' # コンテナログイン (local)$ zappashell3 or (local)$ docker exec -it SAMPLE_ZAPPA_APP bash
# virtualenv起動 (container)$ virtualenv ve (container)$ source ve/bin/activate # ライブラリインストール (ve) zappashell> pip install -r requirements.txt # インストール確認 (ve) zappashell> zappa -h
localでAPI開発
# Flask起動 (ve) zappashell> python3 sample.py
(local)$ curl localhost:8080 { "index": "flask zappa" }
OK
AWSにデプロイ
# デプロイ(初回) (ve) zappashell> zappa deploy dev # デプロイ(2回目以降) (ve) zappashell> zappa update dev # 作成されたリソース確認 (ve) zappashell> zappa status (python-dateutil 2.7.3 (/var/runtime), Requirement.parse('python-dateutil<2.7.0,>=2.6.1'), {'zappa'}) Status for zappa-sample-api-dev: Lambda Versions: 3 Lambda Name: zappa-sample-api-dev Lambda ARN: arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXXXXXXX:role:function:zappa-sample-api-dev Lambda Role ARN: arn:aws:iam::XXXXXXXXXXXXXXXXX:role/zappa-sample-api-dev-ZappaLambdaExecutionRole Lambda Handler: handler.lambda_handler Lambda Code Size: 5802813 Lambda Version: $LATEST Lambda Last Modified: 2018-10-24T12:56:01.941+0000 Lambda Memory Size: 512 Lambda Timeout: 30 Lambda Runtime: python3.6 Lambda VPC ID: None Invocations (24h): 2 Errors (24h): 0 Error Rate (24h): 0.00% API Gateway URL: https://XXXXXXXXXXXXXXXXX:role.execute-api.ap-northeast-1.amazonaws.com/dev Domain URL: None Supplied Num. Event Rules: 0
Lambdaの設定/呼び出しメトリックス、ApiGWの設定など確認できる。
(local)$ curl https://XXXXXXXXXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/dev {"index":"flask zappa"}
AWSのリソース削除
(ve) zappashell> zappa undeploy (python-dateutil 2.7.3 (/var/runtime), Requirement.parse('python-dateutil<2.7.0,>=2.6.1'), {'zappa'}) Calling undeploy for stage dev.. Are you sure you want to undeploy? [y/n] y Deleting API Gateway.. Waiting for stack task-dev to be deleted.. Unscheduling.. Unscheduled task-dev-zappa-keep-warm-handler.keep_warm_callback. Deleting Lambda function.. Done!
Lambda, ApiGW, IAMなど削除されていた。
まとめ
- 今日はここまで。
- webアプリ以外にも使えそう