AWS Lambda
開発者ガイド

VPC 内のリソースにアクセスするように Lambda 関数を設定する

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

Lambda は、関数の VPC 設定内のセキュリティグループとサブネットの組み合わせごとに Elastic Network Interface を作成します。このプロセスには 1 分ほどかかります。 同じサブネットに複数の関数が接続されている場合、ネットワークインターフェイスは共有されるため、Lambda で管理されたネットワークインターフェイスが既に存在するサブネットに追加関数を接続する方がはるかに高速です。関数の数が多い場合や、非常に使用率が高い関数がある場合は、Lambda で追加のネットワークインターフェイスが作成されることがあります。

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

実行ロールおよびユーザーアクセス許可

VPC に接続するには、関数の実行ロールに次のアクセス許可がある必要があります。

実行ロールのアクセス権限

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:DeleteNetworkInterface

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

VPC に接続するように関数を設定するには、次のアクセス許可が必要です。

ユーザーアクセス許可の管理

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

Lambda API を使用した Amazon VPC アクセスの設定

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

$ aws lambda create-function --function-name my-function \ --runtime nodejs10.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 コマンドで使用します。

$ 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=[]

これらのコマンドでは、次の API を使用します。

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

デフォルトでは、Lambda は AWS のサービスとインターネットにアクセスできる安全な 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 (スタックの作成)] を選択し、手順に従います。