文書の過去の版を表示しています。
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 flask
$ mkdir zappa-200808 $ cd zappa-200808 $ zappa init $ 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-*********" } }
デフォルトの 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 が動くことを確認できる。
SSL証明書とかカスタムドメインとかにチャレンジする
dev.example.com を作ることにする。example.com はすでに Route 53 で管理しているとする。
「東京」で API Gateway と lambda を動かす場合であっても、 AWS Certificate Manager は「バージニア北部」で作業しなくてはならない。
AWS Certificate Manager にて
成功 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'.