VPC 内のリソースにアクセスするための Lambda 関数の設定 - AWS Lambda

VPC 内のリソースにアクセスするための Lambda 関数の設定

アカウントの Virtual Private Cloud (VPC) のプライベートサブネットに接続するように関数を設定することができます。Amazon Virtual Private Cloud (Amazon VPC) を使用して、データベース、キャッシュインスタンス、または内部サービスなどのリソースのプライベートネットワークを作成します。実行中にプライベートリソースにアクセスするには、関数を VPC に接続します。

関数を VPC に接続するには

  1. Lambda コンソールを開きます。

  2. 関数を選択します。

  3. [VPC] で、[編集] を選択します。

  4. [カスタム VPC] を選択します。

  5. VPC、サブネット、セキュリティグループを選択します。

    注記

    プライベートリソースにアクセスするには、関数をプライベートサブネットに接続します。関数にインターネットアクセスが必要な場合は、NATを使用します。関数をパブリックサブネットに接続しても、インターネットアクセスやパブリック IP アドレスは与えられません。

  6. [保存] を選択します。

関数を VPC に接続すると、Lambda は、関数の VPC 設定内のセキュリティグループとサブネットの組み合わせごとに Elastic Network Interface を作成します。このプロセスには 1 分ほどかかることがあります。この間、バージョンの作成や関数のコードの更新など、関数を対象とする追加のオペレーションは実行できません。新しい関数の場合、状態が Pending から Active に移行するまで、関数を呼び出すことはできません。既存の関数の場合、更新の進行中に古いバージョンを呼び出すことができます。関数の状態の詳細については、「Lambda API を使用した関数の状態のモニタリング」を参照してください。

同じサブネットに接続された複数の関数はネットワークインターフェイスを共有するため、Lambda 管理のネットワークインターフェイスがすでにあるサブネットに、追加の関数を接続するほうが、はるかに高速です。ただし、多くの関数があるか非常に使用率の高い関数がある場合は、Lambda によって追加のネットワークインターフェイスが作成されることがあります。

関数が長期間アクティブでない場合、Lambda はそのネットワークインターフェイスを回収し、関数は Idle になります。アイドル機能を呼び出して再アクティブ化します。最初の呼び出しは失敗し、ネットワークインターフェイスが使用可能になるまで、関数は再度、保留状態になります。

Lambda 関数は、専有インスタンスのテナンシーを使用して VPC に直接接続することはできません。専有 VPC のリソースに接続するには、デフォルトのテナンシーで 2 番目の VPC にピア接続します

実行ロールとユーザーアクセス許可

Lambda は、関数のアクセス許可を使用してネットワークインターフェイスを作成および管理します。VPC に接続するには、関数の実行ロールに次のアクセス許可がある必要があります。

実行ロールのアクセス許可

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:DeleteNetworkInterface

これらのアクセス許可は、AWSLambdaVPCAccessExecutionRole 管理ポリシーに含まれています。

VPC 接続を設定すると、Lambda はお客様のアクセス許可を使用してネットワークリソースを確認します。VPC に接続する機能を設定するには、IAM ユーザーに以下のアクセス許可が必要です。

ユーザーアクセス許可

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

Lambda API の使用による Amazon VPC アクセスの設定

以下の API を使用して、関数を VPC に接続できます。

AWS CLI で関数を作成して VPC に接続するには、vpc-config オプションでプライベートサブネット ID とセキュリティグループのリストを使用します。以下の例では、2 つのサブネットと 1 つのセキュリティグループのある VPC に接続する関数を作成します。

$ aws lambda create-function --function-name my-function \ --runtime nodejs12.x --handler index.js --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/lambda-role \ --vpc-config SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb

既存の機能を接続するには、update-function-configuration コマンドで vpc-config オプションを使用します。

$ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb

VPC から関数を切断するには、サブネットとセキュリティグループの空のリストで関数の設定を更新します。

$ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=[],SecurityGroupIds=[]

VPC に接続した関数のインターネットアクセスとサービスアクセス

デフォルトでは、Lambda は AWS のサービスとインターネットにアクセスできる安全な VPC で関数を実行します。VPC は Lambda によって所有され、アカウントのデフォルト VPC に接続しません。アカウントの VPC に関数を接続すると、VPC によってアクセスが許可されない限り、関数からインターネットにアクセスすることはできません。

注記

複数のサービスが VPC エンドポイントを提供します。VPC エンドポイントを使用して、インターネットアクセスなしで VPC 内から AWS のサービスに接続できます。

プライベートサブネットからのインターネットにアクセスには、ネットワークアドレス変換 (NAT) が必要です。インターネットへのアクセスを関数に許可するには、アウトバウンドトラフィックをパブリックサブネットの NAT ゲートウェイにルーティングします。NAT ゲートウェイにはパブリック IP アドレスがあるため、VPC のインターネットゲートウェイを介してインターネットに接続できます。詳細については、Amazon VPC ユーザーガイドの「NAT ゲートウェイ」を参照してください。

VPC 設定のサンプル

Lambda 関数で使用できる VPC 設定のサンプル AWS CloudFormation テンプレートは、このガイドの GitHub リポジトリにあります。次の 2 つのテンプレートがあります。

  • vpc-private.yaml – Amazon Simple Storage Service と Amazon DynamoDB の 2 つのプライベートサブネットと VPC エンドポイントを持つ VPC。このテンプレートを使用して、インターネットアクセスを必要としない関数の VPC を作成できます。この設定では、AWS SDK での Amazon S3 と DynamoDB の使用、およびローカルネットワーク接続を介した同じ VPC 内のデータベースリソースへのアクセスがサポートされています。

  • vpc-privatepublic.yaml– 2 つのプライベートサブネット、VPC エンドポイント、NAT ゲートウェイを持つパブリックサブネット、およびインターネットゲートウェイを持つ VPC。プライベートサブネットの関数からのインターネット宛てのトラフィックは、ルートテーブルによって NAT ゲートウェイにルーティングされます。

テンプレートを使用して VPC を作成するには、AWS CloudFormation コンソールで [Create stack (スタックの作成)] を選択し、手順に従います。