プライベートな 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 関数をコールしているものだと思っていた

色々調べていく中で、現在は次の理解に至っています。

Lambda に SQS のサポートを追加することで、ポーリングサービスの実行や、SQS から SNS へのマッピング作成といった大きな負荷を大幅に削減しました。

  • AWS Lambda が SQS と Lambda 関数を連携するため、 SQS と Lambda 関数 のネットワーク経路をユーザは意識しなくて良い

おわりに

理解するとなんてことない内容かと思いますがまとめてみました。
本エントリがどなたかのお役に立てれば幸いです。