Elastic Beanstalkでの大容量ファイルアップロードエラーの解決方法

AWS

概要

Elastic Beanstalkを使用してSpring Bootで作成したアプリケーションに対して大容量ファイルのアップロード時に「client intended to send too large body: 9999999 bytes」というようなエラーメッセージが発生しました。本記事では、このエラーの解決方法について説明します。

対応策

client_max_body_size の設定

Elastic Beanstalkでは、デフォルトでアップロードファイルのサイズ制限があります。この制限を解除するために、プロジェクトの直下に .platform/nginx/conf.d/client_max_body_size.conf ファイルを作成し、その中に以下の設定を追加します。

client_max_body_size 50M;

Nginxの設定確認

Elastic Beanstalk にデプロイし、設定の反映を確認するために次のコマンドを実行します。

$ sudo nginx -T | egrep -i "client_max_body_size"
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/conf.d/client_max_body_size.conf:
client_max_body_size 50M;

Nginxの設定にclient_max_body_sizeが正しく反映されたことを確認します。

Spring Bootの設定変更

さらに、「org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field photo exceeds its maximum permitted size of 1048576 bytes.」というエラーが発生しました。このエラーは、Spring Bootのデフォルトのファイルサイズ制限によるものです。application.propertiesファイルに以下の設定を追加します。

spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=50MB

これでSpring Bootアプリケーションで処理できる最大ファイルサイズが設定されます。

まとめ

Elastic Beanstalkでの大容量データ送信エラーを解決するために、NginxとSpring Bootの設定を変更しました。Nginxの設定ファイルに「client_max_body_size」を追加して、データの最大サイズを設定しました。さらに、Spring Bootの設定ファイルにも「multipart.max-file-size」と「multipart.max-request-size」を追加し、アプリケーションで処理できる最大ファイルサイズを設定しました。これにより、大容量データ送信に関連するエラーを解消することができます。

コメント

タイトルとURLをコピーしました