API Gatewayの七不思議のひとつ。
詳しくは後述。
僕のプロフィールはこちら
環境
・フロント⇔バックのやりとりにAPI Gatewayを使用している
こんなことがありました
ある条件下でAPIが「500」のサーバエラーを返却するのです。
このAPIはS3へ画像を取得しに行き、jsonをフロントに返却しています。
画像は複数で、数は可変です。
ってことで調査してみる
APIの流れはこう。
フロント ⇒ API Gateway ⇒ EC2 ⇒ S3アクセス
- EC2上からcurlコマンドで直接APIを叩くとエラーにはならない。ほげっ??
- API Gateway経由でAPIを実行するとエラーになる。はえっ??
調査から分かることは?
どうやらAPI自体(バック処理)に問題はないが、API Gatewayが悪さをしているっぽい。
また、API Gateway経由だとうまくいく時といかない時があるが、うまくいく時は画像が少ない場合であーる。
ってことは、API Gatewayが何らかの理由で「だめぽよ~」って言ってエラーを返してると推測できる。
API Gatewayには色々と制限がある
■Amazon API Gateway の制限事項と重要な注意点
URL:「https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/limits.html」
API Gatewayのペイロードは10MBらしい
■API Gatewayの最大ペイロードサイズについて
https://qiita.com/akatsukaha/items/2ba0d709835899dae8dd
ペイロードとは、ざっくり言えば「ボディ」のこと。
つまり、APIによって返却されるjsonが10MBを超えているので、API Gatewayが「だめぽよ~」って勝手にエラーを返していることになります。
APIからの返却を9.9MBにしてみたら
キャプチャないので申し訳ないですが、「9.9MB」だとうまくいくんだなー、これが。
API Gatewayのペイロード上限は変えられない
API Gatewayのペイロード上限は変更できません。
つまり、解決できないのです。
どうすればいい??
そもそも10MBを超えている時点でいけてないですが、画像取得なんかは何回かに分けてAPIを実行するしかないですね~。
まとめ
このエラー解決するのに1日かかりました。
マニアックすぎるし、誰が知ってんねんこんなん。
ではさいなら。