VPC経由でRDSのPostgres dbにアクセスするラムダ関数があります。 dbをクエリした後、SNSに通知を投稿します。ラムダ関数がVPCに存在するため、SNSにアクセスできません。 VPCにインターネットゲートウェイがあります。 VPCエンドポイントのドキュメントを読みましたが、現在サポートされているのはs3のみです。
とにかくVPCのラムダ関数でSNSに公開する方法はありますか?
VPCの外部にトラフィックをルーティングするには、NAT VPCで実行されているサーバーが必要です。AWSは managed NAT service これにより簡単になります。
[〜#〜]更新[〜#〜]
2018年4月の時点で、SNSはAWS PrivateLinkを介して VPCエンドポイント をサポートしています。したがって、VPC内のLambda関数がSNS通知を公開するために、インターネットゲートウェイやNATインスタンスを設定する必要はありません。
詳細は this ブログ投稿を参照してください。
ようやくうまく動作しました...
秘訣は、2つのサブネットがなければならないということです。
VPCのインターネットゲートウェイにトラフィックを送信するルーティングテーブルを備えたパブリックなもの。 NATをそこに入れます。
そして、NATにトラフィックを送信するルーティングテーブルを備えたプライベートなもの。ラムダをそこに入れます。 (ところで、パブリックサブネットを作成するということは、[パブリックIPの自動割り当て]オプションを[はい]に設定することを意味します。)
これは、AWSドキュメントの次の概要図で概説されています。
http://docs.aws.Amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html#Configuration-2
私はこれが古いことを知っていますが、NATを構成したくない人のために機能する別のオプションがあります。 SNSとやり取りするVPC内にラムダ関数を作成する代わりに、次のように2つのラムダ関数に分割します。
Function 1
はVPC内にあり、データベースと対話して、データベース対話の結果(たとえば、いくつかの基準に一致するIDのリスト)を返します。
Function 2
はVPCの外部に配置され、Function 1
を呼び出して、値の配列を処理し、適切なSNS通知を発行します(たとえば、リスト内の各IDに基づいてメッセージを送信します)。
SNSのVPCエンドポイントがあったらいいのですが、それでも2016年後半にはそうではないようです。