日々ブログ

当サイトは、アフィリエイトプログラムにより商品をご紹介しています

【プログラミング】boto3を使ってDynamoDBの一覧を取得してAWSアカウント間で複製する方法

仕事で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()