zappa

since 2020-08-08

作業環境は Windows 10 version 1909 + WSL

$ /usr/local/bin/python3.8 -m venv venv38
$ . venv38/bin/activate
$ python -m pip install -U pip
$ pip install zappa
{
    "dev": {
        "app_function": "hello.app",
        "aws_region": "ap-northeast-1",
        "profile_name": "default",
        "project_name": "zappa-200808",
        "runtime": "python3.8",
        "s3_bucket": "zappa-*********"
    }
}

デフォルトの project_name はカレントディレクトの名前

前述URLのコードそのまま

$ cat hello.py
import logging
from flask import Flask

app = Flask(__name__)
logging.basicConfig()
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

@app.route('/', methods=['GET', 'POST'])
def hello(event=None, context=None):
    logger.info('Lambda function invoked index()')
    return 'hello from Flask!\n'


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

$ cat requirements.txt
zappa
flask
$ zappa deploy dev
Deploying API Gateway..
Deployment complete!: https://*************

表示される URL で hello.py が動くことを確認できる。

  • 失敗したデプロイを削除する zappa undeploy dev
  • デプロイ済みのコードを更新する zappa update dev
  • ログを見る zappa tail dev

SSL証明書とかカスタムドメインとかにチャレンジする

dev.example.com を作ることにする。example.com はすでに Route 53 で管理しているとする。

「東京」で API Gateway と lambda を動かす場合であっても、 AWS Certificate Manager は「バージニア北部」で作業しなくてはならない。

AWS Certificate Manager にて

  • dev.example.com を入力
  • 「DNSの検証」を選ぶ
  • 出てくる画面で「Route 53 でのレコードの作成」を押す
成功
DNS レコードは Route 53 ホストゾーンに書き込まれました。変更が反映され、AWS がドメインを検証するまでに最大で 30 分かかる場合があります。

になる。そしてしばらく待つと「発行済み」になる。

この AWS Certificate Manager 画面の ARN が必要。

zappa_settings.json を更新する

$ cat zappa_settings.json
{
    "dev": {
        "app_function": "hello.app",
        "aws_region": "ap-northeast-1",
        "profile_name": "default",
        "project_name": "zappa-200808",
        "runtime": "python3.8",
        "s3_bucket": "zappa-*********",
        "domain": "dev.example.com",
        "certificate_arn": "arn:aws:acm:us-east-1:************:certificate/************************************"
    }
}
$ zappa certify
Calling certify for stage dev..
Are you sure you want to certify? [y/n] y
Certifying domain dev.example.com..
Created a new domain name with supplied certificate. Please note that it can take up to 40 minutes for this domain to be created and propagated through AWS, but it requires no further work on your part.
Certificate updated!

Route 53 を見ると、当該ゾーンに ACM の DNS 認証と、dev サブドメインの CNAME (cloudfront.net) が設定されている。

しばらくすると

https://dev.example.com/

でさきほどの hello.py が動く。

ちなみにバージニア北部の ACM を使わなかった場合はこうなる

botocore.errorfactory.BadRequestException: An error occurred (BadRequestException) when calling the CreateDomainName operation: Invalid certificate ARN: arn:aws:acm:ap-northeast-1:*************:certificate/***************************************. Certificate must be in 'us-east-1'.
zappa.txt · 最終更新: 2020/08/08 17:35 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0