AWS Lambda リモートデバッグ - AWS Toolkit for VS Code

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 を有効にします。セキュアトンネリングを使用して、ローカルデバッガーと Lambda ランタイム環境の間に AWS IoT 安全な接続が確立されます。この接続により、ローカルコードブレークポイントを使用して、リモートで実行される関数をステップスルーできます。デバッグセッションが完了すると、すべての一時的な変更は自動的に元の設定に戻ります。

開始方法

ランタイムのサポート

次のランタイムは、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 リモートデバッグにアクセスするには、エクスプローラーまたは Application Builder エクスプローラーの AWS 2 つの主要なパスがあります。 AWS エクスプローラーから、 AWS Lambda ノードを介して Lambda リモートデバッグにアクセスできます。Application Builder エクスプローラーから、ローカル AWS SAM プロジェクトを通じて Lambda リモートデバッグにアクセスできます。

AWS エクスプローラーからの Lambda リモートデバッグへのアクセス
  1. VS Code から Toolkit AWS 拡張機能を開きます。

  2. Toolkit から AWS 、 AWS エクスプローラーを展開します。

  3. エクスプローラーから、Lambda ノードを展開します。

  4. デバッグする関数に移動し、コンテキストメニューからリモート呼び出しアイコンを選択してリモート呼び出し設定画面を開きます。

Application Builder エクスプローラーから Lambda リモートデバッグにアクセスする。
  1. VS Code から Toolkit AWS 拡張機能を開きます。

  2. AWS Toolkit から、Application Builder Explorer を展開します。

  3. エクスプローラーから、デバッグする Lambda AWS SAMプロジェクトを含むプロジェクトを展開します。

  4. デバッグするデプロイされたLambda関数を展開します。

  5. 関数リモートに移動し、コンテキストメニューからリモート呼び出しアイコンを選択してリモート呼び出し設定画面を開きます。

Lambda リモートデバッグの使用

以下のセクションでは、 で Lambda リモートデバッグを使用する方法について説明します AWS Toolkit for Visual Studio Code。

注記

Lambda 関数には、関数コードとアタッチされたすべてのレイヤーに対して、5 レイヤーの制限と 250MB の合計制限があります。Lambda リモートデバッグを実行するには、少なくとも 1 つの空きレイヤーが必要です。

デバッグセッションの設定

開始する前に、次の手順を実行してデバッグセッションを設定します。

  1. 前のセクションにある「エクスプローラーからの AWS Lambda リモートデバッグへのアクセス」または「Application Builder エクスプローラーからの Lambda リモートデバッグへのアクセス」の手順を完了して、リモート呼び出し設定メニューを開きます。

  2. リモート呼び出し設定メニューからリモートデバッグチェックボックスをオンにして、リモートデバッグプロパティを表示します。

  3. ローカルハンドラーファイルへのローカルルートパスを指定します。

    注記

    ローカルルートパスは、デプロイされた Lambda 関数に一致するソースコードの場所です。Application Builder エクスプローラーでデプロイされた関数から作業している場合、ローカルルートパスは自動的に検出されます。

    ソースコードをローカルに保存していない場合は、リモートコードのダウンロードボタンを選択して Lambda 関数のソースコードを取得します。これにより、VS Code エディタhandler fileで が開きます。

  4. ペイロードセクションで、テストイベントデータを取得する場所を指定します。

ブレークポイントの設定とデバッグ

ブレークポイントを設定し、次の手順を実行してデバッグを開始します。

  1. VS Code エディタhandler fileの から、ガーターマージンをクリックして、デバッグを一時停止する行番号にブレークポイントを設定します。

  2. ブレークポイントに満足したら、リモート呼び出し設定メニューに戻り、設定が正しく設定されていることを確認してから、リモート呼び出しボタンを選択してデバッグを開始します。

  3. AWS Toolkit は、Lambda 関数をデバッグ機能で更新し、デバッグセッションのセキュアトンネルを確立し、指定されたペイロードで関数を呼び出し、ブレークポイントに達するとプロセスを一時停止します。

  4. ブレークポイントの一時停止時に、RUN AND DEBUG ペインを使用して VARIABLESCALL STACKBREAKPOINTS を表示します。

関数の更新とテスト

