あるチームがLambda関数でサードパーティAPIを呼び出すコードを運用している。本番環境で「Task timed out after 15.00 seconds」というエラーが頻発しているが、同じコードをローカルで実行するとサードパーティAPIから正常にレスポンスが返ってくる。Lambda関数はVPC内に配置されている。最も可能性が高い原因はどれか。
- A. Lambda関数のタイムアウト値が15秒と短すぎるため、30秒に延ばす必要がある
- B. VPCのセキュリティグループがサードパーティAPIのIPアドレスへのアウトバウンドを許可しているが、NACLがブロックしている
- C. Lambda関数がVPC内に配置されているためインターネットへのアウトバウンド通信ができず、サードパーティAPIに到達できていない
- D. Lambda関数の同時実行数が上限に達してキューイングされることでタイムアウトが発生している
解答と解説を見る
正解: C
Lambda関数をVPC内に配置するとプライベートサブネットのデフォルト構成ではインターネットへのアウトバウンド通信ができなくなる(選択肢C)。VPC外のLambdaはAWSのNATを通してインターネットにアクセスできるが、VPC内のLambdaはVPCのネットワーク設計に依存し、NAT GatewayまたはNATインスタンスを経由する設定がないとインターネットに到達できない。ローカルでは直接インターネットに接続できるため成功し、VPC内のLambdaでは到達できないためタイムアウトする。選択肢Aのタイムアウト値の延長は根本原因でなく延長しても到達できなければ引き続き失敗する。選択肢Dの同時実行上限によるキューイングはタイムアウトではなく429エラーまたはCallbackInvokeLimitを超えた場合のエラーになる。選択肢BのNACLブロックも可能性はあるが、選択肢Cの方がVPC内Lambdaの代表的な問題として優先度が高い。解決策はNAT Gatewayの追加またはVPCエンドポイントの設定(AWSサービスへのアクセスの場合)。
📚 関連サービスの解説: AWS Lambda ・ Amazon VPC