🐿️
SAM CLIを用いた CDK 管理資源のローカル実行
導入
背景・目的
- AWS SAM CLI(以降、SAM CLI)は、サーバレスアプリを構築・管理するためのコマンドラインツールであり、サーバレスアプリをローカル実行することもできます。
- 本記事では、SAM CLIを用いて、CDKで開発・管理されるAPI Gateway及びLambdaをローカル実行する方法を解説します。
対象読者
- AWS 認定ソリューションアーキテクト - アソシエイトレベルを想定して、AWSサービスに対する解説は割愛します。
環境概要
環境構築
前提条件
SAM CLI及びCDKがローカル環境でセットアップ済みの前提で進めます。未セットアップの方は、AWS公式ドキュメントに沿ってインストール作業を実施してください。
- https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
- https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/getting_started.html
Lambda関数コードの作成
検証用に、簡易的なPython コードを作成します。
def lambda_handler(event, context):
return {
'isBase64Encoded': False,
'statusCode': 200,
'headers': {},
'body': '{"message": "Hello from AWS Lambda"}'
}
CDKスタックの作成
API Gateway(REST API)及びLambda関数を含むCDKスタックを作成します。
// ------------ Serverless Application ---------------
// ---- Lambda Function
const myFunction = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.PYTHON_3_12,
handler: 'lambda_function.lambda_handler',
code: lambda.Code.fromAsset('assets/lambda/sample'),
});
// ---- API Gateway
new apigateway.LambdaRestApi(this, "MyApi", {
handler: myFunction,
});
SAM CLIを実行できるよう、--no-stagingオプションを指定してcdk synthを実行し、CloudFormationテンプレートを生成しておきます。
cdk synth --no-staging
SAM CLIでのローカル実行
まずは、ローカル環境でLambdaを実行してみます。今回は空のイベントを使用するよう、--no-eventオプションを指定しています。
コマンド実行すると、Lambda実行結果が出力されます。
sam local invoke MyFunction --no-event -t ./cdk.out/SamStack.template.json
START RequestId: da693857-4f46-48ed-9f80-7a3d92de43d1 Version: $LATEST
END RequestId: 0b575469-d082-471a-84e4-9ba4054afd23
REPORT RequestId: 0b575469-d082-471a-84e4-9ba4054afd23 Init Duration: 0.59 ms Duration: 218.09 ms Billed Duration: 219 ms Memory Size: 128 MB Max Memory Used: 128 MB
{"isBase64Encoded": false, "statusCode": 200, "headers": {}, "body": "{\"message\": \"Hello from AWS Lambda\"}"}
次に、API Gateway呼び出しを通じて、バックエンドのLambdaを実行してみます。SAM CLI実行後にCurlしてみると、無事にレスポンスが返却されました。
sam local start-api -t ./cdk.out/SamStack.template.json
curl http://127.0.0.1:3000/
{"message": "Hello from AWS Lambda"}%
参考
注意事項
- 本記事は万全を期して作成していますが、お気づきの点がありましたら、ご連絡よろしくお願いします。
- なお、本記事の内容を利用した結果及び影響について、筆者は一切の責任を負いませんので、予めご了承ください。
Discussion