AWS Lambda超入門
ども。
前々から興味があった「AWS Lambda」を試してみます。
プログラミングの世界ではよく「ラムダ式」と言って、ざっくり「関数を変数として扱う」ことを指します。
AWS Lambdaでどんなことができるのかというと。
サーバを使わずに、Java、Node.js、C#、Pythonなどで開発した処理(関数、クラス)を直接登録してサービスとして動かすことができるんですね。
コンピューターリソースを使うのはその処理が呼ばれたタイミングだけで、処理トリガーはAWS内で発生する色々なイベントに紐づけることができます。
このように、関数(機能)を登録するというところがLambda(ラムダ)の名前を冠しているのだと思います。

「関数の作成」を選択します。

「一から作成」を選択し、「基本的な情報」を入力していきます。

関数名、ランタイムと実行するためのIAMロールを選択します。
今回はランタイムに「Node.js 8.10」を指定し、新しくIAMロールを作成します。
選択し終わったら「関数の作成」をクリックします。

関数ができました。
ブラウザからコードも編集できます。
httpsステータスコード「200:OK」と「Hello from Lambda!」のJSONをレスポンスで返すといった内容ですね。
リクエストパラメータを受け取れるよう、次のように編集します。
さらに横の「テスト」を選択します。
「テストイベントの設定」が開くのでテストイベントを定義します。

「作成」を押してテストイベントを作成します。
前の画面に戻るので、再度「テスト」を押すと。

テストが実行されます。
ログの詳細を開き、期待通りの結果か確認します。
API Gatewayのトリガーを追加します。
下に「トリガーの設定」が出てくるので、次のように設定します。

「セキュリティ」を「AWS IAM」にするとIAM認証、「オープン」にすると誰でもアクセス可能、「APIキー使用でのオープン」にするとAPIキーでの認証になります。
「追加」を押して、右上の保存を押すと、APIエンドポイントとAPIキーが確認できます。

curlコマンドを使ってローカルから実行してみます。
これなら自前のAPIや簡単なサービスをすぐに公開できそうですね!
他にも、AmazonのスマートスピーカーAmazon Echoのへの声掛けをトリガーして動かしたりもできるみたいなので、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を選択します。


今回はランタイムに「Node.js 8.10」を指定し、新しくIAMロールを作成します。
選択し終わったら「関数の作成」をクリックします。

ブラウザからコードも編集できます。

リクエストパラメータを受け取れるよう、次のように編集します。
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のトリガーを追加します。


「追加」を押して、右上の保存を押すと、APIエンドポイントとAPIキーが確認できます。

>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を使ってそのうち何か作ってみようと思います。
以上でした。





