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アプリ以外にも使えそう

参考