ファイルサイズが 10 MB 以下でも API Gateway で REQUEST_TOO_LARGE が発生する理由を教えてください

2023.06.28

困っていた内容

API Gateway から S3 へファイルをアップロードするアプリケーションを構築しています。
API Gateway には 10 MB のペイロードサイズ制限がありますが、ファイルサイズが 10 MB 以下のリクエストでも REQUEST_TOO_LARGE のエラーが発生しました。

ファイルサイズが 10 MB 以下でも API Gateway で REQUEST_TOO_LARGE が発生する理由を教えてください。

どう対応すればいいの?

アップロードされるファイルは Base64 形式に変換することによってサイズが増加するため、サイズ増加後のファイルサイズが 10 MB を超過している可能性があります。

Base64 の 1 文字はデータのちょうど 6 ビット分を表します。そのため、入力される文字列やバイナリーファイルに含まれる 3 バイト(3×8 ビット = 24 ビット)は、4 桁の Base64 で表されます(4×6 = 24 ビット)。 このことにより、Base64 で表された文字列またはファイルは、元のサイズの 133% の大きさになると言えます(33% の増加)。

MDN Web Docs より

上記を踏まえ、Base64 形式への変換後のファイルサイズを考慮する必要がある点にご注意ください。

なお、API Gateway のペイロード上限を超えるサイズのファイルをアップロードしたい場合には、API Gateway から Lambda 関数等を呼び出して署名付き URL を返却する方法をご検討ください。

参考資料