AWS Cloud9上で、Lambda関数を作成して実行します。
大まかな流れは下記になります。
- ローカル上にLambda関数を作成
- ローカル上のLambda関数を(デバッグ)実行
- AWS上にLambda関数をデプロイして実行
ここでいうローカルとは、ブラウザで起動したCloud9環境を指します。
Lambda関数はPython3で作成します。
Python3の構築は下記エントリを参照してください。
AWS Lambdaの連携先リージョン
その前にLambdaの連携先リージョンを変更します。
EC2環境のデフォルトでは、Lambdaの連携先リージョンは、AWS Cloud9を起動したリージョンと同じになります。
AWS Cloud9 EC2環境をシンガポールリージョンで作成した場合、Lambdaや実行ロール、それを作成するCloudFormationは、同じシンガポールリージョンに作成されます。
今回は、Lambdaの連携先をシンガポールリージョンから東京リージョンに変更します。
- ツールバー右側の歯車アイコンを選択して、プロジェクト設定を開く
- [AWS SETTINGS] を選択
- [AWS Region] を
Asia Pacific (Tokyo)に変更

特に設定反映ボタンはありません。
ローカル上にLambda関数を作成
ローカル上、つまりAWS Cloud9 環境上に、Lambda関数を作成します。
右側サイドバーにある、[AWS Resources]を選択して [AWSリソース] ウィンドウを開きます。
ウィンドウ右上に、プロジェクト設定で選択した東京リージョン ap-northeast-1 が表示されています。
それではLambda関数を作成しましょう。 オレンジ色の [λ+] ボタンをクリックします。

サーバーレスアプリケーションの作成
関数名とアプリケーション名を入力します。

ここで入力した関数名とアプリケーション名は、Cloud9環境内のディレクトリ名、AWS Lambda関数名に使われます。


ランタイム(言語とバージョン)とテンプレートとなる設計図を選択します。
- ランタイムから
Python 3.6を選択 - 設計図として
hello-world-python3を選択 - [Next] ボタンをクリック

関数トリガーでは、API Gateway と連携するかを設定します。
今回はデフォルトのnoneのまま、[Next] ボタンをクリックします。

メモリとロールを選択します。
今回はデフォルトのまま、[Next] ボタンをクリックします。
ロールは自動生成されます。

確認画面です。
問題がなければ、[Finish] ボタンをクリックします。

ローカル上にいくつかのファイルが作成され、指定したリージョンにAWS Lambda関数(とロール)が作成されます。
Lambdaコードの修正
環境ウィンドウ内のlambda_function.pyをダブルクリックして、タブウィンドウにLambda関数を表示します。

下記コードに差し替えて、保存 (Command+S) します。
lambda_function.py
import json print('Loading function') def lambda_handler(event, context): message = 'Hello {} {}!'.format(event['first_name'], event['last_name']) return { 'message' : message }
入力された名前と文字を連結して返すだけのシンプルなコードです。
ローカル上のLambda関数を実行
作成したLambda関数をローカル上で実行します。
操作は [AWSリソース] ウィンドウから行います。
- [Local Functions] 内のLambda関数
myHelloWorldを右クリックしてメニュー表示 - [Run] - [Run Local] を選択

[実行] タブが表示されます。
[実行] タブ内の [Payload] ペインで、JSON形式で入力データを登録します。
{ "first_name": "太郎", "last_name": "山田" }
[Run] ボタンをクリックすると、結果が下に表示されます。

ローカル上でLambda関数をデバッグする
今度はデバッグ実行してみましょう。
行番号の横をクリックして、ブレークポイントを貼ります。 赤い円が表示されます。

[Run] ボタン右側の [バグ] アイコンをクリックします。アイコンが灰色から緑に切り替わります。
この状態で、[Run] ボタンをクリックします。

ブレークポイントでコードが一時停止され、[デバッガー] ウィンドウに現在の値が表示されます。

AWS上でLambda関数を実行
ローカル上のLambda関数をAWS上にデプロイして実行します。
操作は [AWSリソース] ウィンドウから行います。
AWS上にデプロイ
- [Local Functions] 内のLambda関数
myHelloWorldを右クリックしてメニュー表示 - [Deploy] を選択
指定したリージョンへLambda関数がデプロイされます。

Lambda関数のリモート実行
- [Local Functions] 内のLambda関数
myHelloWorldを右クリックしてメニュー表示 - [Run] - [Run Remote] を選択

[実行] タブ内の接続先が、Lambda (remote)になっていることを確認して、[Run] ボタンをクリックします。

[結果] ペインにステータスコード200が表示されていれば成功です。
削除
作成したLambda関数を削除する場合、AWS側のリソースとローカル上の両方を削除する必要があります。
AWS側のリソース
CloudFormationから削除します。
[サービス] - [管理ツール] - [CloudFormation] からスタックを削除します。

ローカル上
AWS Cloud9 [環境] パネル上のアプリケーションディレクトリを右クリックして削除します。
まとめ
AWS Cloud9を利用すれば、Lamba関数を簡単にデバッグすることができます。
PC上にローカル環境(aws-sam-cli)を構築する必要はありません。
今回は触れていませんが、既存のLamba関数をAWS Cloud9上にインポートすることもできます。
気軽に試してみましょう。
参考
- AWSドキュメント