2016-03-14 12 views
13

私はVPC経由でRDSのPostgres DBにアクセスするラムダ関数を持っています。 dbを照会した後、通知をSNSに送信します。私のラムダ機能は私のVPCに存在するので、SNSにアクセスすることはできません。私は自分のVPCにインターネットゲートウェイを持っています。私はVPCエンドポイントのドキュメントを読んで、現在はs3のみがサポートされています。VPCのAWSラムダにSNS通知を公開させるにはどうすればいいですか?

VPCのラムダ機能でSNSに公開することはありますか?

答えて

7

VPC外でトラフィックをルーティングするには、VPCでNATサーバが稼働している必要があります。 AWSにはmanaged NAT serviceが用意されています。

+0

私のシナリオは、自分のVPCにインターネットゲートウェイを置くだけで達成できませんでしたか?私はNAT上のドキュメントを読んできましたが、それはインバウンドアクセスのセキュリティ対策を追加するようです。 – lawrence

+0

いいえ、トラフィックを転送するにはNATが必要です。よくある質問の文書(https://aws.amazon.com/lambda/faqs/)を参照してください。 – garnaat

+0

私は参照してください。私のケースでは、NATを設定することは少し不必要なので、postgresデータをtxtファイルに記録し、s3にアップロードして(VPCエンドポイント経由で)、s3 putイベントを使用するようにしました。私の他のawsサービスを起動します。あなたのご意見ありがとうございます。 – lawrence

2

私は最終的にそれが働いて得ることができた...

トリックはあなたが2つのサブネットを持たなければならないということです。

VPCのインターネットゲートウェイにトラフィックを送信するルーティングテーブルを持つ、公開されたもの。そこにNATを入れてください。

NATにトラフィックを送信するルーティングテーブルを備えたプライベートのものです。ラムダをそこに置く。 、私はこれは古いです知っている

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

1

:それはAWSのドキュメントからこの概要図に概説されている

(。ところでYesに自動割り当て公衆IPオプションを設定することを意味パブリックサブネットを作ります) NATを設定したくない人にとっては、もう一つの選択肢があります。 SNSと対話するVPC内にラムダ関数を持たせようとするのではなく、次のように2つのラムダ関数に分割します。

Function 1は、VPC内にあり、データベースとやりとりし、データベースのやりとりの結果(ある基準に一致するIDのリストなど)を返します。

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

SNS用のVPCエンドポイントがあっても、2016年後半になってもこれは当てはまりません。

+1

私の理解では、「ファンクション1」はVPCの内部にあるため、インターネットアクセスを失うことになります。したがって、「ファンクション2」はどのように「ファンクション1」を呼び出すのでしょうか? – jonsibley

+2

「ファンクション2」の実行ポリシーが「ファンクション1」を呼び出す許可を含む限り、「ファンクション2」は「ファンクション1」を呼び出すことができる。私が理解している限り、「機能2」はダイヤルアウトできないという意味でインターネットアクセスを失い、VPC内の他のものにしかアクセスできません。 (適切な権限を持つ外部のラムダ関数によってもアクセスできます) – abbm

+0

SNSにVPCサポートが必要であることに同意します – Tom

関連する問題