AWS LambdaをVPC内で運用している場合、同じVPC内の別のLambda関数を呼び出す際にどのような設定が必要なのか疑問に思うことがあります。特に、VPCエンドポイントやNATゲートウェイが必要なのか、どのようなアーキテクチャが適切なのかを正しく理解することが重要です。
VPC内のLambdaから別のLambdaを呼び出す仕組み
通常、AWS LambdaはデフォルトではVPC外で実行されるため、直接インターネットやAWSのサービス(例えばLambda同士)と通信できます。しかし、VPC内に配置されたLambda関数は、VPC外のAWSサービスと直接通信できません。
そのため、VPC内のLambdaが別のLambdaを呼び出す際には、以下の2つの方法のどちらかを採用することになります。
- 直接呼び出し(AWS Lambda APIを利用)
- VPC内部の通信(VPCエンドポイントやNATを利用)
AWS Lambda API経由で直接呼び出す方法
VPC内のLambdaが別のLambdaを呼び出す場合、最もシンプルな方法は、AWS SDKを利用してLambda関数を直接呼び出すことです。
例えば、PythonのBoto3を使ってLambda関数を呼び出すコードは次のようになります。
import boto3
client = boto3.client('lambda')
response = client.invoke(
FunctionName='other-lambda-function',
InvocationType='RequestResponse',
Payload=b'{}'
)
print(response)
この方法であれば、VPCの設定に関係なく、Lambda関数をAPI経由で呼び出すことが可能です。
VPCエンドポイントは必要か?
AWS LambdaのAPIを利用する場合、インターネットへのアクセスが必要になります。VPC内のLambda関数はデフォルトではインターネットに接続できないため、次のいずれかの方法が必要です。
- VPCエンドポイントを作成し、Lambda APIへの直接アクセスを許可する
- NATゲートウェイを設置し、インターネット経由でLambda APIを呼び出せるようにする
VPCエンドポイントを設定すれば、NATを使わずにAWSのLambda APIにアクセスできます。設定手順は以下の通りです。
- AWSコンソールの「VPC」→「エンドポイント」を開く
- 「新しいエンドポイントを作成」を選択
- 「サービスカテゴリ」で「AWSサービス」を選択
- 「サービス名」で
com.amazonaws.[リージョン].lambda
を選択 - 対象のVPCとサブネットを指定
- セキュリティグループでアクセス許可を設定
- エンドポイントを作成
これにより、VPC内からAWS Lambda APIを直接呼び出せるようになります。
内部通信のみでLambdaを呼び出す方法
Lambda間の通信をVPC内で完結させる場合、以下のような方法を利用できます。
- プライベートAPI Gatewayを活用
- 内部ALB(Application Load Balancer)を利用
例えば、AWS API Gatewayをプライベートエンドポイントとしてデプロイし、内部ネットワークからのみアクセスできるようにする方法があります。これにより、VPC外部に通信することなく、Lambda間の連携が可能になります。
まとめ
VPC内のLambdaから別のLambdaを呼び出すには、以下の選択肢があります。
- 直接AWS Lambda APIを利用し、VPCエンドポイントまたはNATを活用する
- VPC内部の通信手段としてプライベートAPI GatewayやALBを導入する
もし、VPC内に閉じた環境でLambdaを呼び出したい場合は、API Gatewayのプライベートエンドポイントが適切です。Lambda API経由で呼び出す場合は、VPCエンドポイントを活用することで、インターネットを経由せずに通信できます。
適切な方法を選択し、AWS Lambdaのパフォーマンスを最大限に活用しましょう。
コメント