AWS Lambda超入門
前々から興味があった「AWS Lambda」を試してみます。
AWS Lambdaとは
Lambda(ラムダ:λ)はギリシャ文字の一つ。プログラミングの世界ではよく「ラムダ式」と言って、ざっくり「関数を変数として扱う」ことを指します。
// 三角形の面積を求める let getTriangleArea = function(base, height){ return base * height / 2; }; console.log(getTriangleArea(5, 4)); // 10で、
AWS Lambdaでどんなことができるのかというと。
サーバを使わずに、Java、Node.js、C#、Pythonなどで開発した処理(関数、クラス)を直接登録してサービスとして動かすことができるんですね。
コンピューターリソースを使うのはその処理が呼ばれたタイミングだけで、処理トリガーはAWS内で発生する色々なイベントに紐づけることができます。
このように、関数(機能)を登録するというところがLambda(ラムダ)の名前を冠しているのだと思います。
サーバレスアーキテクチャ
こういった、ある決められた処理に対して、サーバを(利用者から見て)常時起動させてコールされるのを待ち受けるのではなく、それがトリガーされたタイミングで動的にリソースを割り当てて動かすことをサーバレスアーキテクチャと呼びます。サーバレスのメリット・デメリット
サーバレスのメリットは、- 必要になった時しかリソース確保が行われないためサーバリソースの節約になる
- AWS LambdaではEC2のように起動時間ではなく、処理時間と処理回数によって課金されるため、場合によってはコスト節約になる
- 必要最低限の処理を記述すればよいため、プログラムコーディング量が減る
- ホストできるプログラミング言語が限られている
- 複雑な処理の実現は難易度が高い
- 長時間かかる処理には向かない
- クラウドでしか実現できないアーキテクチャのため、オンプレや他クラウドサービスへの移行に難があり、ベンダーロックインの危険がある。
AWS Lambdaを使ってみる
前置きはこれぐらいにして、それでは実際に使ってみましょう。 AWSダッシュボードからLambdaを選択します。 「関数の作成」を選択します。 「一から作成」を選択し、「基本的な情報」を入力していきます。 関数名、ランタイムと実行するためのIAMロールを選択します。今回はランタイムに「Node.js 8.10」を指定し、新しくIAMロールを作成します。
選択し終わったら「関数の作成」をクリックします。
関数ができました。
ブラウザからコードも編集できます。 httpsステータスコード「200:OK」と「Hello from Lambda!」のJSONをレスポンスで返すといった内容ですね。
リクエストパラメータを受け取れるよう、次のように編集します。
exports.handler = async (event) => { let body = JSON.stringify('Hello from Lambda!') + 'val1=' + event['key1']; const response = { statusCode: 200, body: body, }; return response; };右上の「保存」を押します( エディタの保存だけでは、実際の定義に反映されないので注意 )。
さらに横の「テスト」を選択します。
「テストイベントの設定」が開くのでテストイベントを定義します。
「作成」を押してテストイベントを作成します。
前の画面に戻るので、再度「テスト」を押すと。
テストが実行されます。
ログの詳細を開き、期待通りの結果か確認します。
Web APIとして呼んでみる
それでは、実際にトリガーを設定して呼び出してみます。API Gatewayのトリガーを追加します。 下に「トリガーの設定」が出てくるので、次のように設定します。 「セキュリティ」を「AWS IAM」にするとIAM認証、「オープン」にすると誰でもアクセス可能、「APIキー使用でのオープン」にするとAPIキーでの認証になります。
「追加」を押して、右上の保存を押すと、APIエンドポイントとAPIキーが確認できます。
curlコマンドを使ってローカルから実行してみます。
>curl -s -X GET https://nk1ium5wwi.execute-api.ap-northeast-1.amazonaws.com/default/Hello -H "x-api-key: skkboGLMLRjxfXPzASvo47DXpRFrEck56mUUrKu1"
"Hello from Lambda!"val1=undefined
実行できました!結果もちゃんと戻ってますね。これなら自前のAPIや簡単なサービスをすぐに公開できそうですね!
他にも、AmazonのスマートスピーカーAmazon Echoのへの声掛けをトリガーして動かしたりもできるみたいなので、AWS Lambdaを使ってそのうち何か作ってみようと思います。
以上でした。
ディスカッション
コメント一覧
まだ、コメントがありません