前回からの続きです。
今回は、lambda関数の手動実行についてです。
■はじめに
lambdaを触り始めの方によく聞かれるのが、「lambda関数を手動実行したい」というものでした。
これを聞いて「え?何言ってるの?」と思う方ももしかしたらいるかもしれません。
ただ、本当にこの質問けっこう多いです。
というのも、「とりあえずlambdaやってみよう!触ってみよう!」って方は、AWSマネコンからlambda関数を作成して~って流れになります。
で作成を進めて最初に現れるlambda画面は以下です。
で、コードを書いて「よし、できた!」ってなるんです。
CLIであれば、bashであれpythonであれコマンド実行してっていうのが思いつきますが、GUIの場合、「この後、どうするの?」ってなるんです。。。
※ 例えば、GUIのどこかに「Go」ボタンとかあれば悩まなくてすむのになーと個人的に思ってます。
■lambda関数の手動実行方法について
前置きが長くなりましたが、lambda関数の手動実行は「Test」ボタンの押下です。
※余談ですが、コードを保存したいときは「Deploy」ボタンの押下です。
lambdaは基本的には何かしらのトリガーから実行されます。(lambda関数が何かに押されるイメージです。"何か"が「トリガー」に該当します。)
トリガーは「API Gateway」「S3」などのAWSサービス、サードパーティ製品(Datadog、NewRelic)などがあります。※ここでは本題からそれるので詳細は割愛。
lambda関数の手動実行時には、このトリガーを自分で作る必要があります。
「トリガーを作る」=「Testボタンの押下」です。
■テストデータの作成
手動実行するために、まずはテストデータを作成します。
「Test」ボタンを押下すると、以下のような画面が出てきます。
「イベント名」は適当に好きなものを入力してください。
「イベント共有の設定」は「プライベート」のままでOKです。
「テンプレート」は何でも良いのですが、一旦「Hello World」にしてください。
「イベントJSON」に下記のようにJSON形式でデータが書き込まれているのを確認し、「保存」ボタンをクリックします。
■lambda関数の手動実行
テストデータが作成されると最初のコードの画面に戻ってくるので、「Test」を押下します。
そうすると「Execution results」タブに実行結果が表示されます。
※今回のlambda関数はprint(event)を行っているだけなので、テストデータの内容がprintされているだけです。
lambda手動実行はこんな感じ行います。
CLIの方がlambda手動実行イメージが持ちやすいと思いますが、最初は何でもGUIからっていうところで説明をさせていただきました。
■補足:lambda手動実行にあまりしっくり来ていない方へ
中には(lambda触り始めの私みたいに)まだしっくり来てない方もいるかもしれません。
もしかしたらもう少し複雑な内容(具体的な例)の方がイメージが湧くかもしれません。
ということで、停止中のEC2を起動させるケースをやってみます。
※今回は、よくあるlambda_handler(events,context)という表記を使わずに、ec2infoとしました。(なんでもいいんだよってことを表したかっただけです)
テストデータは予め以下のものを用意しておきました。
※EC2はこのあと削除しているので、インスタンスID見えてても気にしない。
キーがinstanceid、バリューがi-0e~55です。
lambda関数がこのテストデータを受け取った後は、
4行目の処理で、ec2info引数の中にこのテストデータが格納されます。
7行目の処理で、ec2info['intanceid']により ec2.Instance(i-0e~55)となります。
8行目の処理で、ec2.Instance(i-0e~55) を起動させています。
9行目の処理で、ec2.Instance(i-0e~55)の起動待ちを行い
10行目の処理で、完了です。
少しでもイメージがつけば幸いです。
以上です。