日常生活を改善するブログ

ガジェット体験や日常生活から得た気づきをシェアするブログ

【AWS】S3のファイルアップロードで「Part number must be an integer between 1 and 10000」となった場合の対処法

AWS作業メモです。VMImportしようとして180GBほどあるイメージをアップロードしようとしたら以下のメッセージとともに転送エラーとなりました。

S3へのアップロードの時はaws configureの値は確認しておく

お題「今日の出来事」

出力されたエラーの内容は以下です。

Part number must be an integer between 1 and 10000, inclusive
追加の詳細: ArgumentName: partNumber, ArgumentValue: 10001, RequestId: XXXXXXXX HostId: XXXXXXX

結構な時間アップロードしていて半分くらいまできてエラーになったのでかなり萎えました。

原因ですが、分割したファイルの上限数にひっかかたのが原因でした。

S3にCLIでファイルアップロードするときになにも指定しないと8MB以上のファイルは自動的にマルチアップロードとなります。分割するファイルサイズは、デフォルトだと「8MB」となります。

ポイントなのは分割できるファイル数は最大で「10000」までということ。

つまり「8MB×10000=80GB」をこえると

「Part number must be an integer between 1 and 10000」

分割ファイルするファイルは10000以内にしてね

ということでエラーになるようです。

対処方法 分割するファイルサイズを変更する(multipart_chunksize を変更する)

分割するファイルサイズを変更することで対処できます。

コマンドラインで
aws configure set default.s3.multipart_chunksize 50MB

と分割するサイズ指定します。
上の例のように50MBとすれば「50MB×10000=500GB」までのサイズのファイルが転送できるようになります。

この設定で無事に180GBのファイルを転送できました。

S3のファイル制限といったら、
「ファイルサイズの上限が5TB」
「マルチパートアップロードのサイズ上限も5TB」
くらいの認識しかありませんでした。

分割したファイルの数は10000が上限。これも忘れないようにしておきたいことですね。

aws configure で設定できるS3の設定値

値の説明は以下。

AWS CLI S3の設定 - AWS CLI 1.16.128コマンドリファレンス
https://docs.aws.amazon.com/cli/latest/topic/s3-config.html

以下に設定しておけば、概ね問題ありません。

設定例

$ aws configure set default.s3.max_concurrent_requests 20
$ aws configure set default.s3.max_queue_size 10000
$ aws configure set default.s3.multipart_threshold 64MB
$ aws configure set default.s3.multipart_chunksize 16MB
$ aws configure set default.s3.max_bandwidth 50MB/s
$ aws configure set default.s3.use_accelerate_endpoint true
$ aws configure set default.s3.addressing_style path

転送するサイズと使用するネットワークの帯域によって以下を変更するくらいです。

aws configure set default.s3.multipart_chunksize

aws configure set default.s3.max_bandwidth 

ネットワークの速度単位は「MB/s」です。

必要に応じて計算しておきましょう。

回線速度(転送速度、通信速度)の単位「bps」「B/s」変換
https://note.cman.jp/network/bpsbs/