目次
1.AWS Lambdaとは
AWS環境でアプリケーションを構築する場合、通常は仮想サーバーであるEC2インスタンスを用意し、その環境でプログラムを動かします。
しかし、それを行うには、OSやライブラリ、フレームワーク等をインストールし、プログラムの実行環境を整えてあげなくてはいけません。非常に手間が掛かりますし、その後の管理も必要です。
大規模なアプリケーションを構築する場合はEC2で構築するのがベストだと思いますが、そこまで規模が大きくなく、小規模な機能を構築したい場合、わざわざEC2で構築するには面倒くさいし、余分なコストも掛かりますよね。
そんな時に役に立つのが「AWS Lambda」(※以下、Lambda)となります。
Lambdaは、サーバーレスアーキテクチャと呼ばれ、EC2インスタンスのような仮想サーバーを用意する必要がありません。
実行環境は全てAWSによって用意され、開発者は実行したいプログラム(※)を関数として実装し、Lambdaにアップロードするだけとなります。
(※)2024年2月現在、Java、Go、PowerShell、Node.js、C#、Python、Rubyがサポートされています。
2.Lambdaの特徴
Lambdaは、以下のような特徴があります。
・ステートレスな実行環境
…Lambda関数はその都度実行され、実行が終わるとステータスは破棄されます。
前回の実行状態は保持できません。
・最大稼働時間の制限
…Lambda関数の最大加増時間は5分です。それを超える処理の実行はできません。
要するに、「必要に応じて少しだけ動かす」処理に向いています。
・スケーリングの自動化
…EC2のように負荷を考慮した設計を行う必要はありません、
その時の負荷に応じてAWSがスケーリングを行ってくれます。
3.Lambdaの利用権限付与
Lambdaを利用する場合は、開発者のIAMユーザーに対象のポリシーを割り当てる必要があります。
利用方法によって付与するポリシーは細かく設定されていますが、ひとまずは以下を付与しておけば本記事では問題ありません。
・AWSLambdaFullAccess
…Lambda関連の各種ソースへのフルアクセス権。
・AWSLambdaBasicExecutionRole
…Lambda実行結果をCloudWatch Logsへの書き込むためのアクセス権。
① Lambda利用権限の付与手順

まずはIAMダッシュボード画面から、Lambdaを利用したいIAMユーザーを選択し、その管理画面に移動してください。
同画面からポリシーを付与しますので、「許可を追加」をクリックします。
※プルダウンが表示されますので、更に「許可を追加」を選んでください。

「許可を追加」画面に移動しますので、「ポリシーを直接アタッチする」を選択後、許可ポリシーの一覧から対象のポリシーを選びます。
因みに、ポリシーは数が多いので、検索窓で名称の一部を入力した方が探しやすいです。
※今回は、検索窓に「AWSLambda」と入力しています。
これで、Lambda関連のポリシーが選択できますので、
・AWSLambdaFullAccess
・AWSLambdaBasicExecutionRole
以上2つのポリシーを選択し、「次へ」をクリックします。

確認画面で2つのポリシー付与を確認後、「許可を追加」をクリックしてください。

この画面のようにポリシーが追加されれば、成功です。
これでLambdaの開発、及び利用が可能となります。
4.Lambda関数の作成~実行
では、早速Lambda関数を作成してみましょう。
今回はサンプルとして、足し算プログラムを作成し、それをLambda関数としてアップロードします。
イメージとしては、以下の通りです。

今回作成するLambda関数は、引数”x”、”y”をJSON形式のデータで渡し、2つの値を加算して”result”として出力するという、Pythonを使用した関数です。
因みに、結果はCloudWatch Logsにもログとして出力させます。
① 作成画面への移動

まずはマネジメントコンソール画面にて、検索窓に”Lambda”と入力してみましょう。
すると、サービスとして「Lambda」が抽出されるので、クリックしましょう。

この時点では、まだLambda関数は1件も作成されていません。
「今すぐ始める」というメッセージが表示されるので、「関数を作成」をクリックしてください。
② Lambda関数の作成

