S3 Tables の自動レプリケーション機能を有効にしてバックアップにする
awsS3 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 で失敗する。