こんにちは、だにえる (@daniel__blog) です。
以前にS3を触っているときに、以下の問題が生じました。
バケットに保管しているログファイルを同一リージョンの別バケットへ引っ越しさせたい。その際に、ファイルの最終更新日時は変更せずに移動したい。
今回は上記の問題について取り上げます。
Contents
引越し先フォルダに配置した時点の時刻が反映されてしまう
実際にAWSマネジメントコンソール上から操作してみます。
どうやら「移動」でも「コピー」でも引っ越し先フォルダに配置した時点の時刻が反映されてしまうようです。ここらへん、通常のディレクトリ操作と差異がある部分ですね。そのまま引っ越しできそうなのに…!!
最終更新日時を変更せずに「移動」または「コピー」する方法はないのでしょうか?
結論:最終更新日時を元のまま保持することはできない。
最終更新日時(LastModified)はシステム定義のメタデータのため
S3オブジェクトの最終更新日時(LastModified)は、システム定義のメタデータであるため、オブジェクト作成日または最終更新日のいずれか遅い方を示します。
そのため、現時点において、コピーおよび移動した際に、元ファイルの更新日時を保持することはできないようです。
代替案:ユーザー定義メタデータを付与する
オブジェクト毎にユーザー定義メタデータを付与し、希望する移動前の最終更新日時を保持することが可能です。
一例として、以下の様なオプションを付与する形となります。
$ aws s3api put-object --bucket bucketname --key file.txt --metadata "original_lastmodified"="2018/8/24 12:00 JST"
ユーザー定義メタデータ使用時の注意点
aws s3 syncコマンドを使用する際に問題アリ
ユーザー定義メタデータに付与した最終更新日時をaws s3 syncコマンドでの同期対象ファイルを判定するための基準としては用いることはできない。
今回は以上です!