Amazon VPC に接続されている Lambda 関数にインターネットアクセスを許可するにはどうすればよいですか?
最終更新日: 2021 年 10 月 6 日
Amazon Virtual Private Cloud (Amazon VPC) に接続している AWS Lambda 関数がインターネットにアクセスできるようにしたいと考えています。設定する方法を教えてください。
簡単な説明
プライベートサブネットからのインターネットアクセスには、ネットワークアドレス変換 (NAT) が必要です。Amazon VPC に接続された Lambda 関数にインターネットアクセスを許可するには、そのアウトバウンドトラフィックをパブリックサブネットの NAT ゲートウェイまたは NAT インスタンスにルーティングします。
詳細については、Amazon VPC ユーザーガイドのインターネットゲートウェイをご参照ください。設定例については、「パブリックサブネットとプライベートサブネットを持つ VPC (NAT)」 をご参照ください。
Amazon VPC に接続された Lambda 関数のインターネットアクセスの問題をトラブルシューティングするには
「AWS Systems Manager を使用して Amazon VPC にある AWS Lambda 関数のインターネットアクセスの問題をトラブルシューティングするにはどうすればよいですか?」をご参照ください。
注:Amazon VPC エンドポイントを使用して、インターネットにアクセスせずに Amazon VPC 内からサポートされている AWS のサービスに接続することもできます。
解決方法
(オプション) AWS マネジメントコンソールの VPC ウィザードを使用して新しい Amazon VPC を作成する
注:VPC ウィザードを使用して新しい Amazon VPC を作成する場合は、「VPC 用の Lambda 実行ロールを作成する」のセクションに進むことができます。
1. AWS マネジメントコンソールで VPC ウィザードを開きます。
2. パブリックサブネットとプライベートサブネットを持つ VPC を選択します。新しいパブリックサブネットとプライベートサブネット (関連付けられたインターネットゲートウェイと NAT ゲートウェイを含む) が Amazon VPC コンソールに表示されます。
Amazon VPC にパブリックサブネットと 1 つ以上のプライベートサブネットを作成する
手順については、「VPC にサブネットを作成する」を参照して、各サブネットを作成します。
サブネットを作成するときに、[名前タグ] に、パブリックまたはプライベートであることを識別する各サブネットの名前を入力します。例:パブリックサブネット、プライベート Lambda 1、プライベート Lambda 2。
注:ベストプラクティスは、異なるアベイラビリティーゾーンに複数のプライベートサブネットを作成することです。これにより、冗長性が作成され、Lambda サービスが関数の高可用性を維持できるようになります。
インターネットゲートウェイを作成して、Amazon VPC に添付する
手順については、「インターネットゲートウェイを作成して添付する」をご参照ください。
NAT ゲートウェイを作成する
手順については、「NAT ゲートウェイを作成する」を参照してください。NAT ゲートウェイを作成するときは、[サブネット] で、パブリックにするサブネットを選択します。(前の例から:パブリックサブネット)。
注:NAT ゲートウェイの設定をテストするには、Amazon VPC ユーザーガイドの「パブリック NAT ゲートウェイをテストする」をご参照ください。
パブリックサブネット用とプライベートサブネット用の 2 つのカスタムルートテーブルを作成する
注: Amazon VPC に接続された Lambda 関数では、リクエストを行うたびに関連付けられたサブネットがランダムに選択されます。誤って設定されたサブネットを使用する 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 ゲートウェイが削除され、ルートが更新されていない場合、ステータスは [ブラックホール] になります。詳細については「ルートテーブルの更新」をご参照ください。
ネットワーク 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. [ロールの作成] を選択します。[ロールの作成] ページが開きます。
3. [ロールの作成] ページで、次の手順を実行します。
[信頼されたエンティティの種類を選択] で、[AWS のサービス] を選択します。
[一般的なユースケース] で、[Lambda] を選択します。
[次へ: アクセス許可] を選択します。
[アクセス許可ポリシーの添付] の下で、AWSLambdaVPCAccessExecutionRole を検索します。その名前のポリシーを選択します。[次へ: タグ] を選択します。
(オプション) ユースケースのタグを追加します。
[次へ: レビュー] を選択します。
[ロール名] で、この Lambda 実行ロールの名前を入力します。例えば、lambda_vpc_basic_execution です。
(オプション) [ロールの説明] に、ロールの説明を入力します。
[ロールの作成] を選択します。
詳細については、「AWS Lambda 実行ロール」および「IAM コンソールでの実行ロールの作成」をご参照ください。
Amazon VPC に接続するように Lambda 関数を設定する
1. Lambda コンソールで関数ページを開きます 。
2. Amazon VPC に接続する関数の名前を選択します。
3. [設定] を選択します。
4. [実行ロール] の [既存のロール] で、作成した Lambda 実行ロールを選択します。
5. [VPC] で、[編集] を選択します。次に、以下を実行します。
[Virtual Private Cloud (VPC)] では、ご使用の VPC を選択します。
[サブネット] では、作成したプライベートサブネットを選択します。サブネット ID (および名前を付けている場合は名前) でそれを識別します。
[セキュリティグループ] では、セキュリティグループを選択します。
注: デフォルトのセキュリティーグループはすべてのアウトバウンドインターネットトラフィックを許可するため、ほとんどのユースケースにはこれで十分です。詳しくは、「VPC のセキュリティグループ」を参照してください。
[保存] を選択します。