Lapis Lazuli

technical blog for web developer

lambdaの挙動を整理する

AWSの中でも使ってる人が多い、サーバーレスサービスのlambda。
普段、なんとなくfunctionを呼び出してるけど、中の仕組みってどうなってるんだ?と思ったので、復習の意味を兼ねてlambdaをもう一度勉強してみた。
そしたら案外しらない事もチラホラ・・・
なので今回はlambdaのトピックについて書きます。

lambdaの呼び出し方法

lambdaの呼び出し方法は主に同期と非同期とあります。
サービスによって決まっていて、任意で呼び出す場合はInvocationTypeを指定すれば選択出来ます。

同期

InvocationType=RequestResponseで呼び出す。
ELB、Cogito、APIGatewayとかから呼ぶ場合は同期。
同期の名前の通り、function実行してレスポンスを待って終了したら結果を返すパターン。
わかりやすいしすっと理解できると思います。上記のサービスで非同期とか考えづらいし納得しやすい。

非同期

InvocationType=Eventで呼び出す。
S3から呼ぶと非同期。
同期と違うのは、呼び出したらキューに突っ込んでから実行されます。キューに入った段階で成功になるので、実行結果はその時にはわかりません。
まぁS3から同期って考えづらいので、こういう仕様になってます。
普段当たり前のように使っていたけど、内部仕様を知ると勉強になりますね。

RDSとの相性

よく言われるRDSとの相性が悪いという話ですが、よっぽどlambdaをスケールしなければ問題ない感じでした。
10くらいの多重起動じゃパフォーマンスが問題になることはなかったです。
ここらへん、少しはコネクションプールされるような仕組みが、こちらのリージョンに来るとか来ないとか・・・
気にするのなら素直にDynamoDBを使いましょう。Dynamo早くて優秀。

lambda、もっと使っていきたいですが、各サービスから呼ばれるとIAMの管理めんどそう・・・
S3から呼び出すスタンダードやり方以外にも模索していきたいですね。