プライベートな Lambda 関数で SQS をイベントソースに設定しても Lambda 関数は動作しないと勘違いしていた話

こんにちは、岩城です SQS はインターネット通信が必要なサービスなので、 プライベートなサブネットにある Lambda では通信経路がないと思っていました。 ところが、実際に環境構築して動作確認すると、SQS にエンキューされると Lambda 関数が動作しました。なぜ、動作するのか調べた結果を備忘録として残しておきます。
2019.04.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、岩城です。小ネタです。

インターネットに接続できないプライベートなサブネットにある 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 関数 のネットワーク経路をユーザは意識しなくて良い

おわりに

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