LambdaとVPCの落とし穴
落とし穴と書いていますが、熟達したAWSマスターの方なら当たり前のことかもしれません。
今回は嵌ったのはVPC内でLambdaを使うことによるAWSの課金額の増加です

この画像ではEC2その他が$92となっています。この期間は全くサービスに触れておらず、外部からのユーザーのアクセスもほぼない状態でこの請求額。クレカの明細を見て、飛び起きて調べました...
構成
今回の高額請求が起きた構成です。
フロントにCloudFrontとS3を使用してバックエンドにLambdaを使っています。
DBはRDSを使用しています。
使用しているAWSサービスをまとめます
- CloudFornt
- S3
- API Gateway
- Lambda
- RDS
- RDS Proxy
- Route53
- VPC
- NAT Gateway
NAT Gatewayは構成図に書いてありませんが、lambdaから外部APIを使用するために使用しています

Cost Exprolerの"EC2その他"ってなんだ?
今回の構成ではEC2は使っていません。代わりにlambdaを使っています。
最初請求の明細を見た時にEC2その他というジャンルの請求額が多かったのでLambdaのことかなと思っていましたが、どうやらそれだけではないようで、かなりのサービスがEC2その他に分類されるようです。
下記がEC2 その他に分類されるようです
- Amazon EBS
- EBSスナップショット
- Elastic IPアドレス
- データ転送
- NATゲートウェイ
- VPCエンドポイント
この中で使用しているのはNAT Gatewayだけ
Lambdaのログを見たりしてもわからなかったのでAmazon Qと呼ばれるチャットボットに聞いてみました
Q. 9月のEC2 その他(EC2-Other)の請求の内訳を教えて
100%がNAT Gatewayという結果でした。
NATGatewayはlambdaから外部のAPIを使用するために配置していましたが
Lambdaにはほぼリクエストが来ていないのになぜ課金だけが起きたのか
なぜNAT Gatewayで課金されていたのか
なぜLambdaにリクエストがほぼ来ていないのにNAT Gatewayが使用されて、課金されたのか。
それはLambdaのログ、SSM、メタデータなどなど、たくさんのデータをLambdaとAWSサービス間でやり取りしたいたからでした。
NAT Gatewayは外部ネットワークと一方的な通信をする際に使用されるものだと認識しています。
VPC外のAWSサービスまでもNATgatewayを介して接続するとは知りませんでした。
AWSサービスとの通信は例外でNATGatewayを介さずに通信できるものだと思っていました。
対処法
LambdaをVPC外に置けば他とのサービス間でNatGatewayを介さないので問題ないですね。
VPC外にLambdaを配置するとVPC内のRDSと接続できませんが、RDS Proxyを介して接続すれば今まで通り使用できました。
