翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Lambda リモートデバッグ
AWS Toolkit for Visual Studio Code を使用すると、クラウドで実行されている AWS Lambda 関数を VS Code で直接デバッグできます。 AWS Lambda リモートデバッグを使用すると、既存の開発ワークフローを変更することなく、実行中の関数の検査、ブレークポイントの設定、変数の検査、ステップスルーデバッグを行うことができます。
以下のセクションでは、 で Lambda リモートデバッグを使用する方法について説明します AWS Toolkit for Visual Studio Code。
Lambda リモートデバッグの仕組み
Toolkit は、追加の Lambda デバッグレイヤーを使用して Lambda 関数を一時的に変更し、Lambda 呼び出しタイムアウト制限を 900 秒に延長することで、リモートデバッグ AWS を有効にします。セキュアトンネリングを使用して AWS IoT 、ローカルデバッガーと Lambda ランタイム環境の間に安全な接続が確立されます。この接続により、ローカルコードブレークポイントを使用して、リモートで実行される関数をステップスルーできます。デバッグセッションが完了すると、すべての一時的な変更は自動的に元の設定に戻ります。
開始方法
ランタイムのサポート
次のランタイムは、Lambda リモートデバッグでサポートされています。
-
Python (Amazon Linux 2023)
-
Java
-
JavaScript/Node.js (Amazon Linux 2023)
前提条件
開始する前に、以下の前提条件を満たす必要があります。
-
Toolkit で有効な AWS 認証情報を設定する必要があります AWS 。 AWS Toolkit のインストールと認証情報の設定の詳細については、このユーザーガイドの「開始方法」トピックを参照してください。
-
Lambda 関数が AWS アカウントにデプロイされました。Lambda 関数のデプロイの詳細については、 AWS Lambdaデベロッパーガイドの「最初の Lambda 関数の作成」トピックを参照してください。
-
関数をデバッグするには、適切な AWS Identity and Access Management (IAM) ポリシーとアクセス許可が必要です。Lambda アクセス許可の詳細については、 AWS Lambdaデベロッパーガイドの トピックAWS の マネージドポリシー AWS Lambdaを参照してください。以下は、 Toolkit で AWS Lambda リモートデバッグを操作するために必要な最小限のアクセス許可を含むポリシーの例です。
注記
リモートデバッグは、 AWS AWS IoT セキュアトンネリングを介して有効になります。これにより、ローカルデバッガーは Lambda ランタイム環境への安全な接続を確立できます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:ListFunctions", "lambda:GetFunction", "lambda:GetFunctionConfiguration", "lambda:GetLayerVersion", "lambda:UpdateFunctionConfiguration", "lambda:InvokeFunction", "lambda:PublishVersion", "lambda:DeleteFunction", "iot:CloseTunnel", "iot:OpenTunnel", "iot:RotateTunnelAccessToken", "iot:ListTunnels" ], "Resource": "*" } ] }
Lambda リモートデバッグへのアクセス
AWS Toolkit で Lambda リモートデバッグにアクセスするには、 AWS エクスプローラーまたは Application Builder エクスプローラーの 2 つの主要なパスがあります。 AWS エクスプローラーから、ノードを介して AWS Lambda Lambda リモートデバッグにアクセスできます。Application Builder エクスプローラーから、ローカル AWS SAM プロジェクトを通じて Lambda リモートデバッグにアクセスできます。
AWS エクスプローラーからの Lambda リモートデバッグへのアクセス
-
VS Code から Toolkit AWS 拡張機能を開きます。
-
Toolkit から AWS 、 AWS エクスプローラーを展開します。
-
エクスプローラーから、Lambda ノードを展開します。
-
デバッグする関数に移動し、コンテキストメニューからリモート呼び出しアイコンを選択してリモート呼び出し設定画面を開きます。
Application Builder エクスプローラーから Lambda リモートデバッグにアクセスする。
-
VS Code から Toolkit AWS 拡張機能を開きます。
-
AWS Toolkit から、Application Builder Explorer を展開します。
-
エクスプローラーから、デバッグする Lambda
AWS SAM
プロジェクトを含むプロジェクトを展開します。 -
デバッグするデプロイされた
Lambda
関数を展開します。 -
関数リモートに移動し、コンテキストメニューからリモート呼び出しアイコンを選択してリモート呼び出し設定画面を開きます。
Lambda リモートデバッグの使用
以下のセクションでは、 で Lambda リモートデバッグを使用する方法について説明します AWS Toolkit for Visual Studio Code。
注記
Lambda 関数には、関数コードとアタッチされたすべてのレイヤーに対して、5 レイヤーの制限と 250MB の合計制限があります。Lambda リモートデバッグを実行するには、少なくとも 1 つの空きレイヤーが必要です。
デバッグセッションのセットアップ
開始する前に、次の手順を実行してデバッグセッションを設定します。
-
AWS エクスプローラーからの Lambda リモートデバッグへのアクセスまたは前のセクションにある Application Builder エクスプローラーからの Lambda リモートデバッグへのアクセスの手順を完了して、リモート呼び出し設定メニューを開きます。
-
リモート呼び出し設定メニューから、リモートデバッグチェックボックスをオンにしてリモートデバッグプロパティを表示します。
-
ローカルハンドラーファイルへのローカルルートパスを指定します。
注記
ローカルルートパスは、デプロイされた Lambda 関数に一致するソースコードの場所です。Application Builder エクスプローラーでデプロイされた関数から作業している場合は、ローカルルートパスが自動的に検出されます。
ソースコードをローカルに保存していない場合は、リモートコードのダウンロードボタンを選択して Lambda 関数のソースコードを取得します。これにより、VS Code エディタ
handler file
で が開きます。 -
ペイロードセクションで、テストイベントデータを取得する場所を指定します。
ブレークポイントの設定とデバッグ
ブレークポイントを設定し、次の手順を実行してデバッグを開始します。
-
VS Code エディタ
handler file
の から、ガーターマージンをクリックして、デバッグを一時停止する行番号にブレークポイントを設定します。 -
ブレークポイントに満足したら、リモート呼び出し設定メニューに戻り、設定が正しく設定されていることを確認してから、リモート呼び出しボタンを選択してデバッグを開始します。
-
AWS Toolkit は、Lambda 関数をデバッグ機能で更新し、デバッグセッションのセキュアトンネルを確立し、指定されたペイロードで関数を呼び出し、ブレークポイントに達するとプロセスを一時停止します。
-
ブレークポイントの一時停止時に、RUN AND DEBUG ペインを使用して VARIABLES、CALL STACK、BREAKPOINTS を表示します。
関数の更新とテスト
クイックデプロイでコードを変更し、変更をテストするには、次の手順を実行します。
-
デバッグセッションをアクティブにして、VS Code エディタ
handler file
で を変更します。 -
変更を保存する (
Command+S on macOS
、Ctrl+S on Windows
) -
プロンプトが表示されたら、変更をデプロイすることを確認します。Toolkit AWS は、変更されたコードで Lambda 関数を更新します。
-
新しいブレークポイントを設定し、リモート呼び出しボタンを再度選択して、変更のデバッグとテストを続行します。
注記
または、VS Code デバッグコントロールでデバッガーのアタッチオプションの選択を解除し、リモート呼び出しボタンを選択してデバッグなしで関数を実行できます。
デバッグセッションの終了
次の各オプションは、リモートデバッグセッションを終了し、プロジェクトからデバッグレイヤーを削除します。
-
リモート呼び出し設定画面からデバッグセットアップの削除オプションを選択します。
-
VS Code デバッグコントロールから切断アイコンを選択します。
-
VS Code エディタ
handler file
で を閉じます。
注記
以下の情報を記録します。
-
Lambda デバッグレイヤーは、60 秒間非アクティブになると自動的に削除されます。カウントは、最後の呼び出しが完了したときに開始されます。
-
デバッグプロセス中に infrastructure-as-code (IaC) マネージド (AWS SAM、 AWS CDK、Terraform) 関数にコード変更を加えた場合は、ローカルプロジェクトに保存し、ソースコントロールリポジトリの更新を検討してください。保存されていない変更は、IaC 関数が再デプロイされると上書きされます。
-
デバッグのみを目的として一時的な変更を加えた場合は、ソースコントロールから関数を再デプロイして、本番コードと一致するようにすることができます。
トラブルシューティングと高度なユースケース
デバッグセッションが失敗した場合は、以下の手順を実行してトラブルシューティングプロセスを開始します。
-
Toolkit を最新バージョン AWS に更新します。
-
リモート呼び出し設定ウェブビューを閉じて再度開き、ウェブビューを更新します。
-
VS Code を完全に閉じ、再度開いて再起動します。
-
VS Code Command Palette を開き、コマンド を入力し
AWS: Reset Lambda Remote Debugging Snapshot
、Lambda リモートデバッグスナップショットをリセットするために結果に入力するときに選択します。 -
問題をトラブルシューティングできない場合は、AWS Toolkit for Visual Studio Code GitHub の問題に問題を送信してください
。
高度なユースケース: コード署名設定
リモートデバッグには、Lambda 関数にデバッグレイヤーをアタッチする必要があります。関数でコード署名設定が有効で強制されている場合、 AWS Toolkit はデバッグレイヤーを関数に自動的にアタッチできません。
コード署名設定の問題を解決するには、2 つのオプションがあります。
-
コード署名を一時的に削除します。
-
署名付きデバッグレイヤーを使用します。
コード署名の一時的な削除
を設定してコード署名設定を更新しUntrustedArtifactOnDeployment : Warn
、デバッグプロセスの完了Enforced
後に に再度有効にします。
詳細については、 API リファレンスの UpdateCodeSigningConfig AWS Lambda リファレンスを参照してください。
署名付きデバッグレイヤーの使用
-
Toolkit の Lambda リモートデバッグから AWS 、リモートデバッグの追加設定セクションを展開します。
-
リモートデバッグの追加設定セクションから、レイヤーオーバーライドフィールドからリージョンレイヤー ARN をコピーします。
-
から AWS CLI、次のコマンドを使用してレイヤーバージョン をダウンロードし
aws lambda get-layer-version-by-arn --arn
、 Layer-arn をレイヤー ARN に置き換えます。署名付きデバッグレイヤーをダウンロードする方法の詳細については、 コマンドリファレンスの get-layer-version-by-arn リファレンスを参照してください。 AWS CLIlayer-arn
-
コード署名設定で Layer に署名し、アカウントに公開します。署名と公開のガイダンスについては、「 AWS Serverless Application Model デベロッパーガイド」のAWS SAM 「アプリケーション用のコード署名の設定」トピックを参照してください。
-
レイヤーに署名してアカウントに公開したら、Lambda リモートデバッグのリモートデバッグ追加設定セクションに戻り、新しいレイヤー ARN をレイヤーオーバーライドフィールドに入力します。プロセスが完了すると、Lambda リモートデバッグはデフォルトのレイヤーの代わりに署名付きレイヤーを使用します。
サポートされるリージョン
リージョンがリモートデバッグをサポートしていない場合、次のエラーが発生します。
Region ${region} doesn't support remote debugging yet
サポートされているリージョンのリストを次に示します。
-
ap-east-1
-
ap-northeast-1
-
ap-northeast-2
-
ap-south-1
-
ap-southeast-1
-
ap-southeast-2
-
ca-central-1
-
eu-central-1
-
eu-north-1
-
eu-west-1
-
eu-west-2
-
eu-west-3
-
me-central-1
-
me-south-1
-
sa-east-1
-
us-east-1
-
us-east-2
-
us-west-1
-
us-west-2
Lambda RequestEntityTooLargeException
Lambda 関数には、関数コードとアタッチされたすべてのレイヤーに対して 5 レイヤーの制限と 250MB の合計制限があります。リモートデバッグレイヤーは約 40MB であるため、大きな関数パッケージまたは複数のレイヤーがある場合、関数がこの制限を超える可能性があります。詳細については、「 AWS Lambda デベロッパーガイド」の「Lambda: InvalidParameterValueException」またはRequestEntityTooLargeException」トピックセクションを参照してください。
次のリストでは、このエラーをトラブルシューティングして修正する方法について説明します。
-
関数のサイズを小さくする: 関数コードを最適化し、不要な依存関係を削除します。
-
未使用のレイヤーを削除する: デバッグ中に必須ではないレイヤーを一時的に削除します。
-
外部依存関係を使用する: 大きな依存関係を Amazon S3 などの外部ストレージに移動し、実行時にロードします。
IoT セキュアトンネリングクォータを超えました
以下は、Lambda リモートデバッグの AWS IoT セキュアトンネリング接続の日次制限に達したときに発生するトンネルクォータ超過エラーの例です。
Error creating/reusing tunnel: LimitExceededException: Exceeded quota of Lambda debugging tunnels
AWS IoT セキュアトンネリング接続には次のクォータがあります。
-
無料利用枠の IoT セキュアトンネリングには、1 日あたり 10 個の接続が割り当てられます。
-
各トンネルは、1 つの VS Code インスタンスを最大 12 時間サポートします。
-
クォータは AWS アカウントごと、1 日あたりに適用されます。
AWS IoT セキュアトンネリングエラーが発生した場合は、毎日のクォータのリセットを待つか、 サポートに連絡して AWS クォータ制限の引き上げをリクエストしてください。 AWS サポート連絡先情報については、AWS サポート連絡先ポータル
ソースマップを使用した TypeScript Lambda 関数のデバッグ
以下のセクションでは、ソースマップを使用して TypeScript Lambda 関数をデバッグする方法について説明します。
前提条件
TypeScript Lambda 関数をデバッグするには、次の前提条件を満たす必要があります。
-
TypeScript は、ソースマップオプションが有効になっている必要があります。詳細については、VS Code ドキュメントの JavaScript ソースマップのサポート
トピックを参照してください。 -
インラインソースマップを使用するには、すべての変更をクラウドに再デプロイする必要があります。
設定
AWS Toolkit で TypeScript Lambda 関数の Lambda リモートデバッグを設定するには、次の手順を実行します。
-
Toolkit から AWS 、 AWS エクスプローラーを展開します。
-
エクスプローラーから、Lambda ノードを展開します。
-
TypeScript に設定する 関数に移動し、コンテキストメニューからリモート呼び出しアイコンを選択してリモート呼び出し設定画面を開きます。
-
リモートデバッグを有効にするには、リモートデバッグチェックボックスをオンにします。
-
を含むディレクトリをポイントして、ローカルルートパスを設定します
TypeScript handler file
。注記
TypeScript handler file
は、デバッグブレークポイントを設定する場所です。 -
リモートデバッグの追加設定を展開します。
-
ソースマップチェックボックスをオンにして、ソースマッピングを有効にします。
-
Out files フィールドを Lambda 関数のコピーのローカルディレクトリに設定します。
app.js
とapp.map
が にある場合は.aws-sam/build/HelloWorldFunction
、出力ファイルの場所を にします/Users/
。user
/project
/aws-sam/build/HelloWorldFunction
/*注記
Out ファイルパスは絶対パスである必要があります。
-
設定に満足したら、リモート呼び出しボタンを選択して TypeScript 関数のデバッグを開始します。