

# Visual Studio Code での Lambda 関数のリモートデバッグ
<a name="debugging"></a>

[AWS Toolkit for Visual Studio Code](https://aws.amazon.com/visualstudiocode/) のリモートデバッグ機能を使用すると、AWS クラウドで直接実行されている Lambda 関数をデバッグできます。この機能は、ローカルでの再現が難しい問題や、ログだけでは診断が難しい問題の調査に役立ちます。

リモートデバッグでは、以下を実行できます。
+ Lambda 関数コードにブレークポイントを設定する。
+ コード実行のステップスルーをリアルタイムで行う。
+ ランタイム中の変数と状態を検査する。
+ AWS にデプロイされた Lambda 関数をデバッグする (VPC 内にある関数や特定の IAM 許可を持つ関数を含む)。

## ランタイムのサポート
<a name="debugging-runtimes"></a>

リモートデバッグは、次のランタイムでサポートされています。
+ Python (AL2023)
+ Java
+ JavaScript/Node.js (AL2023)

**注記**  
リモートデバッグは、x86\$164 アーキテクチャと arm64 アーキテクチャの両方でサポートされています。

## セキュリティとリモートデバッグ
<a name="debugging-security"></a>

リモートデバッグは、既存の Lambda セキュリティ境界内で動作します。ユーザーは、関数の環境変数と設定にアクセスする能力を既に保有している `UpdateFunctionConfiguration` 許可を使用して、関数にレイヤーをアタッチできます。リモートデバッグがこれらの既存の許可の範囲を超えることはありません。その代わりに、セキュアなトンネリングと自動セッション管理を通じてセキュリティコントロールを強化します。さらに、リモートデバッグはお客様が完全に制御する機能であり、明示的な許可とアクションが必要です。
+ **IoT セキュアトンネルの作成**: AWSToolkit は IoT セキュアトンネルを作成する必要があります。これは、`iot:OpenTunnel` を使用したユーザーの明示的な許可がある場合にのみ行われます。
+ **デバッグレイヤーのアタッチとトークンの管理**: デバッグプロセスは、以下のコントロールを使用してセキュリティを維持します。
  + デバッグレイヤーは Lambda 関数にアタッチされる必要があります。このプロセスには、`lambda:UpdateFunctionConfiguration` 許可と `lambda:GetLayerVersion` 許可が必要です。
  + セキュリティトークン (`iot:OpenTunnel` 経由で生成) は、各デバッグセッションの前に関数環境変数で更新される必要があります。これには `lambda:UpdateFunctionConfiguration` も必要です。
  + セキュリティのため、このトークンは自動的にローテーションされます。デバッグレイヤーは各デバッグセッションの終了時に自動的に削除され、再利用することはできません。

**注記**  
リモートデバッグは、x86\$164 アーキテクチャと arm64 アーキテクチャの両方でサポートされています。

## 前提条件
<a name="debugging-prerequisites"></a>

リモートデバッグを開始する前に、以下を確認してください。

1. AWS アカウントに Lambda 関数がデプロイされている。

1. AWS Toolkit for Visual Studio Code がインストールされている。インストール手順については、「[Setting up the AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html)」を参照してください。

1. **3.69.0** 以降の AWS Toolkit バージョンがインストールされている。

1. AWS Toolkit for Visual Studio Code で AWS 認証情報が設定されている。詳細については、「[認証とアクセスコントロール](foundation-iac-local-development.md#lambda-functions-vscode-authentication-and-access-control)」を参照してください。

## Lambda 関数のリモートデバッグ
<a name="debugging-procedure"></a>

次の手順を実行して、リモートデバッグセッションを開始します。

1. 左側のサイドバーにある AWS アイコンを選択して、VS Code で AWS Explorer を開きます。

1. Lambda セクションを展開して関数を表示します。

1. デバッグする関数を右クリックします。

1. コンテキストメニューから、**[リモートで呼び出す]** を選択します。

1. 開いた呼び出しウィンドウで、**[デバッグを有効にする]** ボックスにチェックを入れます。

1. **[呼び出す]** をクリックしてリモートデバッグセッションを開始します。

**注記**  
Lambda 関数には、関数コードとアタッチされたすべてのレイヤーに対して合計で 250 MB の制限があります。リモートデバッグレイヤーは、関数のサイズに約 40 MB を追加します。

リモートデバッグセッションは、次を行うときに終了します。
+ リモート呼び出し設定画面から **[デバッグセットアップを削除]** を選択。
+ VS Code のデバッグコントロールで切断アイコンを選択。
+ VS Code エディタでハンドラーファイルを選択。

**注記**  
デバッグレイヤーは、前回の呼び出しから 60 秒間非アクティブ状態が続くと自動的に削除されます。

## リモートデバッグの無効化
<a name="debugging-disable"></a>

この機能を無効にする方法は 3 つあります。
+ **関数の更新を拒否する**: `lambda:UpdateFunctionConfiguration` を `deny` に設定します。
+ **IoT 許可を制限する**: IoT 関連の許可を拒否します。
+ **デバッグレイヤーをブロックする**: 次の ARN で `lambda:GetLayerVersion` を拒否します。
  + `arn:aws:lambda:*:*:layer:LDKLayerX86:*`
  + `arn:aws:lambda:*:*:layer:LDKLayerArm64:*`
**注記**  
この機能を無効にすると、関数設定の更新中にデバッグレイヤーが追加されなくなります。

## 追加情報
<a name="debugging-related-info"></a>

VS Code での Lambda の使用に関する詳細については、「[VS Code を使用した Lambda 関数のローカル開発](foundation-iac-local-development.md)」を参照してください。

詳しいトラブルシューティング手順、高度なユースケース、利用可能なリージョンについては、「AWS Toolkit for Visual Studio Code User Guide」の「[Remote debugging Lambda functions](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/lambda-remote-debug.html)」を参照してください。