Amazon Virtual Private Cloud (Amazon VPC) に接続されている AWS Lambda 関数へのインターネットアクセスを許可したいと考えています。
簡単な説明
プライベートサブネットからのインターネットアクセスには、ネットワークアドレス変換 (NAT) が必要です。Amazon VPC に接続された Lambda 関数にインターネットアクセスを提供するには、そのアウトバウンドトラフィックをパブリックサブネットのNAT ゲートウェイまたはNATインスタンスにルーティングします。
詳細については、「インターネットゲートウェイを使用してインターネットに接続する」を参照してください。セットアップ例については、「例: プライベートサブネットにサーバーがある VPC および NAT」を参照してください。
注: Amazon VPC エンドポイントから、インターネットにアクセスせずに Amazon VPC 内からサポートされている AWS のサービスに接続することも可能です。
解決策
(オプション) AWS マネジメントコンソールの VPC ウィザードを使用して新しい Amazon VPC を作成する
**注:**VPC ウィザードを使用して新しい Amazon VPC を作成する場合は、スキップして次のセクションに進んでください。 VPC 用の Lambda 実行ロールを作成します。
-
AWS マネジメントコンソールで [VPC ウィザード] を開きます。
-
[パブリックサブネットとプライベートサブネットを持つ VPC] を選択します。新しいパブリックサブネットとプライベートサブネット (関連付けられたインターネットゲートウェイと NAT ゲートウェイを含む) が Amazon VPC コンソールに表示されます。
Amazon VPC にパブリックサブネットと 1 つ以上のプライベートサブネットを作成する
手順については、「サブネットの作成」を参照して、各サブネットを作成します。
サブネットを作成する際に、[名前タグ] に、パブリックまたはプライベートであることを識別する各サブネットの名前を入力します。例: パブリックサブネット・プライベート Lambda 1・プライベート Lambda 2。
**注:**異なるアベイラビリティーゾーンに複数のプライベートサブネットを作成するのがベストプラクティスです。この方法により冗長性が生まれ、Lambda サービスが関数の高可用性を維持できるようになります。
インターネットゲートウェイを作成して Amazon VPC にアタッチします。
手順については、「インターネットゲートウェイの作成とアタッチ」を参照してください。
NAT ゲートウェイを作成します。
手順については、「NAT ゲートウェイを作成する」を参照してください。NAT ゲートウェイを作成するときに、[サブネット] で、パブリックにするサブネットを選択します。(前の例から: パブリックサブネット。)
**注:**NAT ゲートウェイの設定をテストするには、「パブリック NAT ゲートウェイのテスト」を参照してください。
パブリックサブネット用とプライベートサブネット用の 2 つのカスタムルートテーブルを作成する
**注:**Amazon VPC に接続された Lambda 関数がリクエストを行うと、関連するサブネットがランダムに選択されます。関数が誤って設定されたサブネットを使用している場合、エラーが発生します。ランダムエラーを防ぐため、関数が使用するすべてのサブネットに同じ設定を使用してください。
手順については、「カスタムルートテーブルを作成する」を参照してください。ルートテーブルを作成するときは、[名前タグ] に、関連付けられているサブネットを識別するのに役立つ各ルートテーブルの名前を入力します。例: パブリックサブネットとプライベート Lambda。
各ルートテーブルについて、必ず次の手順を完了してください。
パブリックサブネットのルートテーブルの場合
1. パブリックサブネットのルートテーブル (パブリックサブネット) を、パブリックにするサブネットに関連付けます。
2. 次の設定を含む新しいルートをルートテーブルに追加します。
[送信先] に 0.0.0.0/0 と入力します。
[ターゲット] で [インターネットゲートウェイ] を選択してから、作成したインターネットゲートウェイの ID (igw-123example) を選択します。[ルートの保存] を選択します。
プライベートサブネットのルートテーブルの場合
1. プライベートサブネットのルートテーブル (プライベート Lambda) をプライベートサブネットに関連付けます。
2. 次の設定を含む新しいルートをルートテーブルに追加します。
[送信先] に 0.0.0.0/0 と入力します。
[ターゲット] で [NAT ゲートウェイ] を選択します。次に、作成した NAT ゲートウェイの ID (nat-123example) を選択します。
重要: NAT インスタンスを使用している場合は、上記の代わりに [ネットワークインターフェイス] を選択します。[ルートの保存] を選択します。
注: NAT ゲートウェイへのルートが [有効] ステータスになっているかどうか確認します。NAT ゲートウェイが削除され、ルートが更新されていない場合、ステータスは [ブラックホール] になります。詳細については、「NAT ゲートウェイ」を参照してください。
ネットワーク ACL が Lambda 関数からのアウトバウンドリクエスト、および必要に応じてインバウンドトラフィックを許可しているかどうかを確認する
Amazon VPC のデフォルトのネットワークアクセスコントロールリスト (ネットワーク ACL) では、インバウンドトラフィックとアウトバウンドトラフィックがすべて許可されています。ネットワーク ACL ルールを変更する場合は、Lambda 関数からのアウトバウンドリクエストを許可するようにしてください。
また、ネットワーク ACL が VPC の構成に基づいて次のインバウンドトラフィックを許可していることを確認します。
- NAT ゲートウェイを使用するプライベートサブネットの場合、一時ポート 1024-65535 でインバウンドトラフィックを許可します。
- NAT インスタンスを使用するプライベートサブネットの場合、NAT インスタンスのオペレーティングシステムで使用される一時ポートでインバウンドトラフィックを許可します。
**注:**詳細については、「Amazon VPC でのインターネットワークトラフィックプライバシー」を参照してください。
VPC 用の Lambda 実行ロールを作成する
1. AWS Identity and Access Management (IAM) コンソールの [ロール] ページを開きます。
2. [ロールの作成] を選択します。[ロールの作成] ページが開きます。
- [ロールの作成] ページで、次の手順を実行します。
[信頼されたエンティティの選択] から、[AWS サービス] を選択します。
[一般的なユースケース] で、[Lambda] を選択します。
[次へ: アクセス権限] を選択します。
[アタッチ権限ポリシー] で、AWSLambdaVPCAccessExecutionRole を検索します。
その名前のポリシーを選択します。そして、[次へ: タグ] を選択します。
(オプション) ユースケースのタグを追加します。
[次へ: 確認] を選択します。
[ロール名] で、Lambda 実行ロールの名前を入力します。例: lambda_vpc_basic_execution。
(オプション) [ロールの説明] に、ロールの説明を入力します。[ロールの作成] を選択します。
ロールを Lambda 関数にアタッチする
1. Lambda コンソールで関数のページを開きます。
2. Amazon VPC に接続する関数の名前を選択します。
3. [設定] タブを選択し、[許可] を選択します。
4. [実行ロール] で [編集] を選択します。
5. [既存のロール] ドロップダウンリストを選択し、ロールを選択します。例: lambda_vpc_basic_execution。
6. [保存] を選択します。
詳細については、「Lambda 実行ロール」と「IAM コンソールでの実行ロールの作成」を参照してください。
Amazon VPC に接続するように Lambda 関数を設定する
1. Lambda コンソールで関数のページを開きます。
2. Amazon VPC に接続する関数の名前を選択します。
- [設定] タブを開きます。
4. 左側のナビゲーションバーから [VPC] を選択し、[編集] を選択します。その後、以下の項目に入力します。
[仮想プライベートクラウド (VPC)] では、ご使用の VPC を選択します。
[サブネット] では、作成したプライベートサブネットを選択します。サブネット ID (および名前を付けた場合は名前) で識別します。
[セキュリティグループ] では、セキュリティグループを選択します。
注:デフォルトのセキュリティグループはすべてのアウトバウンドインターネットトラフィックを許可するので、ほとんどのユースケースに対応します。詳細については、「セキュリティグループを使用してリソースへのトラフィックを制御する」を参照してください。
5. [保存] を選択します。
関連情報
アウトバウンドネットワークを VPC 内のリソースに接続する
Lambda でのネットワークに関する問題のトラブルシューティング
Lambda 関数が失敗する場合のトラブルシューティング方法を教えてください。