「関数の作成」画面に移動しました。
今回は初めからLambda関数を作成する必要があるので、「一から作成」を選択しましょう。
すると、関数の基本情報が入力可能となります。上記画面の通り、
・関数名:CalcLambda
・ランタイム:PythonX.XX(今の時点での最新のバージョンを選択)
このように入力し、「関数の作成」をクリックしてください。
※他の部分はひとまず変更なしで大丈夫です。

このような画面になれば、とりあえずLambda関数は作成されています。
この段階では、まだ箱ができただけ、という状態なので、この関数にPythonで足し算プログラムを実装していきます。

先ほど作成した「CalcLambda」の画面下部にある「コード」を開いてください。
作成直後の場合、上記赤枠内の通り、lambda_functionタブにはPythonの雛形コードがデフォルトで用意されています。
今回は、この部分を足し算プログラムに置き換えます。
import json
def calcfunc_handler(event, context):
x = int(event['x'])
y = int(event['y'])
resultval = {'result' : x + y}
print("x = " + str(x))
print("y = " + str(y))
print("result = " + str(resultval))
return json.dumps(resultval)↓↓↓

置き換えると、こんな感じですね。
この関数を実行すると、イベントとして受け渡されたJSONファイルの値である”x”、”y”を加算し、”result”として表示してくれます。
因みにprint文は、任意の値や文字列をCloudWatch Logsに出力するための命令です。

↓↓↓

コード修正が終わりましたら、更に下にスクロールしていただき、「ランタイム設定」を変更する必要があります。
今回はLambda_function.pyのcalcfunc_handlerを実行するので、ハンドラは「Lambda_function.calcfunc_handler」としてください。
これを行わないと、「モジュールがありません」となりLambda関数が実行されませんので、注意が必要です。
③ テストイベントの作成

コードの準備ができたら、次はテストイベントの作成を行います。
「CalcLambda」の画面から「テスト」>「新しいイベントを作成」という形で選択していきます。
イベント名は任意で問題ありません。今回は関数名と同じ「CalcLambda」にします。
※任意の別名でも構いません。

次に設定するのは、イベントJSONです。
この部分に記載したJSONをLambda関数に読み込ませることで、Pythonのプログラムがevent引数としてJSONを受け取り、その後の処理を実行します。
{
"x": 3,
"y": 2
}上記のJSONを設定することで、”x”、”y”の値を「calcfunc_handler」のevent引数に読み込ませることができます。

④ Lambda関数の実行
各種設定が終わりましたら、「保存」し、「テスト」をクリックしてください。
これで、作成したLambda関数が実行されます。

成功すると、上記のような画面が表示されます。
出力結果である
{"result":5}こちらが表示されていることが確認できます。
入力したJSONの値であるxとyの加算値である”5″がresultとして出力されました。
処理成功です。
因みに、「成功」メッセージの隣にある「ログ」のリンクをクリックすると、CloudWatch Logsが表示できます。
⑤ CloudWatch Logsでの結果表示

上記のように、「ログ」のリンクをクリックすることで「lambda/CalcLambda」のログ画面に移動できます。
ログストリームは複数に分かれているのですが、「すべてのログストリームを検索」をクリックすることで、まとめて表示させることが可能です。

こんな感じで、”x”、”y”、”result”の値をそれぞれ出力できています。
※Lambda関数でprint命令により出力した値です。
まとめ
これで、簡易的なLambda関数の作成~実行までを実施してみました。
本記事で作成した関数は非常にシンプルなものであり、実際には動作のトリガーなど、様々な要素を設定し、関数を作成していきます。
例えば、Amazon S3上にファイルを置いたことをトリガーとして任意のLambda関数を実行させるなど、AWS上の機能をトリガーとすることも可能です。
今後、別の記事で、Lambdaの様々な機能を使った凝った関数も作成してみようと思います。
(今回はここまで)
お読みいただき、有難うございました!



コメント