S3 Tables の自動レプリケーション機能を有効にしてバックアップにする

aws

S3 Tables には自動レプリケーション機能があり、テスト用のリードレプリカにしたり、他のリージョンに向けることで地理的なレイテンシを抑えたりできるほか、 レプリカテーブルのスナップショットの有効期限を元のテーブルより長くしつつ Intelligent Tier を有効にすることでバックアップ用途に用いることもできる。

this.tableBucket = new CfnTableBucket(this, 'SourceTableBucket', {
  tableBucketName: props.tableBucketName,
  replicationConfiguration: {
    role: this.replicationRole.roleArn,
    rules: [
      {
        destinations: [
          { destinationTableBucketArn: destTableBucketArn },
        ],
      },
    ],
  },
});

バケットだけではなくテーブル単位での設定もできる

$ aws s3tables put-table-replication \
    --table-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/amzn-s3-demo-table-bucket-sales-data \
    --configuration file://table-replication-config.json

レプリケーション先の Bucket には namespace/table が自動で作られ、同じ順番でコミットされる。権限が足りないなどして失敗した場合、テーブルの Management タブからエラー内容を確認できる。

コミットしてから 5-7 分ほどでレプリケーション先のテーブルに反映された。レプリケーション先のテーブルに書き込もうとすると PERMISSION DENIED で弾かれる。 また、テーブルを削除した場合もレプリケーション先のテーブルは保持される。ただしまだレプリケーションされてないコミットは失われる。 同じ名前で空のテーブルを作成しレプリケーションを有効にすると空で上書きされることはなく ConflictException で失敗する。