

特定のバケット内に gzip 圧縮されてるのに拡張子が .json で保存されてるのですが  
このままだとバッチ処理でうまく gz ファイルと認識してくれないみたいなので  
.json を .json.gz にリネームしたいです

ただすでにサービス運用中でこのバケット内に常にAPIから書き込みがあって  
json.gz 存在チェック → リネーム という処理がアトミックではないので  
存在チェックの後リネーム処理の間にAPIからの更新処理が割り込まれると  
最新データを古いデータで上書きしてしまうことになるのでそういうことが起きないようにしたいです

ファイルシステムだったらロックみたいなことをすると思うのですが  
S3のオブジェクトにもロックのようなものはあったりするんでしょうか

あるいはリネーム実行ユーザにcreateはできるけどupdateはできないみたいな  
IAM権限が付けられれば実現できるかなと思ったのですが  
オブジェクト書き込みに関しては S3:PutObject 権限しかないように見えます

このようなケースでどのような方法を取ればいいかお知恵をお貸しいただけませんか


CC BY-SA 4.0
2020-03-24T03:53:37.320
64065
2022-02-04T03:03:15.243
2020-03-24T04:15:26.163
question
amazon-s3
S3 のオブジェクトをアトミックにリネームしたい


そもそもS3にはrenameのAPIはないので、copyObject->deleteObjectの操作になります。  
copyObjectの場合、当然同名のオブジェクトがあれば失敗しますので、その時は別名にしてcopyを行えばよいかと思います。

サービス停止ができないなら仕方ありませんが、停止可能であれば停止してやるのが一番だとは思いますが。


CC BY-SA 4.0
2020-03-24T04:56:40.010
64068
2020-03-24T04:56:40.010
38303
64065
answer