AWS Cloud9からPython3で作成したLambda関数を実行する
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ドキュメント