S3 で大きなサイズのファイルのストレージクラスを変更時に「Part number must be an integer between 1 and 10000, inclusive」エラーが表示される場合の対処方法

AWS マネジメントコンソールからは一定のサイズまでのオブジェクトのみ変更が可能なため、代わりにライフサイクルルールや AWS CLI を使用して対応を行います。
2022.03.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

S3 バケットにアップロード済みの大きなサイズのファイルがあります。AWS マネジメントコンソールの[アクション]から[ストレージクラスを編集する]を選択してストレージクラスを変更しようとするとPart number must be an integer between 1 and 10000, inclusiveエラーが表示されます。対応方法があれば教えてください。

Part number must be an integer between 1 and 10000, inclusive

どう対応すればいいの?

AWS マネジメントコンソールからは一定のサイズまでのオブジェクトのみ、ストレージクラスの変更などといった変更が可能であり、大きなサイズのオブジェクトを変更する場合はその他の方法を使用する必要があります。 (検証では 150 GB だと成功、172 GB だとエラーが出たのでしきい値はその間にありそうです...)

対応方法

対応方法につきましては、2通りあります。

1.ライフサイクルルールを使用して移行を行う

ストレージクラスを変更したいオブジェクトが存在するバケットに対して適切なライフサイクルルールを設定します。

バケット内にストレージクラスを変更したくないオブジェクトが存在する場合は、prefix やタグフィルター使用してルールをより詳細に指定する必要があります。

2.チャンクサイズを大きなサイズに設定して AWS CLI で実行する

より大きなチャンクサイズを指定してから AWS CLI コマンドを実行することでストレージクラスを変更することもできます。

aws configure setコマンドでチャンクサイズを増やします。5 MB から 5 GB まで指定可能です。

$ aws configure set default.s3.multipart_chunksize <サイズを指定>

送信元と送信先に同じバケットとキーを入力し、ストレージクラスを指定してaws s3 cpコマンドを実行します。

$ aws s3 cp s3://bucket/key s3://bucket/key --storage-class <ストレージクラス>

自分の環境で以下のようにコマンド実行をしたところ...

$ aws configure set default.s3.multipart_chunksize 5GB
$ aws s3 cp s3://XXXXXX/test s3://XXXXXX/test --storage-class STANDARD_IA
copy: s3://XXXXXX/test to s3://XXXXXX/test

ストレージクラスの変更に成功しました! ストレージクラスの変更に成功

参考情報