開発環境向けMinIOでバージョニングを有効にしたオブジェクトの削除をしたい 2022 夏

やりたいこと

本番ではAWS S3上でバージョニングしたオブジェクトをバージョニング情報含めてを削除したい

どうして?

例えば顧客のデータを削除するときにS3にバージョニングしているとそれが復旧できて本当に削除されていないやんという話になるため

開発環境ではどうする?

S3の代わりにMinIOをつかう。docker-compose.ymlはこんなかんじ。 MinIOで記載されているのは MinIO | Learn more about MinIO's Erasure Code Implementation

version: "3"
services:
  minio:
    image: minio/minio
    command: server --console-address ":9001" /data{1...4}
    environment:
      MINIO_ACCESS_KEY: root
      MINIO_SECRET_KEY: password
    ports:
      - "9000:9000"
      - "9001:9001"
    # Versioningを使うための準備
    volumes:
      - ./tmp/data1:/data1
      - ./tmp/data2:/data2
      - ./tmp/data3:/data3
      - ./tmp/data4:/data4

バケットを作ったときにVersioningをONにするインタフェースが出てくる。

Rubyからデータを削除する

aws-sdk-s3 を使う。

client = Aws::S3::Client.new(access_key_id: 'root', secret_access_key: 'password', endpoint: 'http://127.0.0.1:9000', force_path_style:true)
resource = Aws::S3::Resource.new(client: client)
bucket = resource.bucket('development')
bucket.object_versions(prefix: 'test').each(&:delete)