Amazon Web Services ブログ

AWS DMS タスクのための AWS CloudFormation テンプレート作成の自動化

前回の記事、「Microsoft Excel を使用した AWS DMS タスクのための AWS CloudFormation テンプレートの作成」をさらに詳しく説明するこの記事では、データベース移行を迅速化することができる、同じツールの拡張機能を取り上げます。

この機能を実証するため、Python で記述された小型のコマンドラインツールをご紹介します。このツールは、入力としての使用するために、移行されるテーブルの名前、AWS DMS エンドポイントの Amazon リソースネーム (ARN)、および DMS レプリケーションインスタンスが含まれた CSV ファイルを取り込みます。正常に実行されたら、このツールは、必要な DMS タスクの AWS CloudFormation テンプレートを出力として生成します。ただし、このツールは DMS エンドポイントとレプリケーションインスタンスの作成には対応しません。

前提条件

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

  • Python (バージョン 2.7 以降)。Python 2.7.15 をインストールするには、Python.org のダウンロードページをご覧ください。
  • DMS のソースエンドポイントとターゲットエンドポイント、および DMS レプリケーションインスタンス。

CSV テンプレートの作成

最初に、作成する DMS タスクに関するすべての情報を CSV ファイルに取り込みます。以下は、DMS タスクを作成するために必要な項目のリストです。

  • DMS タスクの名前
  • ソースエンドポイント
  • ターゲットエンドポイント
  • 使用するレプリケーションインスタンス
  • 移行するテーブルのスキーマ名
  • 移行するテーブルの名前
  • 除外する列
  • 列フィルターのための固有のキー値範囲 (テーブルレベルでのデータのフィルタリングが必要な場合)

この情報を、以下の列がある CSV テンプレートとしてツールに提供します。これは、含めることができる列の完全なリストではありません。

  • selectionType – 選択ルールに従うタスクのためのテーブルの Include/Exclude 値。
  • taskName – タスクの名前。この値が一意である必要はありません。
  • taskDescription – DMS タスクの説明。
  • schemaName – 現在の行によって示される DMS タスクのテーブルが属するソースデータベーススキーマの名前。
  • tableName – 包含または除外するテーブル。すべてのテーブルを包含するには、% を使用します。
  • taskPrepMode – タスクを開始する前に、DMS がターゲットデータベースで実行するアクション。値には以下が含まれます。
    • DO_NOTHING
    • DROP_AND_CREATE
    • TRUNCATE_BEFORE_LOAD
  • sourceARN – ソースエンドポイントの ARN。
  • targetARN – ターゲットエンドポイントの ARN。
  • repARN – レプリケーションインスタンスの ARN。

詳細については、「タスクの作成」および「テーブルマッピングを使用して、タスクの設定を指定する」を参照してください。必要な列の詳細については、DMS タスクの CloudFormation テンプレートを参照してください。

このツールの対象となる設定

このツールは、以下の DMS タスク設定と、各設定に対応する CSV ファイルの列名を対象としています。

設定 列 参照ドキュメント
検証を有効化する validation 詳細については、「データ検証タスクの設定」を参照してください。
LOB を有効化する lobMode、fullLob、および chunkSize 詳細については、「ターゲットメタデータのタスク設定」を参照してください。
列フィルター filterColumn、filterCondition、startValue、および endValue 詳細については、「テーブルマッピングを使用して、タスクの設定を指定する」を参照してください。
CDC cdcStartTime and batchApplyEnabled 詳細については、「変更処理のチューニング設定」を参照してください。
DDL 変更の処理を変更する changeProcessingDDLHandlingPolicy 詳細については、「変更処理の DDL 処理のタスク設定」を参照してください。
テーブル設定を制御する controlSchema、enableHistoryTable、enableSuspendTable、および enableStatusTable 詳細については、「制御テーブルタスク設定」を参照してください。
設定の調整 maxSubTasks 詳細については、「ターゲットメタデータのタスク設定」を参照してください。

CloudFormation テンプレートの生成

DMS タスク用の CloudFormation テンプレートを生成するには、DMS task CloudFormation template リポジトリからアーカイブ (.zip) ファイルとしてツールをダウンロードし、ダウンロードしたファイルをフォルダに展開して、以下のステップを実行してください。

  1. バージョンが 2.7 以降の Python がインストールされていることを確認する。
  2. macOSではターミナルウィンドウ、または Microsoft Windows ではコマンドウィンドウを開き、展開されたツールがあるフォルダに移動する。
  3. ツールを実行する。

ダウンロードされたツールには、7 つの DMS タスクの CloudFormation テンプレートを生成する、dms-input.csv という名前のサンプル CSV テンプレートが同梱されています。

ツールの実行

ツールを実行するときに必須となる引数は 2 つだけです。

path – CloudFormation テンプレートを生成するための DMS タスクの詳細が含まれた Excel テンプレートの場所。

type – この引数は、以下の値のいずれかを受け入れます。

  • CDC – 作成する DMS タスクが変更データキャプチャモード限定の場合。
  • Full-load – 作成する DMS タスクがフルロードモード限定の場合。
  • Full-load-and-CDC – 作成する DMS タスクがフルロード用で、その後 CDC を実行する場合。

以下のコマンドに CSV テンプレートへのパスを入力してから、これを使用して DMS タスクテンプレートを生成します。

python cf-generator.py --path [PATH_OF_THE_ CSV_FILE_TEMPLATE] --type [cdc | full-load | full-load-and-cdc]

サンプルの dms-input.json at ./input directory を見つけます。

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

user_name$ python cf-generator.py --path input/dms-input.csv --type full-load
Created Template for dms-input : <path>/output/dms-input.json
user_name$

提供された dms-input.csv でサンプルコマンドを実行したら、以下のような応答出力がターミナルに表示されます。

上記の例は、提供されたサンプル CSV テンプレートを使ってツールを実行する方法を示すもので、7 つの DMS タスクのための CloudFormation テンプレートが生成されます。ツールは、生成された CloudFormation テンプレートを「output」という名前のフォルダに置きます。

このツールには、スキーマ、テーブル、およびそれらの列の名前が、生成先エンドポイントで小文字に変換されるという制限があります。

まとめ

この記事で説明したツールは、DMS タスク用の CloudFormation テンプレートの作成に費やされる時間を短縮することで、複数のデータベース移行チームの生産性を向上させました。このツールが、DMS を使用したデータベース移行に役立ちますように。

 


著者について

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

 

 

 

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