Sam CLIを使ってPython3.9のアプリを作っているとします。
また、Imageベースで構成します。
まず、コード側の仕込み。
ptvsdをSamのイメージ内にインストールします。
requirements.txt
requests ptvsd
app.pyのimport文の続きに以下のデバッガを待機する設定を入れます。
import json
import ptvsd
ptvsd.enable_attach(address=('0.0.0.0', 5858), redirect_output=True)
ptvsd.wait_for_attach()
これでコード側の準備はOK。
拡張機能のAWSToolKitをインストールします。

左ペインの「実行とデバッグ」の中にある、歯車マークをクリックして、launch.jsonを設定します。

自動的に生成してくれるかもしれないけど、これで行けた。
{
// 可能性のある属性については、IntelliSense を活用してください。
// 既存の属性の説明を表示するには、ホバーします。
// 詳細については、次の URL を参照してください。https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Debug with SAM CLI (Remote Debug)",
"type": "python",
"request": "attach",
"port": 5858,
"host": "localhost",
"pathMappings": [
{
"localRoot": "${workspaceFolder}/hello_world",
"remoteRoot" : "/var/task"
}
]
}
]
}
これで、準備OK。
では、デバッグしていきます。
コード内に、ブレークポイントを設定します。

ビルドして、5858をリモートデバッグポートに指定して起動します。
そうすると、CLIからはLambda関数の最初の部分でストップしているように見えているはず。
sam build sam local invoke -d 5858
VSCodeのデバッグメニューから「▶️」をクリックすると、実行中のLambdaに対してデバッグ実行できるようになります。

