初心者がAWS lambdaを使ってみた感想。
AWS lambdaとは
Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを関数として実行できるサービスです。
関数とは・・・中学校の数学の関数、y=f(x)を想像してください。(懐かしい)
左からxが来てます。真ん中の四角が関数のf(x)。で、右側にyが出力されています。
つまり、xが何らかのブラックボックスf(x)を通るとyに変換されて出てくるわけですね。この四角のf(x)の部分がlambdaです。
左のxはトリガー、右のyは送信先になります。
サーバレスって言ったって・・・
lambdaはサーバーレスであるのが特徴で、EC2とかにデプロイする必要がありません。ですが、実際にはそれを意識させないだけで、どこかの仮想環境に関数が乗っかって動作しています。
わざわざEC2にデプロイするほどでもない、小さな処理(関数)を組み合わせて使うのがこのlambdaの使い方です。大きく複雑な処理だとEC2にデプロイしたほうがいいと思います。AWSのサービスの橋渡し、Aサービス → Bサービスの中間に使うような使い方です。
lambdaの餡子の部分
lambdaというまんじゅうの餡子の部分(処理するコード)をどうやって書くかですが、これだけ選択肢があります。
ここで注意しないといけないのは「ランタイム」のしたの注意書き書かれていることです。
この中でコンパイルが必要な言語(Java、.Net等)はlambdaのコードエディタではサポートされません。つまり、自分で別に、Eclise、VisualStudio等でコードを書いて、コンパイル/ビルドして、それをアップロードする必要があるので、AWS Consoleの中で完結しません。
それでは、折角のlambdaの小回りの効く機動力が活かせませんので、おそらくAWSとしては、Node.js、Python、Rubyあたりを推奨しているのではと思います。
ちなみに、Javaでまんじゅうの餡子を作ろうとするとこれだけの手順が必要になります。
AWS Lambda + Java で Hello World
とりあえず、Pythonで関数を作ってみる
とりあえず、Pythonで関数を作ってみるとこのような感じになります。
図の上側の「MyFunction」がまんじゅうの餡子の部分です。そのコードがその下に出ています。
上の図の左側「トリガー」が最初に書いたy=f(x)の関数の図の左側、xに相当します。
右側の「送信先」が関数の結果、y=f(x)のyに相当します。
トリガーには何がある?
トリガーはAWSのサービスが選択できます。
AWS EventBridgeも選択できます。
AWS EventBridgeとは、SaaSから発生するイベントを使用して、さらに様々なAWSサービスとつなげるまさしくBridge(架け橋)のようなサービスです。なのでlambdaでやろうとしていることのある程度の定型的パターンが用意されているようなものだと思います。
送信先には何がある?
- 非同期呼び出し
非同期呼び出しはqueueか次のlambdaを指定できます。- SNSトピック(メールを送信する場合)
- SQSキュー(Queueに入れて処理する場合)
- lambda(次のlambdaに数珠つなぎ)
- EventBridgeイベントバス(上記を参照)
- ストリーム呼び出し
ストリームは非連続できたものを蓄積する系なのでDBになります- Kinesis
- DynamoDB
最後にlambdaに思うこと、lambdaの使いみちは?
以上のことを考慮するとlambdaのコードの部分はあまり複雑な処理は向いていません。AWS ConsoleのlambdaのコードエディタもEclipseのようなコード補完機能はありますが、あまり期待はできません。本当にサービスからサービスへの橋渡しに使うものだと思います。
あるいは、アンケートの投票、いいねしたクリックをDBに蓄積するとか、そういう使い方なのかなと思います。
lambdaのコンセプト、メリットはわかりましたが、関数が数個〜10個くらいであればどの関数がどのようにつながっているか把握はできますが、これが数百となるとどうやって管理するんだろう?
関数にフォルダやネームスペース的なものはないし、関数名だけで区別しろってことなんだろうか?VPCに紐付けることはできるけど、それだけじゃ不足じゃないだろうか?