ローカルの Docker 環境で AWS Lambda(Serverless Framework)と Python(Flask)でサーバーレス API を実装,デプロイします.
事前準備.
-
AWS でアクセスキーとシークレットキーを発行してください.
-
Mac を使用している場合は設定から AirPlay レシーバーを切っておきましょう. (ポートが Flask のデフォルトポートである 5000 番と重複しているため)
-
リポジトリを用意しましたのでクローンしてください.
-
docker-compose.ymlのcontainer_nameにコンテナ名を設定し,docker compose buildで Docker イメージを構築します. -
docker compose up -dでデタッチドモードでコンテナを起動します. -
docker exec -it 設定したコンテナ名 /bin/bashでコンテナの中に入ります. -
serverlessでプロジェクトを作成します.- 今回は Flask で実装してみたいので
AWS / Python / Flask APIを選択します. - プロジェクト名を設定します.
- Serverless Framework のログインを求められますので,表示されたリンクからログインしてください(
Login/Registerを選びます). - アプリを作成するか既存のアプリを選択するか聞かれますのが,
Skip Adding An Appを選択します. - AWS の認証を求められますので,
Save AWS Credentials in a Local Profileを選択して事前準備で用意したアクセスキーを入力します. - 作成されたディレクトリに移動し,
npm iを実行します.
- 今回は Flask で実装してみたいので
-
serverless.ymlで Python のバージョン(runtimeの部分)をpython3.9に変更し,customのwsgiにpythonBin: /usr/bin/python3を追加します. -
docker-compose.ymlのコメントアウトされている部分を解除し,FLASK_APPに app.py のパスを指定します. -
exitでコンテナから抜け,docker compose downでコンテナの終了させます. -
docker compose upでコンテナ内の flask アプリがローカルで起動します.この時点で http://localhost:5000 を GET メソッドで叩くと,json でHello from root!とレスポンスが返ってきます. -
コンテナの中に入って,
aws configureコマンドで AWS の認証をしておきましょう.region(AWS サーバー)や output format(デフォルトは json)はお好みでどうぞ. -
デプロイする時はコンテナの中に入り,
serverless.ymlのあるディレクトリに移動し,sls deployを実行します.すると AWS に自動でデプロイされます.デプロイ後,ターミナルにデプロイ先のリンクが表示されます.AWS コンソールからも確認できます.また,Lambda と API Gateway が作成,接続されているのを確認できます.