概要

開発中にDynamoDBを物理削除したい時がしばしば。例えば、CloudFormationを使用したデプロイを行っている際に、DynamoDBのデプロイは疎通したけど他のデプロイタスクで転けた場合に、次回のデプロイでDynamoDBのテーブルが既に存在するというエラーの時には物理削除をする必要があるだろうと思う。

ソースコード

// batch/deleteDynamoDBAllTable.js

const prefix = process.argv[2];

// ここに任意のテーブル名を追加
const tables = [
  `${prefix}-User`,
  `${prefix}-Article`,
  `${prefix}-ArticleCategory`
];

Promise.all(
  tables.map(async (tableName) => {
    console.log({ TableName: tableName });
    return ddb.deleteTable({ TableName: tableName }, function (err, data) {
      if (err) {
        return (
          'Unable to delete table. Error JSON:', JSON.stringify(err, null, 2)
        );
      }
      return (
        'Deleted table. Table description JSON:', JSON.stringify(data, null, 2)
      );
    });
  })
)
  .then(console.log)
  .catch(console.error);
$ node batch/deleteDynamoDBAllTable.js dev

既存でデータが存在していてそれを残したい場合は、かならずバックアップの上実行することを推奨します。