S3 で大きなサイズのファイルのストレージクラスを変更時に「Part number must be an integer between 1 and 10000, inclusive」エラーが表示される場合の対処方法
困っていた内容
S3 バケットにアップロード済みの大きなサイズのファイルがあります。AWS マネジメントコンソールの[アクション]から[ストレージクラスを編集する]を選択してストレージクラスを変更しようとするとPart number must be an integer between 1 and 10000, inclusive
エラーが表示されます。対応方法があれば教えてください。
どう対応すればいいの?
AWS マネジメントコンソールからは 160 GB までのオブジェクトのみ、ストレージクラスの変更が可能です(※2024年5月9日時点)。それより大きなサイズのオブジェクトのストレージクラスを変更したい場合は、その他の方法を使用する必要があります。
オブジェクトのサイズが 160 GB 未満の場合は、Amazon S3 コンソールを使用してオブジェクトのストレージクラスを変更できます。それ以上大きい場合は、S3 Lifecycle の設定を追加すると、オブジェクトのストレージクラスを変更できます。
対応方法
対応方法につきましては、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