Amazon Web Services ブログ

Microsoft Excel を使用した AWS DMS タスクのための AWS CloudFormation テンプレートの作成

このブログ記事では、AWS Database Migration Service (AWS DMS) タスクのための AWS CloudFormation テンプレートの作成を自動化するツールについてお話します。DMS タスクのための CloudFormation テンプレートの作成方法をお探しで、CloudFormation に関する知識をお持ちでない場合は、ぜひこの記事をお読みください。

AWS DMS が関与するデータベース移行アクティビティでは、DMS タスクをプロビジョニングするために AWS CloudFormation テンプレートを作成する共通のタスクに何度も遭遇します。AWS CloudFormation テンプレートの作成には、JSON または YAML のどちらかで CloudFormation テンプレートを記述するための知識が必要です。

ここで、嬉しいお知らせです! CloudFormation テンプレートの書き方を知る必要はまったくありません。知らなくても AWS DMS タスクをプロビジョニングするための CloudFormation テンプレートを作成することができるのです。必要なのは、Microsoft Excel に関する基本的な知識と、ターミナルまたはコマンドウィンドウを使用して Python スクリプトを実行する方法だけです。

この記事では、Python で記述された小型のコマンドラインツールをご紹介します。このツールには、移行されるテーブルの名前、DMS エンドポイントの Amazon リソースネーム (ARN)、および入力として使用される DMS レプリケーションインスタンスが記載された Microsoft Excel ワークブックが必要です。ツールはその出力として、必要な DMS タスクのための CloudFormation テンプレートを生成します。ただし、このツールは DMS エンドポイントとレプリケーションインスタンスの作成には対応しません。

前提条件および仮定

このツールを使用するには、以下が必要となります。

  • お使いのマシンにインストールされた 2016 以降の Microsoft Excel。
  • Python (バージョン 2.7 以降)。Python 2.7.15 をインストールするには、Python.org のダウンロードページにアクセスしてください。
  • xlrd Python モジュール。これがすでにインストールされていない場合は、コマンド pip install xlrd で、コマンドプロンプトまたはターミナルから pip を使ってインストールしてください。
  • DMS のソースエンドポイントとターゲットエンドポイントの両方、および DMS レプリケーションインスタンスがすでに作成されていることを確認してください。

ツールについて

作成する必要がある DMS タスクについてのすべての情報が、Excel テンプレートに取り込まれる必要があります。Excel テンプレートの詳細を説明する前に、DMS タスクを作成するために必要なアイテムのリストを見てみましょう。

DMS タスクを作成するために必要とされる基本的な情報は以下のとおりです。

  • DMS タスクの名前
  • ソースエンドポイント
  • ターゲットエンドポイント
  • 使用するレプリケーションインスタンス
  • 移行するテーブルのスキーマ名
  • 移行するテーブルの名前

これらの情報を Excel テンプレートとしてツールに提供します。

Excel テンプレートについて

ツールへの入力として提供する Excel テンプレートには、DMS-Tasks および DMS-Tags という名前の 2 つのワークシートが含まれている必要があります。各ワークシートの他の部分は、作成する予定の CloudFormation テンプレートの対象 DMS タスクを表します。

DMS-Tasks シート

DMS-Tasks シートには、ツールが生成する DMS タスクについての情報が含まれています。例えば、2 つの DMS タスクのために CloudFormation テンプレートを生成する予定の場合、このシートには 2 つの行が存在します。各 DMS タスクに対して 1 つの行があり、これには、以下で説明するとおり、各列に記述されている情報が保持されます。

以下で説明するとおり、このシートには、DMS タスクの詳細、つまり DMS エンドポイント、レプリケーションインスタンスなどを、シートの指定列に記入します。

属性名 説明
Name DMS タスクの名前。この名前は、DMS タスクの中で一意のものにする必要があり、重複する名前は使えません。
Description DMS タスクの説明。
SourceEndPointARN DMS ソースエンドポイントの ARN。
TargetEndPointARN DMS ターゲットエンドポイントの ARN。
RIARN DMS レプリケーションインスタンスの ARN。
CDCStartTime 変更データキャプチャの開始時間。この属性は、タスク移行モードが CDC である場合に必須です。フルロードモードの場合、ツールはこの属性値を無視します。
Schema Name 現在の行によって示される DMS タスクのテーブルが属するソースデータベーススキーマの名前。

DMS-Tags シート

DMS-Tags シートでは、ツールが作成する CloudFormation テンプレートの対象 DMS タスクにアタッチする AWS リソースタグを詳述します。提供されている Excel テンプレートのサンプルにあるように、以下のテーブルは Resource OwnerEnvironmentType の 2 つのタグを挙げています。テーブルには、DMS-Tasks シートで定義されたすべての DMS タスクに関連付けられる、これらのタグに提供された値も示しています。

タグ名 タグ値
Resource Owner dev@aws.com
EnvironmentType Development

DMS タスクシート

この時点で、DMS タスクのメタデータが含まれる Excel テンプレートの 2 枚のシート、DMS-Tasks および DMS-Tags ができていると思います。具体的に言うと、これらにはツールが CloudFormation テンプレートを作成する対象タスクのメタデータが含まれています。