コードを変更し、クイックデプロイで変更をテストするには、次の手順を実行します。

  1. デバッグセッションをアクティブにして、VS Code エディタhandler fileで を変更します。

  2. 変更を保存する (Command+S on macOSCtrl+S on Windows

  3. プロンプトが表示されたら、変更のデプロイに進むことを確認します。Toolkit AWS は、変更されたコードで Lambda 関数を更新します。

  4. 新しいブレークポイントを設定し、リモート呼び出しボタンを再度選択して、変更のデバッグとテストを続行します。

    注記

    または、VS Code デバッグコントロールでデバッガーのアタッチオプションの選択を解除し、リモート呼び出しボタンを選択してデバッグなしで関数を実行できます。

デバッグセッションの終了

以下の各オプションは、リモートデバッグセッションを終了し、プロジェクトからデバッグレイヤーを削除します。

  • リモート呼び出し設定画面からデバッグセットアップの削除オプションを選択します。

  • VS Code デバッグコントロールから切断アイコンを選択します。

  • VS Code エディタhandler fileで を閉じます。

注記

以下の情報を記録します。

  • Lambda デバッグレイヤーは、60 秒間非アクティブになると自動的に削除されます。カウントは、最後の呼び出しが完了したときに開始されます。

  • デバッグプロセス中に infrastructure-as-code (IaC) マネージド (AWS SAM、 AWS CDK、Terraform) 関数にコード変更を加えた場合は、ローカルプロジェクトに保存し、ソースコントロールリポジトリの更新を検討してください。保存されていない変更は、IaC 関数が再デプロイされると上書きされます。

  • デバッグのみを目的として一時的な変更を加えた場合は、ソースコントロールから関数を再デプロイして、本番コードと一致するようにすることができます。

トラブルシューティングと高度なユースケース

デバッグセッションが失敗した場合は、以下の手順を実行してトラブルシューティングプロセスを開始します。

  1. AWS Toolkit を最新バージョンに更新します。

  2. リモート呼び出し設定ウェブビューを閉じて再度開き、ウェブビューを更新します。

  3. VS Code を完全に閉じ、再度開いて再起動します。

  4. VS Code Command Palette を開き、コマンド を入力しAWS: Reset Lambda Remote Debugging Snapshot、Lambda リモートデバッグスナップショットをリセットするために結果に入力するときに選択します。

  5. 問題のトラブルシューティングができない場合は、AWS Toolkit for Visual Studio Code GitHub の問題に問題を送信します。

高度なユースケース: コード署名設定

リモートデバッグには、Lambda 関数にデバッグレイヤーをアタッチする必要があります。関数でコード署名設定が有効で強制されている場合、 AWS Toolkit はデバッグレイヤーを関数に自動的にアタッチできません。

コード署名設定の問題を解決するには、2 つのオプションがあります。

  • コード署名を一時的に削除します。

  • 署名付きデバッグレイヤーを使用します。

コード署名の一時的な削除

を設定してコード署名設定を更新しUntrustedArtifactOnDeployment : Warn、デバッグプロセスの完了Enforced後に に再度有効にします。

詳細については、 API リファレンスの UpdateCodeSigningConfig AWS Lambda リファレンスを参照してください。

署名付きデバッグレイヤーの使用

  1. Toolkit の Lambda リモートデバッグから AWS 、リモートデバッグの追加設定セクションを展開します。

  2. リモートデバッグの追加設定セクションから、レイヤーオーバーライドフィールドからリージョンレイヤー ARN をコピーします。

  3. から AWS CLI、次のコマンドを使用してレイヤーバージョン をダウンロードしaws lambda get-layer-version-by-arn --arn layer-arnLayer-arn をレイヤー ARN に置き換えます。署名付きデバッグレイヤーをダウンロードする詳細な手順については、 コマンドリファレンスの get-layer-version-by-arn リファレンスを参照してください。 AWS CLI

  4. コード署名設定で Layer に署名し、アカウントに公開します。署名と公開のガイダンスについては、「 AWS Serverless Application Model デベロッパーガイド」のAWS SAM 「アプリケーション用のコード署名の設定」トピックを参照してください。

  5. レイヤーに署名してアカウントに公開したら、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 サポート連絡先ポータルを参照してください。 AWS IoT セキュアトンネリングの詳細については、「 AWS IoT デベロッパーガイド」のAWS IoT 「セキュアトンネリング」トピックを参照してください。

ソースマップを使用した TypeScript Lambda 関数のデバッグ

以下のセクションでは、ソースマップを使用して TypeScript Lambda 関数をデバッグする方法について説明します。

前提条件

TypeScript Lambda 関数をデバッグするには、次の前提条件を満たす必要があります。

  • TypeScript は、ソースマップオプションが有効になっている必要があります。詳細については、VS Code ドキュメントの JavaScript ソースマップのサポートトピックを参照してください。

  • インラインソースマップを使用するには、すべての変更をクラウドに再デプロイする必要があります。

設定

AWS Toolkit で TypeScript Lambda 関数の Lambda リモートデバッグを設定するには、次の手順を実行します。

  1. Toolkit から AWS 、 AWS エクスプローラーを展開します。

  2. エクスプローラーから、Lambda ノードを展開します。

  3. TypeScript に設定する関数に移動し、コンテキストメニューからリモート呼び出しアイコンを選択してリモート呼び出し設定画面を開きます。

  4. リモートデバッグを有効にするには、リモートデバッグチェックボックスをオンにします。

  5. を含むディレクトリをポイントして、ローカルルートパスを設定しますTypeScript handler file

    注記

    TypeScript handler file は、デバッグブレークポイントを設定する場所です。

  6. リモートデバッグの追加設定を展開します。

  7. ソースマップチェックボックスをオンにして、ソースマッピングを有効にします。

  8. Out files フィールドを Lambda 関数のコピーのローカルディレクトリに設定します。

    app.jsapp.mapが にある場合は.aws-sam/build/HelloWorldFunction出力ファイルの場所を にします/Users/user/project/aws-sam/build/HelloWorldFunction/*

    注記

    Out ファイルパスは絶対パスである必要があります。

  9. 設定に満足したら、リモート呼び出しボタンを選択して TypeScript 関数のデバッグを開始します。