web-dev-qa-db-ja.com

VPC内のLambda関数はパブリックインターネットにアクセスできません

Lambda関数内からサードパーティサービスへのアウトバウンドAPIリクエストを作成しようとしていますが、関数は常にエラーなしでタイムアウトします。

これは以前、別の関数内(まだ同じVPC /サブネット内)でs3.putObject操作を実行しようとしたときに発生しました。サービス名com.amazonaws.us-east-1.s3のエンドポイントを追加して接続することでうまく対処できましたこのLambda関数が存在するVPCに関連付けられているルートテーブルに追加します。

Lambdaダッシュボード内の[ネットワーク]ボックス-> [セキュリティグループ]セクションに、次の警告が表示されます。

VPCを有効にすると、Lambda関数はデフォルトのインターネットアクセスを失います。関数に外部インターネットアクセスが必要な場合は、セキュリティグループが送信接続を許可し、VPCにNATゲートウェイがあることを確認してください。

このセキュリティグループは、直下のアウトバウンドルールテーブルに基づいて、アウトバウンド接続を許可すると思います。

enter image description here

その2番目の要件について、このVPCにNATゲートウェイがあることを確認できます。VPCダッシュボードのNATゲートウェイタブ内にあるため、関連付けられたVCP、およびそのVPCはLambda関数をホストしているものと同じです。

ガイドに従って フローログ を作成し、VPCに出入りするトラフィックを監視して、これらの送信要求が実際に拒否されていることを確認しました。ただし、そのようにしてCloudWatchログを検査すると、すべてのレコードがACCEPT OKまたはNODATAで終わります。

VPC Lambda関数へのインターネットアクセスを許可するにはどうすればよいですか? は、私がもともと従おうとしたガイドですが、To create a public or private subnetのステップ4で行き詰まりました。

  1. [変更先:]ドロップダウンメニューから適切なルートテーブルを選択します。プライベートサブネットの場合、デフォルトルートはNATゲートウェイまたはNATインスタンス:

    宛先:0.0.0.0/0ターゲット:nat-…(またはeni-…)パブリックサブネットの場合、デフォルトルートはインターネットゲートウェイを指す必要があります。

    宛先:0.0.0.0/0ターゲット:igw-…

このVPC内の4つのサブネットすべてについて、Change to:の右側にあるドロップダウンをクリックすると、1つのオプション(すでに選択されているrtb-xxxxxxxx)のみが表示されました。そのルートテーブルへのリンクをクリックし、[概要]の横にある[ルート]タブをクリックすると、次のようになります。

enter image description here

Lambda関数のインターネットへのアクセスをブロックしているのはなぜでしょうか。

12
Pat Needham

LambdaがVPC経由でインターネットにアクセスできるようにするには、Private SubnetNAT Gateway添付。

スクリーンショットのとおり、サブネットに接続されているルートテーブルにはigw-xxxxxxxアタッチされ、現在のサブネットがpublic subnet

これを機能させるには、次のようにします:

  • 添付NAT Gateway の代わりに igw-xxxxxx現在のルートテーブルのsubnet

[〜#〜]または[〜#〜]

  • Lambdaに接続されているENIを見つけて、Elastic IPインターネットにアクセスしたい場合。

[〜#〜]または[〜#〜]

@John Rotensteinによると、LambdaがVPCリソースを必要としない場合は、LambdaをVPCから移動できます

14
Navpreet Singh

こんにちは私はそれについて明確なスクリーンショットでステップバイステップのチュートリアルを開発しました:

パートI

  1. AWSでラムダ関数を作成する
  2. すべてのリクエストをAWS Lambda関数にリダイレクトするAPIゲートウェイを作成する

https://medium.com/@shontauro/how-can-i-turn-my-restful-api-into-a-serverless-application-and-deploy-it-to-aws-lambda-step -by-ec7ce38e18be

パートII

  1. ラムダ関数のVPCを構成する
  2. 安全な方法でラムダ関数へのインターネットアクセスを許可する
  3. Node.js Restful APIをLambda関数にデプロイする

https://medium.com/@shontauro/how-can-i-turn-my-restful-api-into-a-serverless-application-and-deploy-it-to-aws-lambda-step -by-8ff6cc97780f

4
shontauro

VPCモードでのAWS Lambdaインターネットアクセスの設定は、AWS側で適切なAWSドキュメントが提供されていないのでトリッキーです。私はこれを何度も読みました https://aws.Amazon.com/premiumsupport/ knowledge-center/internet-access-lambda-function / ですが、YouTube動画を目覚めさせませんでした。研究開発の多くの後、以下の手順が必要であるように要約できますVPCモードでAWS Lambdaをセットアップする

- Route Tables two router
    - One for EC2 - EC2_ROUTER
    - Another for AWS Lambda - AWS_Lambda_ROUTER
- Create an Internet Gateway
    - Add 0.0.0.0/0 rule in EC2_ROUTER for target igw-xxxxx
    - This will create public subnet and give INTERNET access for EC2

- Create a NATGateway with public subnet which has igw-xxxxx as target
- Create a private subnet which and attach to AWS_Lambda_ROUTER, with target 0.0.0.0/0 as nat-xxxxxxx
- Select VPC for AWS Lambda
- Select a/all private subnet which is private having NAT Gateway for all traffic 0.0.0.0/0

all done, go ahead and enjoy

  • AWS以外のパブリックAPIにアクセスする場合はNATGatewayが必要です
  • 内部AWSサービス用のAWSエンドポイントがあり、作成することでAWS_Lambda_ROUTERにAWSエンドポイントをアタッチできます

AWS Lambdaでのインターネットアクセス-> NATGatewayを使用したプライベートサブネット-> NATGatewayは、AWS Lambdaにアクセスするインターネットゲートウェイを使用したパブリックサブネットにあります。

[〜#〜] ps [〜#〜]

AWS LambdaがInternetGateway経由でインターネットにアクセスできないのはなぜか、NATGatewayが必要な理由がわかりません

0
Ramratan Gupta