DMS タスクのために作成する CloudFormation テンプレートが N 個ある場合、Excel には N + 2 枚のワークシートがあるはずです。つまり、各 DMS タスクにワークシート 1 枚つずと、すべてのタスクのメタデータに 2 枚のワークシート (DMS-Tasks および DMS-Tags) が必要です。

各 DMS タスクのためのワークシートの名前は、DMS-Tasks シートの名前の列にある名前と一致しなければなりません。

DMS タスクシートの詳細

各 DMS タスクの詳細シートの名前は、DMS-Tasks シートの名前の列にある名前と一致する必要があります。

DMS タスクの一部となるすべてのテーブルがこのシートにリストされていなくてはなりません。このシートには、将来の開発のために維持される Sno 列以外に、以下で説明する Table NameExcluded Columns の 2 つの列があります。

状況によっては、特定の列を移行しない必要がある場合もあります。これらの列は、コンマ区切りの列名として、シートの Excluded Columns 列に入力してください。

列の名前 列の値
Table Name DMS タスクの一部となるテーブルの名前。
Excluded Columns フルロードまたは CDC モードにおいて、DMS によって除外されるべき列があるテーブルの列名。ここに何も記述されていない場合、すべての列がデータ移行用であると見なされます。列名はコンマで区切る必要があります。

DMS CloudFormation テンプレートの生成

DMS タスクのための CloudFormation テンプレートを生成するには、ツールをこの Amazon GitHub Repository からアーカイブファイル (.zip) 形式でダウンロードし、ダウンロードしたアーカイブファイルをフォルダに展開してから、以下の手順を実行してください。

  1. バージョンが 2.7 以降の Python がインストールされていることを確認する。
  2. xlrd Python モジュールがインストールされていることを確認する。インストールされていない場合は、コマンド pip install xlrd で、pip を使ってインストールしてください。
  3. Mac OS ではターミナルウィンドウ、または Microsoft Windows ではコマンドウィンドウを開き、ツールが展開されたフォルダに移動する。
  4. ツールを実行する。

ダウンロードされたツールには、2 つの DMS タスクの CloudFormation テンプレート、DMS-CHILD および DMS-PARENT を生成するサンプルの Excel テンプレートが同梱されています。

ツールの実行

ツールを実行するときに必須となる引数は 2 つだけです。これらは path と type で、詳細は以下のとおりです。

引数名 引数値
path CloudFormation テンプレートを生成する必要がある対象 DMS タスクの詳細が含まれた Excel テンプレートの場所。
type

この引数は 3 つの異なる値を受け入れます。

·         cdc – 作成する DMS タスクが変更データキャプチャモード限定の場合

·         full-load – 作成する DMS タスクがフルロードモード限定の場合

·         full-load-and-cdc – 作成する DMS タスクがフルロード、その後 CDC を実行する場合

以下のコマンドを使用して DMS タスクテンプレートを生成します (Excel テンプレートへのパスを入力)。

python create_task.py --path [PATH_OF_THE_ EXCEL_TEMPLATE] --type [cdc | full-load | full-load-and-cdc]

以下は、ツールの実行例です。

user_name$ python create_task.py --path dms-tasks.xlsx --type cdc
Created Task Template for DMS-CHILD
Created Task Template for DMS-PARENT
user_name$

上記の例は、提供された Excel テンプレートによるツールの実行を表すもので、2 つの DMS タスクのための CloudFormation テンプレートが生成されます。ツールはそれらを output という名前のフォルダに置きます。このフォルダは、主要ツールのアーカイブが抽出されるサブフォルダのひとつです。

制限

このツールには以下の制限があります。

  • スキーマ、テーブル、およびそれらの列の名前は、生成先エンドポイントで小文字に変換されます。
  • このツールは現在、各 DMS タスクごとに 1 つのスキーマしかサポートしません。

まとめ

あるお客様の 500 以上のテーブルを持つデータベースの移行中、私たちは、ひとつの DMS タスクから別の DMS タスクへのテーブルの配置を変えることが共通の作業になっていることに気付きました。数個のテーブル内にあるパーティションの数が、開発環境と比べて本番/ステージング環境では大幅に増えることが明らかになったことで、この事実が分かりました。このツールを作成するアイデアは、タスクの配置を変える必要性から生まれたものです。

このツールは、DMS タスクのための CloudFormation テンプレートを作成するために必要な時間を大幅に短縮します。

 


著者について

Ismail Shaik は、AWS プロフェッショナルサービスのコンサルタントです。Ismail は、お客様に可能な限り最高の経験をお届けするために、AWS DMS、SCT、Aurora PostgreSQL、および Microsoft Workloads 関連の AWS のサービスを担当しています。

 

 

 

Venkata Naveen Koppula は AWS プロフェッショナルサービスのアソシエイトコンサルタントです。Venkata は、お客様に可能な限り最高の経験をお届けするために、AWS DMS、SCT、および Aurora PostgreSQL を担当しています。