質問: 特定のバケット内に gzip 圧縮されてるのに拡張子が .json で保存されてるのですが このままだとバッチ処理でうまく gz ファイルと認識してくれないみたいなので .json を .json.gz にリネームしたいです ただすでにサービス運用中でこのバケット内に常にAPIから書き込みがあって json.gz 存在チェック → リネーム という処理がアトミックではないので 存在チェックの後リネーム処理の間にAPIからの更新処理が割り込まれると 最新データを古いデータで上書きしてしまうことになるのでそういうことが起きないようにしたいです ファイルシステムだったらロックみたいなことをすると思うのですが S3のオブジェクトにもロックのようなものはあったりするんでしょうか あるいはリネーム実行ユーザにcreateはできるけどupdateはできないみたいな IAM権限が付けられれば実現できるかなと思ったのですが オブジェクト書き込みに関しては S3:PutObject 権限しかないように見えます このようなケースでどのような方法を取ればいいかお知恵をお貸しいただけませんか
回答: そもそもS3にはrenameのAPIはないので、copyObject->deleteObjectの操作になります。 copyObjectの場合、当然同名のオブジェクトがあれば失敗しますので、その時は別名にしてcopyを行えばよいかと思います。 サービス停止ができないなら仕方ありませんが、停止可能であれば停止してやるのが一番だとは思いますが。