🐛

VS CodeでAWS SAMのローカルデバッグをやってみる

2023/08/12に公開

準備

既にAWS SAMアプリがある場合は不要ですが、ない場合はまずは事前準備。

適当なAWS SAMアプリを用意する

こちらのHello Worldアプリを作りましょう(デプロイは必要ありません)。
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html

手順に従ってsam initが終わったら、ターミナルで以下を実行。

sam local start-api

別のターミナルから呼び出せれば準備完了。

curl http://127.0.0.1:3000/hello
{"message": "hello world"}

VS Codeでデバッグ

AWS Toolkitのインストール

AWS SAMをVS Codeでデバッグするために必須の拡張機能となります。
https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-toolkit-vscode

デバッグ構成の追加

デバッグ構成を追加します。

すると下記のように構成ファイルが追加されます。

.vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "aws-sam",
            "request": "direct-invoke",
            "name": "sam-app:HelloWorldFunction (python3.9)",
            "invokeTarget": {
                "target": "template",
                "templatePath": "${workspaceFolder}/template.yaml",
                "logicalId": "HelloWorldFunction"
            },
            "lambda": {
                "payload": {},
                "environmentVariables": {}
            }
        },
        {
            "type": "aws-sam",
            "request": "direct-invoke",
            "name": "API sam-app:HelloWorldFunction (python3.9)",
            "invokeTarget": {
                "target": "api",
                "templatePath": "${workspaceFolder}/template.yaml",
                "logicalId": "HelloWorldFunction"
            },
            "api": {
                "path": "/hello",
                "httpMethod": "get",
                "payload": {
                    "json": {}
                }
            },
            "lambda": {
                "runtime": "python3.9"
            }
        }
    ]
}

単なるLambda関数として実行するパターンとAPIとして実行するパターンの二通りの構成が用意されています。

直接ファイルを作成してもかまいません。
各パラメータの詳細な説明はこちら。
https://docs.aws.amazon.com/ja_jp/toolkit-for-vscode/latest/userguide/serverless-apps-run-debug-config-ref.html

デバッグの実行

それではブレークポイントを置いてデバッグを実行します。2つあるうちのどちらでも構いません。
事前準備の時に試したようにsam local start-apiをやっておく必要もありません。

ブレークポイントで止まれば成功です。

GitHubで編集を提案
アイレット株式会社

Discussion