AWS Lambda
開発者ガイド

Amazon VPC 内のリソースにアクセスできるように Lambda 関数を構成する

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

AWS Lambda はデフォルトでは VPC 内で安全に関数コードを実行します。ただし、Lambda 関数がプライベート VPC 内のリソースにアクセスできるようにするには、プライベートサブネット ID やセキュリティグループ ID など、追加の VPC 固有設定情報を指定する必要があります。AWS Lambda はこの情報を、関数がプライベート VPC 内の他のリソースに安全に接続できる Elastic Network Interface (ENI) のセットアップに使用します。

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

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

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

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

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:DeleteNetworkInterface

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

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

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

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

Amazon VPC へのアクセス用に Lambda 関数を設定する

VPC 情報は、VpcConfig パラメータを使用して Lambda 関数設定に追加します。Lambda 関数の作成時に追加する (「CreateFunction」を参照)、あるいは既存の Lambda 関数設定に追加することができます (「UpdateFunctionConfiguration」を参照)。AWS CLI の例を次に示します。

  • Lambda 関数の作成時に VPC 情報を指定できるよう、CLI コマンド create-function では --vpc-config パラメータを指定します。

    $ aws lambda create-function --function-name my-function \ --runtime go1.x --handler main --zip-file fileb://main.zip \ --role execution-role-arn \ --vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=comma-separated-security-group-ids
  • CLI コマンド update-function-configuration では、既存の Lambda 関数設定に VPC 情報を追加するための --vpc-config パラメータを指定します。

    $ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=security-group-ids

    Lambda 関数設定から VPC 関連情報を削除するには、UpdateFunctionConfiguration API を使用して、次の CLI コマンド例のように、サブネット ID とセキュリティグループ ID の空のリストを指定します。

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

Lambda 関数に VPC 設定を追加した場合、関数でアクセスできるのは、その VPC 内のリソースのみになります。Lambda 関数から VPC リソースとパブリックインターネットの両方にアクセスする必要がある場合は、VPC 内に NAT (Network Address Translation) インスタンスが必要になります。

Lambda 関数が VPC 内で動作するように構成されている場合、追加の ENI の使用を開始するペナルティが発生します。これは、ネットワークリソースに接続する際にアドレス解決が遅延する場合があることを意味します。

Lambda 関数でのインターネットアクセス

AWS Lambda は、指定された VPC 情報を使用して、Lambda 関数から VPC リソースにアクセスするための ENI をセットアップします。各 ENI には、指定されたサブネットの IP アドレス範囲からプライベート IP アドレスが割り当てられます。VPC に接続されている関数には、デフォルトではパブリック IP アドレスまたはインターネットアクセスはありません。

注記

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

プライベートサブネットからのインターネットにアクセスには、ネットワークアドレス変換 (NAT) が必要です。VPC に NAT ゲートウェイまたは NAT インスタンスを追加することで、関数にインターネットへのアクセス権を付与することができます。インターネットゲートウェイにはパブリック IP アドレスが必要なため、機能しません。詳細については、『Amazon VPC ユーザーガイド』の「NAT ゲートウェイ」を参照してください。

VPC 対応の Lambda 関数をセットアップするためのガイドライン

Lambda 関数は、処理するイベント数に基づいて自動的にスケーリングされます。このスケーリング動作をサポートする VPC 対応の Lambda 関数をセットアップするための一般的なガイドラインを次に示します。

  • Lambda 関数で VPC にアクセスする場合は、Lambda 関数でのスケーリング要件をサポートできる充分な ENI キャパシティーが VPC にあることを確認します。次の式を使用すると、ENI 要件を概算できます。

    Projected peak concurrent executions * (Memory in GB / 3GB)

    各パラメーターの意味は次のとおりです。

    • 投射されたピーク時の同時実行 – 関数がサポートする必要がある同時実行の数。

    • メモリ – Lambda 関数用に設定したメモリの容量。

  • 指定するサブネットには、ENI の数に見合う数の使用可能な IP アドレスがある必要があります。

    また、Lambda 関数設定内のアベイラビリティーゾーンごとに 1 つ以上のサブネットを指定することをお勧めします。アベイラビリティーゾーンごとにサブネットを指定しておくと、1 つのアベイラビリティーゾーンで障害が発生した場合や IP アドレスが枯渇した場合も、別のアベイラビリティーゾーンで Lambda 関数を実行できます。

VPC に十分な数の ENI またはサブネット IP がない場合は、リクエスト数が増えても Lambda 関数を拡張できず、EC2 エラータイプの呼び出しエラー (例: EC2ThrottledException) が増加します。Amazon VPC は ENI の作成の制限を適用します。この制限の引き上げをリクエストするには、サポートセンターコンソールまでお問い合わせください。