ローカル環境からVPC Lambdaってどうして呼び出せるんだっけ?
遅ればせながら、この記事はSimpleForm Advent Calendar 2024の12日目の記事です。
3日目の記事でも言及されていますが、当社ではLambdaを使った開発を行っております。LambdaからAurora等のVPC内リソースにアクセスするため、VPCを紐づけたLambda(以下、VPC Lambda)を主に使っております。
本番で動いているLambdaが失敗したときの再実行だったり、開発環境のLambdaの動作確認を行うとき等にローカル環境からVPC Lambdaを実行することがあります。VPC内のリソースとなると、経路を作ってあげないと呼び出せなさそうですが、何故か呼び出せています。
ということで、実際に手を動かしながらどうしてローカル環境からVPC Lambdaを呼び出せるかを探っていきたいと思います。
VPCを紐づけないLambdaを呼び出してみる
まずは、VPCを紐づけないLambdaを作って呼び出してみます。role, zip-file, handlerはご自身の環境に合わせて書き換えてください。
aws lambda create-function \
--function-name test-lambda \
--role arn:aws:iam::123456789012:role/service-role/test \
--runtime python3.13 \
--zip-file fileb://code.zip \
--handler lambda_function.lambda_handler
これでLambdaが作成できたので、以下のコマンドで呼び出してみます。呼び出せたかどうかが知りたく、レスポンスの内容は今回は不要なので/dev/nullに捨てています。
aws lambda invoke --function-name test-lambda /dev/null
当然といえば当然ですが、StatusCodeが200で返ってきて成功します。
VPC Lambdaを呼び出してみる
いよいよ本題のVPC Lambdaをローカル環境から呼び出してみます。VPCを作成し、先ほど作成したLambdaに紐づけます。

構成図
まずはVPCとサブネットを作成します。サブネット作成時のvpc-idには、作成されたVPCのIDを指定します。
aws ec2 create-vpc --cidr-block 10.10.0.0/16
aws ec2 create-subnet --vpc-id {vpcid} --cidr-block 10.10.0.0/24
LambdaをVPCに紐づける際にセキュリティグループも必要になるので、以下のコマンドで作成します。デフォルトではセキュリティグループのインバウンドルールはなしで作成されるようです。
aws ec2 create-security-group --description test --group-name test --vpc-id {vpcid}
ここまでの手順でLambdaにVPCを紐づけることができたので、先ほどと同様に呼び出してみます。
aws lambda invoke --function-name test-lambda /dev/null
結果としては、VPCを紐づけていないときと同様でStatusCodeが200で返ってきて成功します。セキュリティグループのインバウンドルールに許可設定入れていないのになぜ...?
なぜVPC Lambdaはローカル環境から呼び出せるのか
ここまでで、VPC Lambdaはローカル環境からでも呼び出せることがわかりました。その仕組みについて調べてみると、以下の記事にバッチリ記載されておりました...!
Lambdaの実体がユーザーのVPC内にある訳ではなく、実体はAWS管理のVPC内にあり、ENIがユーザーのVPC内にあるという仕組みのようです。
AWSのドキュメントにも記載されていますが、Invoke APIのエンドポイントはlambda.{リージョン}.api.awsなので、呼び出し元がここに到達できさえすればVPC Lambdaでも呼び出せるということになりそうです。
また、先ほど作成したVPC Lambdaのセキュリティグループのインバウンドルールに許可設定を入れなくても呼び出せたことから、インバウンドルールは評価されていなさそうです。インバウンドルールの意味とは...と思っていたところ、以下の記事によると、VPC Lambdaの呼び出し元となるサービスによってはインバウンドルールが評価されるようです。
最後に
調査の結果、Lambdaの実体はユーザーのVPCの中にはないということが分かりました。一方で、シンプルフォームでは法人の実体があるかを評価するプロダクト SimpleCheck をLambdaを使って開発しております。これを機に少しでも興味を持っていただけたら幸いです🙏

リアルタイム法人調査システム「SimpleCheck」を開発・運営するシンプルフォーム株式会社の開発チームのメンバーが、日々の開発で得た知見や試してみた技術などについて発信していきます。 Publication 運用への移行前の記事は zenn.dev/simpleform からご覧ください。


Discussion