AWS LambdaのコンソールからIDEに接続しリモートデバッグする

に公開

はじめに

AWS lambda開発のための機能の紹介です。
今回はAWS LambdaのコンソールからIDEに接続をしに行く流れの話です。

大体が IaC で開発が進むでしょうから、IDE環境より先にAWS Lambdaコンソールに実装があることは今の時代は稀でしょうか。 Lambda の IAMの動作確認をしたい場合等があるかもしれません。

以下の記事に従って試してみたいと思います。

IDEからAWS lambdaに接続してデバッグする部分の流れは以下の記事が詳しいです。

環境

本記事の動作確認は以下の環境で行いました。

  • MacBook Pro
  • 14 インチ 2021
  • チップ:Apple M1 Pro
  • メモリ:32GB
  • macOS:15.5(24F74)

AWS Lambda のコンソールから IDE への接続とリモートデバッグにより、サーバーレス開発を簡素化する

本記事で紹介するのはAWS Lambdaコンソールと IDE の統合とリモートデバッグです。これらの新機能は、2024年後半にリリースされたコンソール内編集エクスペリエンスの強化や、ローカル統合開発環境 (IDE) エクスペリエンスの改善など、Lambda 開発エクスペリエンスに対する最近の改善を基盤としています。

開発者は通常、ワークフローを効率化するために

  • ローカル開発環境のセットアップ
  • クラウドデバッグ機能

という2つの領域に重点を置きます.

さらに、関数はクラウド内の様々なAWSサービスと連携するため、開発者は開発サイクルの早い段階で問題を特定・解決するための強化されたデバッグ機能を求めています。これにより、ローカルエミュレーションへの依存を減らし、開発ワークフローを最適化できます。

コンソールとIDEの統合

ローカル開発環境のセットアップのために、Lambdaコンソールに「Visual Studio Codeで開く」ボタンが追加され、開発者はブラウザで関数を表示してからIDEで編集する作業に素早く移行できるため、ローカル開発環境のセットアップに時間を要する手間が省けます。

コンソールとIDEの統合により、セットアッププロセスが自動的に処理され、VS CodeのインストールとAWS Toolkit for VS Codeの確認が行われます。

すでに全ての設定が完了している開発者は、ボタンをクリックするとすぐにVS Codeで関数コードが開き、編集を続行して数秒でLambdaにデプロイできます。VS Codeがインストールされていない場合はダウンロードページに誘導され、AWS Toolkitがインストールされていない場合はインストールを促すメッセージが表示されます。

IDEからコードの編集、新しいファイル/フォルダの追加が可能で、変更を加えると自動デプロイプロンプトがトリガーされます。デプロイを選択すると、AWS Toolkit によって関数が AWS アカウントに自動的にデプロイされます。

リモートデバッグ

開発者はIDEに関数を組み込んだ後、VS Codeから直接AWSアカウントにデプロイされたLambda関数をリモートデバッグでデバッグできます。リモートデバッグの主なメリットは、他のAWSサービスと統合された状態でクラウド上で実行される関数をデバッグできるため、より迅速かつ信頼性の高い開発が可能になることです。

リモートデバッグにより、開発者はAmazon Virtual Private Cloud (VPC)リソースとAWS Identity and Access Management (AWS IAM)ロールへの完全なアクセスを使用して関数をデバッグできるため、ローカル開発とクラウド実行の間のギャップが解消されます。例えば、VPC内のAmazon Relational Database Service (Amazon RDS)データベースとやり取りするLambda関数をデバッグする場合、開発者は本番環境と異なる可能性のあるローカル環境の設定に時間を費やすことなく、クラウドで実行されている関数の実行環境を数秒以内にデバッグできます。

試してみる

では試してみます。AWSコンソールから作成します。適当に名前をつけ、Python3.13を指定しました。

始めてみた画面出てきました!今こんなんなってるんですね。Open in Visual Studio Code を実行してみます。

以下のダイアログがブラウザに表示されました。 Visual Studio Code.appを開く を実行します。

AWS Toolkit Extension が入っていなかったのでインストール要求が出ました。「Install Extension and Open URI」を実行します。

Amazon Web Service を信頼しインストールします。

認証情報が必要になります。 Select Connection を実行します。

登録されている認証情報を選択します。

VSCodeにLambdaのコードを信頼するように設定する。「Yes, I trust the authors」 を実行する。

コードと右側には README.md が表示されました!

EXPLORER を押すとMFAコードが求められたので入力します。

クラウド上の lambdaDebug を見ることができました!

lambdaDebug の横の を押すと右の Remote invoke configuration が開きました。
「Remove Invoke」してみます。動作したようです!VSCode側とAWS Consoleの両方に同じログが出ています。(上がブラウザ上のAWSコンソール、下がVSCodeです)。また、TERMINAL に表示されているパスが /tmp/... となっていて一時的な環境で実行していることがわかります。

ついでにデバッグも確認してみます。その前に設定が必要になります。設定をしていないと以下のようなメッセージが表示されブレークポイントは設定できません。

ファイルをダウンロードすると、lambda_function.py という同名のタブが増えました。
設定後改めて Remote Invoke してみました。
無事ブレークポイントで停止していることが確認できました!

ちなみにブレークしてもlambdaがタイムアウトしないのは、冒頭のリンク先で紹介されているように タイムアウトも最大まで伸ばすという変更 が入るそうです。なので15分経てばタイムアウトで終了するはずですね。

権限の変更をしてみる

ここまでで一応デバッグはできたので権限を追加するテストをしてみたいと思います。
lambdaのデフォルトの権限では付与されていないs3のバケットの情報を取る処理をしてみます。
コードを変更し、「デプロイしますか?」という問い掛けに「Yes」と回答する。

クラウド上のコードも変更されました。

「Remote Invoke」してみると権限エラーになりました。

AWSコンソールからS3の権限を追加します。

権限エラーはなくなりましたが、別のエラーになりました 💦
datetime型が含まれていて、JSON Serializeできなくてエラーになったようです。

コードを修正したら実行できました!

さいごに

AWS Lambda コンソールから localのVSCodeにコードを移行し、localのIDEから実行、デバッグできることが確認できました!
簡単にdeploy環境でlambdaが実行できるので、デバッグがはかどりますね!

参考書籍

Discussion