kakakakakku blog

Weekly Tech Blog: Keep on Learning!

LocalStack v3.7 の新機能!Amazon S3 の conditional writes(条件付き書き込み)を試す

2024年8月20日に Amazon S3 の conditional writes(条件付き書き込み)がサポートされた💡オブジェクトの上書きを防ぐ仕組みを独自実装せず,Amazon S3 に任せられるようになるところがメリットだと思う.

aws.amazon.com

試す

さっそく PutObject を試す.AWS CLI だと --if-none-match オプションを指定すれば OK👌

aws s3api put-object コマンドの2回目の実行で PreconditionFailed エラーが出ることを確認できた.

$ echo 'hello' > hello.txt

$ BUCKET=kakakakakku-sandbox-conditional-writes
$ aws s3api create-bucket \
    --bucket ${BUCKET} \
    --create-bucket-configuration LocationConstraint=ap-northeast-1

# 1回目
$ aws s3api put-object \
    --bucket ${BUCKET} \
    --key hello.txt \
    --body hello.txt \
    --if-none-match '*'
{
    "ETag": "\"b1946ac92492d2347c6235b4d2611184\"",
    "ServerSideEncryption": "AES256"
}

# 2回目
$ aws s3api put-object \
    --bucket ${BUCKET} \
    --key hello.txt \
    --body hello.txt \
    --if-none-match '*'
An error occurred (PreconditionFailed) when calling the PutObject operation: At least one of the pre-conditions you specified did not hold

LocalStack で試す

実は2024年8月29日にリリースされた LocalStack v3.7.0 で Amazon S3 の conditional writes(条件付き書き込み)がサポートされている❗️あまりに早すぎる \( 'ω')/

github.com

さっそく最新の LocalStack v3.7.2 を使って試す.

$ localstack --version
3.7.2

結論としてはまったく同じだった👌aws コマンドを awslocal コマンドに変更すれば良く,LocalStack で Amazon S3 の conditional writes(条件付き書き込み)を試せた❗️

$ echo 'hello' > hello.txt

$ BUCKET=kakakakakku-sandbox-conditional-writes
$ awslocal s3api create-bucket \
    --bucket ${BUCKET} \
    --create-bucket-configuration LocationConstraint=ap-northeast-1

# 1回目
$ awslocal s3api put-object \
    --bucket ${BUCKET} \
    --key hello.txt \
    --body hello.txt \
    --if-none-match '*'
{
    "ETag": "\"b1946ac92492d2347c6235b4d2611184\"",
    "ServerSideEncryption": "AES256"
}

# 2回目
$ awslocal s3api put-object \
    --bucket ${BUCKET} \
    --key hello.txt \
    --body hello.txt \
    --if-none-match '*'
An error occurred (PreconditionFailed) when calling the PutObject operation: At least one of the pre-conditions you specified did not hold

関連記事

kakakakakku.hatenablog.com