🐿️

SAM CLIを用いた CDK 管理資源のローカル実行

2025/02/09に公開

導入

背景・目的

  • AWS SAM CLI(以降、SAM CLI)は、サーバレスアプリを構築・管理するためのコマンドラインツールであり、サーバレスアプリをローカル実行することもできます。
  • 本記事では、SAM CLIを用いて、CDKで開発・管理されるAPI Gateway及びLambdaをローカル実行する方法を解説します。

対象読者

  • AWS 認定ソリューションアーキテクト - アソシエイトレベルを想定して、AWSサービスに対する解説は割愛します。

環境概要

環境構築

前提条件

SAM CLI及びCDKがローカル環境でセットアップ済みの前提で進めます。未セットアップの方は、AWS公式ドキュメントに沿ってインストール作業を実施してください。

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"}% 

参考

https://logmi.jp/main/technology/326602?read_more=1
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-cdk-getting-started.html

注意事項

  • 本記事は万全を期して作成していますが、お気づきの点がありましたら、ご連絡よろしくお願いします。
  • なお、本記事の内容を利用した結果及び影響について、筆者は一切の責任を負いませんので、予めご了承ください。
Accenture Japan (有志)

Discussion