boto3を用いたDynamoDBの操作(3/3)

 
この記事は前回のboto3ライブラリを用いたDynamoDBの操作の続きです。
 
nissin-geppox.hatenablog.com
nissin-geppox.hatenablog.com




 

DynamoDBのバックアップ

 
ここではDynamoDBのバックアップを作成しました。
 
また、作成したバックアップから復元を行いました。

 
以降、実際のコードと出力を示します。

 
まず、DynamoDBのclient()オブジェクトを作成しました。

入力

client = session.client("dynamodb")

 
次に、create_buckup()関数を用いてバックアップを作成しました。

入力

resp = client.create_backup(
    TableName=table_name,
    BackupName=table_name + "-Backup"
)
backup_arn = resp["BackupDetails"]["BackupArn"]
print(backup_arn)

出力

arn:aws:dynamodb:ap-northeast-1:093695845064:table/Cov19VaccinationDb-Cov19VaccinationTable07030B40-1T7E4C93IZMX3/backup/01653210567516-466055b6

この出力は作成したバックアップを指し示す固有のIDです。
 
続いて、作成したバックアップの情報を取得しました。

入力

resp = client.describe_backup(BackupArn=backup_arn)
pprint(resp["BackupDescription"]["BackupDetails"])

出力

{'BackupArn': 'arn:aws:dynamodb:ap-northeast-1:093695845064:table/Cov19VaccinationDb-Cov19VaccinationTable07030B40-1T7E4C93IZMX3/backup/01653210567516-466055b6',
 'BackupCreationDateTime': datetime.datetime(2022, 5, 22, 18, 9, 27, 516000, tzinfo=tzlocal()),
 'BackupName': 'Cov19VaccinationDb-Cov19VaccinationTable07030B40-1T7E4C93IZMX3-Backup',
 'BackupSizeBytes': 0,
 'BackupStatus': 'AVAILABLE',
 'BackupType': 'USER'}

この出力結果より、BuckupStatusがAVAILABLEとなっておりバックアップが使用可能なことを確認することができました。
 
次に、バックアップの復元を行うにあたって、本体のデータベースの要素の書き換えを行います。
 
ここではタラオフグタさんのageの属性を4に書き換えました。

入力

resp = table.update_item(
    Key={"username": "tarao_huguta", "dose": 1},
    UpdateExpression="SET age = :val1",
    ExpressionAttributeValues={
        ":val1": 4
    }
)

resp = table.get_item(
    Key={"username": "tarao_huguta", "dose": 1},
)
pprint(resp["Item"]["age"])

出力

Decimal('4')

出力結果より、正常にageの属性を書き換えることができました。
 
続いて、書き換えを行う前に作成したバックアップデータを用いて復元を行いました。

入力

resp = client.describe_table(TableName=table_name + "-restored")
pprint(resp["Table"]["TableStatus"])

出力

'ACTIVE'

この処理は数分時間が必要でした。処理中の出力は'CREATING'と表示され、処理が完了すると'ACTIVE'に遷移しました。
 
次に、復元したテーブルの情報を読み込みました。

入力

restored_table = ddb.Table(restored_table_name)
resp = restored_table.get_item(
    Key={"username": "tarao_huguta", "dose": 1},
)
pprint(resp["Item"]["age"])

出力

Decimal('3')

この出力結果より、書き換え前のage属性の値に戻っており、データの復元に成功したことを確認できました。
 
最後に復元されたテーブルと不要になったバックアップを削除しました。

入力

resp = restored_table.delete()
resp = client.delete_backup(BackupArn=backup_arn)


 

スタックの削除

 
スタックの削除は以下のコマンドより行うことができます。

$ cdk destroy