API Gatewayの実行エラー「Execution failed due to an vpc link error」について

API GatewayVPCリンクエラー

API GatewayVPCリンクを使ったREST API(バックエンドはECSサービス)において、単発の500エラーを検出したのだが、その際、実行ログに以下の様なエラーメッセージが出力された。

(xx389x71-xx67-442x-9073-441x13535xx1) Execution failed due to an vpc link error

実行ログの流れを確認すると、エンドポイントリクエスト後に、このエラーが生じてAPI実行が異常終了しており、メッセージのままの意味であれば、VPCリンクに何かしらの異常が生じたものと思われる。

HTTP APIの場合、VPCリンクは60日間トラフィックが生じないと、ステータスがAVAILABLEからINACTIVEへと変わり、VPC内の専用ENIが削除されてしまい、API通信が一時的に不能状態に陥るといった仕様がある(再びAPIリクエストされるとENIが復活するものの、プロビジョニング完了までの数分は通信不能が続く)。

しかし、問題の起きたAPI GatewayREST APIで、VPCリンクにはVPCエンドポイントサービスが使われており、こちらはHTTP APIとは異なり、長期間のトラフィックが生じないと自動削除されるといった仕様にはなっていない(そして、このAPIは常時、高トラフィックでもあった)。

VPCリンクに設定しているVPCエンドポイントサービスやNLBのメトリクスを確認したのだが、特段の異常が見られなかった為、明確な原因を把握しておきたく、このメッセージを調べてみたものの、公式の開発者ガイドや検索結果に引っかかるものは無かった。

エラーの原因

自身で調べてみても、結局分からなかったので、AWSサポートに問い合わせてみた。

回答としては、やはり、API GatewayからNLB間における一時的な通信障害に起因するもの(明確にどこで発生したもの、というところまでは判明しなかったけど)、という事であった。

通信において経路上のどこでもエラーが発生する可能性はあり、完全に無くす事は出来ない為、処理上で問題となるのであれば、対応としてAWSのドキュメントにもある様に、クライアントサイドでリトライを実装するのが望ましい。

今回のケースでは頻発していた訳でもなく、単発のエラーであったのと、そもそも処理としてリトライもされており、特に大きな問題でもなかったので、この回答をもって調査を終了とした。

API GatewayVPCリンクを使ったREST APIを利用する上では、VPCエンドポイントサービスやNLBで確認出来るステータスやメトリクスに異常が無くとも、こういったエラーは生じ得る、という事を念頭に置いておく必要がある。