仕事でboto3を使用して、DynamoDBの一覧を取得する機会があったので、個人的なメモ。
boto3とは
boto3は、python経由でAWSのリソースを操作するためのライブラリです。
アクセスキーを発行して、それを実行時に埋め込んでやることで、セキュリティがガチガチのAWSにもアクセスできるというわけです。
逆に言うと、このアクセスキーが漏洩してしまうと多大な被害を受けることになるので気をつけたいところです。
githubのパブリックリポジトリにあげてしまった日には、30分程度で被害に会うそうな。
ネット社会は恐ろしい。
とりあえず、インストールは下記のコマンドで完了します。
pip install boto3
テーブル一覧を取得する関数
使い方は簡単で、tables.all()を実行すると自分のAWSが所有しているDynamoDBの一覧を取得することが可能です。 テーブル名をそのままコマンドライン上に表示したい場合は下記で実行可能です。
import boto3 target_dynamodb = boto3.resource('dynamodb', aws_access_key_id='**********' aws_secret_access_kley='***********', region_name='ap-northeast-1') for target_table in target_dynamodb.tables.all(): print(target_table.name)
AWS アカウント間で複製する方法
上の内容をもとに、テーブルの名前だけで無くて、スキーマや料金体系も取得できるので複製したい場合は、下のような形になります。
ファイル全体を書いてみました。
初期化関数にアクセス情報を入れるのが個人的な書き方だったりします。
import boto3 class dynamodvOperate: def __init__(self,): # 移行元のテーブルの情報 self.root_dynamodb = boto3.resource('dynamodb', aws_access_key_id = '************', aws_secret_access_key = '***************', region_name = 'ap-northeast-1' ) # 移行先のテーブルの情報 self.target_dynamodb = boto3.resource('dynamodb', aws_access_key_id = '************', aws_secret_access_key = '***************', region_name = 'ap-northeast-1' ) return def copy(self,): # tableの数だけループ for table in self.root_dynamodb.tables.all(): # テーブルの値を取得してテーブルを作成 self.target_dynamodb.create_table( TableName=table.name, KeySchema=table.key_schema, AttributeDefinitions=table.attribute_definitions, BillingMode='PAY_PER_REQUEST' ) if __name__ == '__main__': DO = dynamodvOperate() dynamodvOperate.copy()