0
0

More than 3 years have passed since last update.

DynamoDBの定義をコピーして新テーブルを作る(複数個)

Posted at

AWSのDynamoDB、使っていますか?

今回は・・・
わけあってもともとあるテーブルたちの名前を一部リネームしたものをそのまま複製したい!
(中身は空で良い)
となり、手で1つずつ定義を設定して作るのは面倒なので、PHPでさくっとやってみました。

●流れ●
① AWS SDKを使えるようにする
 https://github.com/masayuki0812/dynamodb-php-wrapper
② listTablesでDynamoの一覧を取得
③ ②をforeachで回し、各テーブルの定義をdescribeTableで取得
④ リネームしたテーブル名と取得した定義を使ってcreateTable

●実際のコード●
※FuelPHPで実装しています
※SDKの処理を取得するために、一度Modelを通していますがお好みで・・・

        // Dynamoテーブルのテーブル名を一覧で取得
        $data = Model_Dynamo_Base::listTables(); // いい感じの場所でsdkの「listTables」を呼び出してください
        foreach ($data['TableNames'] as $index => $base_tablename) {
        // リネーム処理
                $tabelname = str_replace(test,test2,$base_tablename);
                // 1テーブルごとにテーブル定義を取得
                $base_table_data = Model_Dynamo_Base::describeTable($base_tablename); // いい感じの場所でsdkの「describeTable」を呼び出してください
                // 作成したいテーブル名に変更
                $base_table_data['Table']['TableName'] = $tabelname;
                // キャパを読み取りも書き込みも調整
                $base_table_data['Table']['ProvisionedThroughput']['ReadCapacityUnits'] = 1;
                $base_table_data['Table']['ProvisionedThroughput']['WriteCapacityUnits'] = 1;
                $params = $base_table_data['Table'];
                // テーブル作成
                $bbb = Model_Dynamo_Base::createTable($params); // いい感じの場所でsdkの「createTable」を呼び出してください
            }
        }

dynamodb-php-wrapperに追記する形で作っています

    public function listTables($ExclusiveStartTableName = null, $limit = null)
    {
        $params = array();
        if (!is_null($ExclusiveStartTableName)) {
            $params['ExclusiveStartTableName'] = $ExclusiveStartTableName;
        }
        if (!is_null($limit)) {
            $params['limit'] = $limit;
        }
        $response = $this->client->listTables($params);
        return $response;
    }

    public function describeTable($tableName)
    {
        $params = array();
        if (!is_null($tableName)) {
            $params['TableName'] = $tableName;
        }
        $response = $this->client->describeTable($params);
        return $response;
    }

    public function createTable($param) {
        $this->client->createTable($param);
    }

こんな感じです。
あまり参考資料がなかったので苦戦しましたが、出来てしまうとかなり楽でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0