プライベートな Lambda 関数で SQS をイベントソースに設定しても Lambda 関数は動作しないと勘違いしていた話
はじめに
こんにちは、岩城です。小ネタです。
インターネットに接続できないプライベートなサブネットにある Lambda 関数において、 SQS をイベントソースにした Lambda 関数は動作すると思いますか?
動作します。
私は動作しないと思っていました。 なぜなら、SQS はインターネット通信が必要なサービスなので、 プライベートなサブネットにある Lambda では通信経路がないと思ったからです。 ところが、実際に環境構築して動作確認すると、SQS にエンキューされると Lambda 関数が動作しました。なぜ、動作するのか調べた結果を備忘録として残しておきます。
用語の定義
本エントリでは、AWS Lambda と Lambda 関数という用語を扱います。説明する上で明確に定義した方が分かりやすいと思いました。
- AWS Lambda
- Lambda 関数を実行するためのコンピューティングリソースのこと
- Lambda 関数
- AWS Lambda 上で実行するコードやメモリ割り当てを始め、セキュリティグループ、同実行数制限など設定のまとまり
- 非 VPC の Lambda 関数や VPC 上で動作する Lambda 関数がある
図示すると以下のような感じでしょうか。
なぜ、プライベートな Lambda 関数が SQS をイベントソースに動作できたのか
そもそも大きな勘違いをしていました。
- SQS から Lambda 関数をコールしているものだと思っていた
色々調べていく中で、現在は次の理解に至っています。
- SQS から Lambda 関数をコールしているわけではない
- AWS Lambda から SQS をポーリングしており、メッセージがエンキューされたことをトリガーにAWS Lambda が Lambda 関数をコールする
- AWS Lambda がサポートするイベントソースに Amazon Simple Queue Service を追加
Lambda に SQS のサポートを追加することで、ポーリングサービスの実行や、SQS から SNS へのマッピング作成といった大きな負荷を大幅に削減しました。
- AWS Lambda が SQS と Lambda 関数を連携するため、 SQS と Lambda 関数 のネットワーク経路をユーザは意識しなくて良い
おわりに
理解するとなんてことない内容かと思いますがまとめてみました。 本エントリがどなたかのお役に立てれば幸いです。