DynamoDB でバックアップから別リージョンへのリストアができるようになったみたいなので試してみた
2020-02-19DynamoDB のバックアップからテーブルをリストアする際に、他のリージョンにもリストアできるようになったみたいなので、実際に試してみました。
目次
概要
DynamoDB テーブルのバックアップからリストア (復元) する際に、元のテーブルと別のリージョンにリストアできるようになったようです。今回は、実際に 東京 (ap-northeast-1) で取得したバックアップを バージニア北部 (us-east-1) リージョンへリストアしてみました。
AWS 公式のアナウンスは下記記事を参照してください。
やってみる
手順としては下記の通りです。
- バックアップを作成する
- リージョンを指定して復元する
バックアップの作成については、普段からバックアップ取得している場合は不要です。
1. バックアップを作成する
今回は 東京 (ap-northeast-1) リージョンにある Thread テーブルを対象にします。バックアップが存在しないので、まずは手動でバックアップを作成します。
バックアップが作成されました。
今回はオンデマンドバックアップからの復元を試しますが、ポイントインタイムリカバリ (PITR) からの復元については AWS のブログ記事を参照してください。
2. リージョンを指定してリストアする
続いて、作成したバックアップからリストアします。
先ほど作成したバックアップを選択して バックアップの復元 ボタンを押します。
すると、 クロスリージョンの復元 という項目があるので、ここでリストア先のリージョンを選択します。
後の項目は適宜変更してください。
最後に テーブルの復元 ボタンを押すと、リストアが開始されます。
リストア先のリージョンで確認する
復元ボタンを押した直後は、リストア先のリージョンではステータスが リストア中 となっています。
リストアには最大で数時間かかると書かれていますが、今回は 5 分ほどでステータスが 有効 になりました。
CLI でリストアしてみる
同じことを AWS CLI でやってみます。
AWS CLI のバージョンは、最新の v2.0.0
です。
$ aws --version
aws-cli/2.0.0 Python/3.7.4 Darwin/18.7.0 botocore/2.0.0dev4
コマンドとしては DynamoDB の restore-table-from-backup
です。
$ aws dynamodb restore-table-from-backup \
--target-table-name ThreadFromBk \
--backup-arn arn:aws:dynamodb:ap-northeast-1:123456789012:table/Thread/backup/01582064716226-XXXXXXXX \
--region us-east-1
An error occurred (ValidationException) when calling the RestoreTableFromBackup operation: Invalid Request: sseSpecificationOverride must be provided for cross-region restores
エラーになりました。
どうやらクロスリージョンリストアには SSESpecificationOverride が必要なようです。
ただ、 v2.0.0
では restore-table-from-backup
のオプションとして SSESpecificationOverride を渡すオプションがありません。 --generate-cli-skeleton
オプションで確認してみても項目が見当たりません。
$ aws dynamodb restore-table-from-backup --generate-cli-skeleton
{
"TargetTableName": "",
"BackupArn": "",
"BillingModeOverride": "PAY_PER_REQUEST",
"GlobalSecondaryIndexOverride": [
{
"IndexName": "",
"KeySchema": [
{
"AttributeName": "",
"KeyType": "RANGE"
}
],
"Projection": {
"ProjectionType": "INCLUDE",
"NonKeyAttributes": [
""
]
},
"ProvisionedThroughput": {
"ReadCapacityUnits": 0,
"WriteCapacityUnits": 0
}
}
],
"LocalSecondaryIndexOverride": [
{
"IndexName": "",
"KeySchema": [
{
"AttributeName": "",
"KeyType": "RANGE"
}
],
"Projection": {
"ProjectionType": "INCLUDE",
"NonKeyAttributes": [
""
]
}
}
],
"ProvisionedThroughputOverride": {
"ReadCapacityUnits": 0,
"WriteCapacityUnits": 0
}
}
ということで、 v1 の最新版である v1.18.2
で試してみます。
v1 と v2 の共用については、下記の記事を参考に環境を作りました。
(aws-cli-v1) $ aws --version
aws-cli/1.18.2 Python/3.7.5 Darwin/18.7.0 botocore/1.15.2
この環境で --generate-cli-skeleton
オプションで確認してみると SSESpecificationOverride の項目が存在しています。
(aws-cli-v1) $ aws dynamodb restore-table-from-backup --generate-cli-skeleton
{
"TargetTableName": "",
"BackupArn": "",
"BillingModeOverride": "PROVISIONED",
"GlobalSecondaryIndexOverride": [
{
"IndexName": "",
"KeySchema": [
{
"AttributeName": "",
"KeyType": "RANGE"
}
],
"Projection": {
"ProjectionType": "KEYS_ONLY",
"NonKeyAttributes": [
""
]
},
"ProvisionedThroughput": {
"ReadCapacityUnits": 0,
"WriteCapacityUnits": 0
}
}
],
"LocalSecondaryIndexOverride": [
{
"IndexName": "",
"KeySchema": [
{
"AttributeName": "",
"KeyType": "HASH"
}
],
"Projection": {
"ProjectionType": "INCLUDE",
"NonKeyAttributes": [
""
]
}
}
],
"ProvisionedThroughputOverride": {
"ReadCapacityUnits": 0,
"WriteCapacityUnits": 0
},
"SSESpecificationOverride": {
"Enabled": true,
"SSEType": "KMS",
"KMSMasterKeyId": ""
}
}
help
で確認してみても、 --sse-specification-override
の説明があります。
(aws-cli-v1) $ aws dynamodb restore-table-from-backup help
...
OPTIONS
...
--sse-specification-override (structure)
The new server-side encryption settings for the restored table.
Shorthand Syntax:
Enabled=boolean,SSEType=string,KMSMasterKeyId=string
JSON Syntax:
{
"Enabled": true|false,
"SSEType": "AES256"|"KMS",
"KMSMasterKeyId": "string"
}
では、先ほどのコマンドを実行してみます。
(aws-cli-v1) $ aws dynamodb restore-table-from-backup \
--target-table-name ThreadFromBk \
--backup-arn arn:aws:dynamodb:ap-northeast-1:123456789012:table/Thread/backup/01582064716226-XXXXXXXX \
--sse-specification-override Enabled=false \
--region us-east-1
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "ForumName",
"AttributeType": "S"
},
{
"AttributeName": "Subject",
"AttributeType": "S"
}
],
"TableName": "ThreadFromBk",
"KeySchema": [
{
"AttributeName": "ForumName",
"KeyType": "HASH"
},
{
"AttributeName": "Subject",
"KeyType": "RANGE"
}
],
"TableStatus": "CREATING",
"CreationDateTime": 1582071746.299,
"ProvisionedThroughput": {
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 1,
"WriteCapacityUnits": 1
},
"TableSizeBytes": 0,
"ItemCount": 0,
"TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/ThreadFromBk",
"TableId": "bd27f2d1-61c3-41e4-b91a-XXXXXXXXXXXX",
"BillingModeSummary": {
"BillingMode": "PROVISIONED"
},
"RestoreSummary": {
"SourceBackupArn": "arn:aws:dynamodb:ap-northeast-1:123456789012:table/Thread/backup/01582064716226-XXXXXXXX",
"SourceTableArn": "arn:aws:dynamodb:ap-northeast-1:123456789012:table/Thread",
"RestoreDateTime": 1582064716.226,
"RestoreInProgress": true
}
}
}
(aws-cli-v1) $ aws dynamodb list-tables --region us-east-1
{
"TableNames": [
"ThreadFromBk"
]
}
リストアが正常に実行され、バージニア北部 (us-east-1) リージョンにテーブルが作成されました。
CLI から実行する場合は、今 (2020/02/19) のところ v1 でのみ可能なようです。
まとめ
DynamoDB のバックアップからテーブルをリストアする際に、他のリージョンにもリストアできるようになったみたいなので、実際に試してみた話でした。
リージョンを跨いだリストアと聞くと面倒な印象がありましが、非常に簡単にリストアすることができました。
今回はマネジメントコンソールから実行しましたが、 CLI からも実行できるようなので、そちらもあらためて試してみようと思います。 CLI でのクロスリージョンリストアについては、現時点 (2020/02/19) では v1 でのみ実行可能なようですが、問題なく実行できました。
参考
- You can now restore Amazon DynamoDB table backups as new tables in other AWS Regions
- Restore Amazon DynamoDB backups to different AWS Regions and with custom table settings | AWS Database Blog
comments powered by Disqus