web-dev-qa-db-ja.com

VPCのAWS LambdaにSNS通知を公開させるにはどうすればよいですか?

VPC経由でRDSのPostgres dbにアクセスするラムダ関数があります。 dbをクエリした後、SNSに通知を投稿します。ラムダ関数がVPCに存在するため、SNSにアクセスできません。 VPCにインターネットゲートウェイがあります。 VPCエンドポイントのドキュメントを読みましたが、現在サポートされているのはs3のみです。

とにかくVPCのラムダ関数でSNSに公開する方法はありますか?

18
lawrence

VPCの外部にトラフィックをルーティングするには、NAT VPCで実行されているサーバーが必要です。AWSは managed NAT service これにより簡単になります。

9
garnaat

[〜#〜]更新[〜#〜]

2018年4月の時点で、SNSはAWS PrivateLinkを介して VPCエンドポイント をサポートしています。したがって、VPC内のLambda関数がSNS通知を公開するために、インターネットゲートウェイやNATインスタンスを設定する必要はありません。

詳細は this ブログ投稿を参照してください。

17
Khalid T.

ようやくうまく動作しました...

秘訣は、2つのサブネットがなければならないということです。

VPCのインターネットゲートウェイにトラフィックを送信するルーティングテーブルを備えたパブリックなもの。 NATをそこに入れます。

そして、NATにトラフィックを送信するルーティングテーブルを備えたプライベートなもの。ラムダをそこに入れます。 (ところで、パブリックサブネットを作成するということは、[パブリックIPの自動割り当て]オプションを[はい]に設定することを意味します。)

これは、AWSドキュメントの次の概要図で概説されています。

http://docs.aws.Amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html#Configuration-2

4
Ldom

私はこれが古いことを知っていますが、NATを構成したくない人のために機能する別のオプションがあります。 SNSとやり取りするVPC内にラムダ関数を作成する代わりに、次のように2つのラムダ関数に分割します。

Function 1はVPC内にあり、データベースと対話して、データベース対話の結果(たとえば、いくつかの基準に一致するIDのリスト)を返します。

Function 2はVPCの外部に配置され、Function 1を呼び出して、値の配列を処理し、適切なSNS通知を発行します(たとえば、リスト内の各IDに基づいてメッセージを送信します)。

SNSのVPCエンドポイントがあったらいいのですが、それでも2016年後半にはそうではないようです。

4
abbm