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

最終更新日: 2019 年 7 月 22 日

Amazon Virtual Private Cloud (Amazon VPC) 対応の AWS Lambda 関数へのインターネットアクセスを許可したいです。どうすればよいですか?

簡単な説明

Lambda 関数からプライベート VPC リソース (たとえば、Relational Database Service (Amazon RDS) DB インスタンスや Amazon Elastic Compute Cloud (Amazon EC2) インスタンス) にアクセスすることができます。これを設定するには、関数を VPC の 1 つ以上のプライベートサブネットに関連付ける必要があります。関数にインターネットアクセスを許可するには、関連する VPC がパブリックサブネットに NAT ゲートウェイ (または NAT インスタンス) を持っている必要があります。

サブネットがプライベートかパブリックかは、そのルートテーブルによります。パブリックサブネットにはインターネットゲートウェイを指すルートがあり、プライベートサブネットにはありません。

解決方法

既存の VPC を使用している場合は、VPC コンポーネントの作成から始めて、NAT ゲートウェイを持つパブリックサブネットと 1 つ以上のプライベートサブネットを作成します。既存の VPC に NAT ゲートウェイを持つパブリックサブネットと 1 つ以上のプライベートサブネットがすでにある場合は、Amazon VPC 用の Lambda 実行ロールの作成に進んでください。

このセットアップに新しい VPC を作成する場合は、VPC ウィザードを使用してから [パブリックサブネットとプライベートサブネットを持つ VPC] を選択します(Amazon VPC コンソールでは、サブネットの名前は「パブリックサブネット」と「プライベートサブネット」になります)。 次に、Amazon VPC 用の Lambda 実行ロールの作成に進みます。

VPC コンポーネントを作成する

  1. VPC に 2 つ以上の新しいサブネットを作成します。作成中に、名前タグに、どのサブネットがパブリックで、どのサブネットがプライベートであるかを識別するのに役立つ名前をつけてください。たとえば、1 つは Public Subnet、もう 1 つは Private Lambda (または複数のプライベートサブネットに、Private Lambda 1Private Lambda 2) といったように。
    注: 冗長性のため、そして Lambda が関数に対して高可用性を確保できるように、異なるアベイラビリティーゾーンにまたがって複数のプライベートサブネットを作成することをお勧めします。
  2. インターネットゲートウェイを作成して、VPC にアタッチします
  3. NAT ゲートウェイを作成します。作成中、[サブネット] で、公開するサブネットを選択します(たとえば、以前に名前を付けていた場合は Public Subnet)。

サブネットのルートテーブルを作成および変更する

  1. Amazon VPC コンソールで、VPC に 2 つのカスタムルートテーブルを作成します。
    ヒント: 作成中、[名前タグ] に、ルートテーブルがどのサブネットに関連付けられているかを識別するのに役立つ名前をつけます。たとえば、1 つを Public Subnet、もう 1 つを Private Lambda といったように。
  2. パブリックサブネットルートテーブル (Public Subnet) を公開するサブネットに関連付けます。
  3. このルートテーブルに新しいルートを追加します。以下を指定してください。
    [宛先] には、0.0.0.0/0 を入力します。
    [ターゲット] には、[インターネットゲートウェイ] を選択してから、作成したインターネットゲートウェイの ID (igw-…) を選択します。
    [ルートの保存] を選択します。関連付けられたサブネットはパブリックサブネットになりました。
  4. 他のルートテーブル (Private Lambda) をプライベートサブネットに関連付けます。
  5. このルートテーブルに新しいルートを追加します。以下を指定してください。
    [宛先] には、0.0.0.0/0 を入力します。
    [ターゲット] には、[NAT ゲートウェイ] を選択してから、作成した NAT ゲートウェイの ID (nat-…) を選択します(NAT インスタンスを使用している場合は、代わりに [ネットワークインターフェイス] を選択します)。
    [ルートの保存] を選択します。

Amazon VPC の Lambda 実行ロールを作成する

  1. AWS Identity and Access Management (IAM) コンソールの左側のナビゲーションペインで、[ロール] を選択します。
  2. [ロール] ペインで、[ロールの作成] を選択します。
  3. [ロールの作成] ページで、次の手順を実行します。
    [信頼できるエンティティの種類の選択] では、[AWS のサービス] を選択します。
    [このロールを使用するサービスを選択してください] では、[Lambda] を選択します。
    [次へ: アクセス許可] を選択します。
  4. [アクセス許可ポリシーのアタッチ] の下で、AWSLambdaVPCAccessExecutionRole を検索します。その名前のポリシーを選択してから、[次へ: タグ] を選択します。
  5. 必要に応じてタグを追加し、[次へ: 確認] を選択します。
  6. [レビュー] の下で、次の操作を行います。
    [ロール名] には、この Lambda 実行ロールの名前を入力します。例えば、lambda_vpc_basic_execution
    (オプション) [ロールの説明] では、必要に応じて説明を編集してください。
    [ロールの作成] を選択します。

詳細については、「AWS Lambda 実行ロール」を参照してください。

Lambda 関数を設定する

  1. Lambda コンソールの左側のナビゲーションペインで、[関数] を選択します。
  2. VPC に接続したい関数の名前を選択します。
  3. [設定] ペインの [実行ロール] で、既存ロール に、作成した IAM 実行ロール (lambda_vpc_basic_execution) を選択します。
  4. [設定] ペインの [ネットワーク] で、以下の手順を実行します。
    [Virtual Private Cloud (VPC)] では、VPC を選択します。
    [サブネット] では、作成したプライベートサブネットを選択します。サブネット ID (および名前を付けている場合は名前) でそれを識別します。
    [セキュリティグループ] では、セキュリティグループを選択します。
    注: デフォルトのセキュリティーグループはすべてのアウトバウンドインターネットトラフィックを許可するため、ほとんどのユースケースにはこれで十分です。詳しくは、「VPC のセキュリティグループ」を参照してください。
  5. [保存] をクリックします。