スキップしてコンテンツを表示

Amazon VPC に接続されている Lambda 関数にインターネットアクセスを許可する方法を教えてください。

所要時間2分
0

Amazon Virtual Private Cloud (Amazon VPC) に接続されている AWS Lambda 関数へのインターネットアクセスを許可したいと考えています。

簡単な説明

デフォルトでは、Lambda 関数はインターネットにアクセスできる Lambda マネージド VPC で実行されます。Lambda 関数をパブリックサブネットに関連付けても、関数にはプライベート IP アドレスが割り当てられているため、インターネットに接続できません。

Lambda 関数が AWS アカウントの VPC 内のリソースにインターネットアクセスできるようにするには、NAT ゲートウェイまたは NAT インスタンスを追加します。この設定では、VPC がインターネットにアクセスできない限り、関数は VPC 内のリソースに制限されます。

注: インターフェイス VPC エンドポイントを使用すると、インターネットアクセスのない Amazon VPC 接続内から、サポートされている AWS サービスに接続できます。

解決策

次のリソースを参照し、Lambda 関数へのアウトバウンドインターネットアクセスが許可されていることを確認します。

上記のリソースがいずれも、Lambda 関数へのインターネットアクセスを許可していない場合は、リソースを再構成して関数にインターネットアクセスを許可します。AWSSupport-TroubleshootLambdaInternetAccess を実行するか、手動でインターネットへのアクセスを許可することも可能です。

AWSSupport-TroubleshootLambdaInternetAccess ランブックを使用する

前提条件

ランブックを開始する前に、AWS Identity and Access Management (IAM) ユーザーまたはロールに必要なアクセス許可があることを確認してください。詳細については、AWSSupport-TroubleshootLambdaInternetAccess の「必要な IAM アクセス許可」セクションを参照してください。

次の手順を実行します。

  1. Systems Manager コンソールを開きます。
  2. ナビゲーションペインで [変更管理ツール] を展開し、[オートメーション] を選択します。
  3. [ランブックを実行] を選択します。
  4. [Amazon が所有] タブを選択し、TroubleshootLambdaInternetAccess を検索します。
  5. AWSSupport-TroubleshootLambdaInternetAccess カードを選択します。
    **注:**オートメーションの名前は選択しないでください。
  6. [次へ] を選択します。
  7. [実行] を選択します。

ランブックの出力を参照し、Lambda 関数がインターネットにアクセスできなくなった原因と問題の解決方法を判断します。

インターネットアクセスを手動で許可する

Amazon VPC にパブリックサブネットとプライベートサブネットを作成する

Lambda 関数用のプライベートサブネットと NAT ゲートウェイ用のパブリックサブネットを作成します。[名前タグ] フィールドに、パブリックかプライベートかを識別する各サブネットの名前を入力します。たとえば、Public subnetPrivate Lambda 1Private Lambda 2 と名付けます。

注: 異なるアベイラビリティーゾーンにわたり、複数のプライベートサブネットを作成することをおすすめします。この方法では、冗長性を実現し、Lambda は関数の高可用性を維持できます。

インターネットゲートウェイを使用してサブネットにインターネットアクセスを追加する

インターネットゲートウェイを作成し、VPC にアタッチします。

NAT ゲートウェイを作成する

NAT ゲートウェイを作成します[サブネット] で、パブリックにするサブネットを選択します。たとえば、Public subnet を選択します。

(オプション) NAT ゲートウェイの設定をテストします

2 つのカスタムルートテーブルを作成する

注: VPC の Lambda 関数がリクエストを行うと、関数は関連するサブネットをランダムに選択します。関数が正しく構成されていないサブネットを使用した場合、エラーが発生します。この問題を防ぐために、関数が使用するすべてのサブネットに同じ設定を適用してください。

カスタムルートテーブルを設定するには、次の手順を実行します。

  1. パブリックサブネットのルートテーブルとプライベートサブネットのルートテーブルを作成します。
    関連付けられたサブネットを識別しやすくするために、[名前タグ] フィールドに各ルートテーブルの名前を入力します。たとえば、Public subnetPrivate Lambda と名付けます。
  2. プライベートサブネットとパブリックサブネットをルートテーブルに関連付けます
  3. 新しいルートをルートテーブルに追加し、次の設定を含めます。
    [宛先]0.0.0.0/0 と入力します。
    [ターゲット] で、パブリックサブネットのインターネットゲートウェイを選択し、インターネットゲートウェイ ID を入力します。プライベートサブネットの NAT ゲートウェイを選択し、NAT ゲートウェイ ID を入力します。
    重要: NAT ゲートウェイではなく NAT インスタンスを使用する場合は、[NAT ゲートウェイ] ではなく [ネットワークインターフェイス] を選択します。
  4. [ルートを保存] を選択します。

注: NAT ゲートウェイへのルートは、Active 状態である必要があります。NAT ゲートウェイを削除し、ルートを更新しなかった場合は、ルートは Blackhole ステータスになります。

ネットワーク ACL の設定を確認する

VPC のデフォルトネットワーク ACL は、すべてのインバウンドトラフィックとアウトバウンドトラフィックを許可します。ネットワーク ACL ルールを変更する場合は、Lambda 関数からのアウトバウンドリクエストを許可する必要があります。さらに、ネットワーク ACL は、次のインバウンドトラフィックを許可する必要があります。

  • プライベートサブネットがNAT ゲートウェイを使用する場合、エフェメラルポート 1024 ~ 65535 でインバウンドトラフィックを許可します。
  • プライベートサブネットが NAT インスタンスを使用する場合、NAT インスタンスのオペレーティングシステム (OS) が使用するエフェメラルポートでインバウンドトラフィックを許可します。

詳細については、「Amazon VPC でのインターネットトラフィックのプライバシーを確保する」を参照してください。

Lambda 実行ロールを作成する

VPC に Lambda 実行ロールを作成します。次に、Lambda 関数を更新し、新しい実行ロールを使用する設定を行います。

Lambda 関数が VPC に接続するように設定を行う

関数を VPC にアタッチします[サブネット] で使用するプライベートサブネットを選択します。[セキュリティグループ] で使用するセキュリティグループを選択します。

注: デフォルトのセキュリティグループでは、すべてのアウトバウンドインターネットトラフィックが許可されるため、ほとんどのユースケースに対応します。詳細については、「セキュリティグループを使用してリソースへのトラフィックを制御する」を参照してください。

Lambda 関数が Amazon VPC 接続を備えている場合は、エグレス専用インターネットゲートウェイを使用してインターネットにアクセスできます。詳細については、「IPv6 サポート」を参照してください。

関連情報

Lambda でのネットワークに関する問題のトラブルシューティング

Amazon VPC の Lambda 関数での、タイムアウトに関する問題をトラブルシューティングする方法を教えてください

Lambda 関数での ETIMEDOUT エラーをトラブルシューティングする方法を教えてください

Lambda 関数に Amazon VPC 内のリソースへのアクセスを許可する

Lambda 関数が失敗する場合のトラブルシューティング方法を教えてください

コメントはありません

関連するコンテンツ