sam と docker コンテナを使用して lambda をローカルに実装する方法につて作業の流れを簡単にまとめてみました。
流れとしては、sam build でモジュールを展開して、sam deploy で Lambda を作成するといった作業になります。
samとは
sam は Serverless Application Model の略で、サーバーレスアプリケーション構築用のオープンソースフレームワークです。
AWS Lambda のデプロイ管理に使われるツールで、ローカル上のデバッグ、ビルド、デプロイをサポートします。
セットアップ手順
aws-sam-cli インストール
pipで aws-sam-cli をインストールします。
$ pip install aws-sam-cli $ sam --version SAM CLI, version 1.17.0
デプロイ
SAM アプリケーションダウンロード
サンプルの SAM アプリケーションをダウンロードします。
$ sam init --runtime python3.8 --dependency-manager pip --app-template hello-world --name sample Cloning app templates from https://github.com/aws/aws-sam-cli-app-templates
sam build
sample ディレクトリが作成されるので移動する。
$ cd sample
作成したディレクトリに移動して「sam build」コマンドを実行する。
$ sam build Building codeuri: hello_world/ runtime: python3.7 metadata: {} functions: ['HelloWorldFunction'] Running PythonPipBuilder:ResolveDependencies Running PythonPipBuilder:CopySource Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Invoke Function: sam local invoke [*] Deploy: sam deploy --guided
動作確認
アプリケーションをローカルでテスト
$ sam local start-api Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET] You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template 2021-02-15 16:50:01 * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
別ターミナルを起動してcurlを実行すると”hello world”が返ってくる。
$ curl http://127.0.0.1:3000/hello {"message": "hello world"}
テスト実行する方法
$ sam local invoke "HelloWorldFunction" -e events/event.json Invoking app.lambda_handler (python3.8) Skip pulling image and use local one: amazon/aws-sam-cli-emulation-image-python3.8:rapid-1.17.0. Mounting /{{xxxxxxxxx}}/sample/hello_world as /var/task:ro,delegated inside runtime container END RequestId: d9907119-e23b-4eb2-b68f-d098c2f4b08c REPORT RequestId: d9907119-e23b-4eb2-b68f-d098c2f4b08c Init Duration: 0.23 ms Duration: 101.28 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}
よく使うコマンド
よく使うコマンドをまとめておきます。
コマンド | サブコマンド | 内容 |
---|---|---|
sam init | なし | サンプル(雛形)を作成 |
sam local | generate-event | Lambdaのイベントパラメータを作成 |
invoke | Lambdaのテスト実行 | |
start-api | APIのテスト用ローカルエンドポイントを準備 | |
start-lambda | Lambdaのテスト用ローカルエンドポイントを準備 | |
sam validate | なし | SAMのテンプレートファイルが正しいか検証 |
sam package | なし | デプロイ用にパッケージ化 |
sam deploy | なし | Lambdaにデプロイ |
sam logs | なし | Lambdaのログを取得 |