Amazon Web Services ブログ

AWS Database Migration Service (DMS) レプリケーションインスタンスをスケールする方法

AWS Database Migration Service (DMS) は、データベースを AWS に迅速かつセキュアに移行するために役立ちます。AWS DMS の移行プロセスには、レプリケーションインスタンス、ソースエンドポイントとターゲットエンドポイント、およびレプリケーションタスクの設定が含まれます。

レプリケーションインスタンスは、CPU、メモリ、ストレージ、I/O などのリソースを使用します。これらは、インスタンスのサイズやワークロードの種類によって制約を受ける可能性があります。

この記事では、必要に応じて AWS DMS レプリケーションインスタンスを自動的にスケールして、より高い負荷 (スケールアップ) を処理し、負荷が低いときにコストを削減 (スケールダウン) する方法を示します。

ユースケース

AWS DMS レプリケーションインスタンスをセットアップする際には、以下を分析します。

  • データベース内のテーブル数
  • それらのテーブルのデータ量
  • 同時レプリケーションタスク数
  • ソースデータベースへのトラフィック

AWS DMS レプリケーションインスタンスを適切なサイズにするには、適切なリソース使用率 (CPU) を予測できなければなりません。

動的サイジングソリューションの概要

こちらがアーキテクチャのダイアグラムです。

AWS DMS のベストプラクティスホワイトペーパーでは、適切なサイズの AWS DMS レプリケーションインスタンスを設定するいくつかの戦略について概説しています。 この記事では、AWS DMS レプリケーションインスタンスのサイズ設定において大きな柔軟性を実現する方法を説明します。

Amazon CloudWatch を使用して、AWS DMS レプリケーションインスタンスの CPU 使用率を監視します。CloudWatch のアラームしきい値に達すると、Amazon Simple Notification Service (Amazon SNS) 通知がトリガーされます。この通知は、レプリケーションインスタンスを変更する AWS Lambda 関数によって登録されています。また、この関数は、新しいレプリケーションインスタンスで実行されているタスクが正常に開始されたかどうかを示します。

AWS DMS はリージョンベースのサービスです。複数のリージョンを使用する場合は、各 AWS リージョンでアラームとリソースを別々に設定する必要があります。

開始方法と前提条件

このソリューションを開始するには、AWS アカウントが必要です。CloudFormation ユーザーガイドに従ってサインアップし、料金を調べてください

AWS CloudFormation コンソールにログインするには、CloudFormation ユーザーガイドの手順に従います。CloudFormation コンソールから選択することで CloudFormation テンプレートを使用して環境を設定するか、ブログをフォローして機能に対する理解を深めてください。

提供されている CloudFormation テンプレートを使用してデプロイされたものを含め、このブログ記事でデプロイされたリソースの一部は、使用される限りコストがかかります。不要なコストを避けるために、リソースを削除し、終わった作業をクリーンアップしてください。

ステップ 1: Amazon Simple Notification Service のトピックを作成する

このセクションでは、ステップ 5で作成する Lambda 関数が通知を発行する SNS トピックを作成します。通知は、レプリケーションインスタンスへの更新を示します。これはアーキテクチャダイアグラムの項目 7 で確認できます。

  • AWS マネジメントコンソールの [サービス] で、[SNS] を選択して SNS コンソールにアクセスし、ページの左側にある [トピック][新規トピックの作成] を順に選択します。
  • [トピック名][表示名] を入力して [トピックの作成] を選択します。例: トピック名: Replication_Instance_Update

インスタンスのサイズ変更通知を受け取るには、E メールアドレスでこのトピックを登録します。

ステップ 2: 別の Amazon Simple Notification Service (SNS) トピックを作成する

このセクションでは、Lambda 関数が登録する SNS トピックの作成について説明します。

  1. AWS マネジメントコンソールの [サービス] で、[SNS] を選択して SNS コンソールにアクセスし、ページの左側にある [トピック][新規トピックの作成] を順に選択します。
  2. [トピック名] と [表示名] を入力して [トピックの作成] を選択します。例: トピック名: dmsautoscaler
    表示名: dmsauto

ステップ 3: CloudWatch アラームを作成する

以下のステップでは、AWS DMS レプリケーションインスタンスの CPU 使用率を監視するように CloudWatch アラームを設定する方法を示しています。

  1. AWS マネジメントコンソールにサインインし、[サービス] で [CloudWatch] を選択して CloudWatch コンソールにアクセスし、ページの左側にある [アラーム] リンクと [アラームの作成] ボタンを順に選択します。
  2. [ブラウザメトリック][DMS][検索メトリック][CPUUtilization] を選択し、[レプリケーションごとのメトリック][次へ] を順に選択します。私のレプリケーションインスタンスの名前は test です。
  3. このインスタンスに対して CloudWatch アラームを設定することができます。以下の図に示すこの例では、次の設定でアラームを設定し、[アラームの作成] を選択しました。名前: dms_cpu_high 説明: DMS インスタンスによる高い CPU 使用率 CPUUtilization が次の場合は常に : >= 80: 5 データポイント 期間 = 1 MinuteStatistic = 平均
  4. 同様に、次の設定を使用して CPUUtilization が低い場合のアラームをもう 1 つ作成し、[アラームの作成] を選択します。名前: dms_cpu_low 説明: DMS インスタンスによる低い CPU 使用率 CPUUtilization が次の場合は常に: <= 40: 5 データポイント 期間 = 1 MinuteStatistic = 平均

ステップ 4: Lambda 関数の IAM ロールを作成する

このセクションでは、Lambda 関数に必要な権限を設定する方法を説明します。これらの操作をサポートするためにカスタムの AWS Identity and Access Management (IAM) ポリシーとロールを設定し、次のセクションで作成する Lambda 関数に割り当てます。AWS マネジメントコンソールの [サービス] で、[IAM] を選択して IAM コンソールにアクセスします。

  1. [ポリシー] で、リポジトリ https://github.com/aws-samples/aws-dms-autoscaling/lambda_policy.json からの権限を使用してポリシーを作成します。これにより、Lambda 関数に以下の権限を与えます。
    1. DMS レプリケーションインスタンスを変更する
    2. CloudWatch Logs に入力する
    3. CloudWatch イベントルールを作成して使用する
    4. SNS トピックに公開する
  2. [ポリシーの確認] で、ポリシーの [名前] と [説明] を入力します。例: 私は dmsautoscaler という名前を付けました。
  3. Lambda 関数のロールを作成します。IAM コンソールで [ロール] を選択し、次に [ロールの作成] を選択します。
    1. サービスのリストから [Lambda] を選択し、[次へ: 権限] をクリックします。
    2. 以前に作成したポリシー、つまり [dmsautoscaler] の横にあるボックスを選択し、[次へ: 確認] をクリックします。
    3. ロールに名前を付けて説明を入力し、[ロールの作成] を選択します。この例では、[dmsautoscalerRole] という名前を付けました。

ステップ5: Lambda 関数を作成する

このセクションでは、先ほど作成した SNS トピック [dmsautoscalerRole] を登録する、新しい Lambda 関数を作成します。レプリケーションインスタンスの CPU 使用率が CloudWatch アラームに設定されているしきい値に達すると、この Lambda 関数によって登録されている SNS 通知がトリガーされます。この関数は AWS DMS レプリケーションインスタンスをスケールします。自動スケーリング設定は、JSON ファイル (Amazon が所有する S3 バケット (https://s3.amazonaws.com/aws-database-

blog/artifacts/auto_scale_DMS_replication_instance/instance_types.json) に保存されている instance_types.json) を介して管理されます。ただし、レプリケーションインスタンスをスケールする方法を制御したい場合は、Amazon S3 バケットからファイルをダウンロードして、このサンプルに示すように変更することができます。

"dms.t2.micro": {
        "cpu_high": "dms.t2.small",
        "cpu_low": "no_action"
    },
    "dms.t2.small": {
        "cpu_high": "dms.t2.medium",
        "cpu_low": "dms.t2.micro"
    },

以下のいずれかのインスタンスタイプを自由に変更して、お使いの Amazon S3 バケットに保存します。環境変数を介して Lambda 関数にポイントします。

次のレプリケーションインスタンスタイプが利用可能な場合、Lambda 関数はそれを使って既存の DMS レプリケーションインスタンスを修正します。さらに、毎分 Lambda 関数を呼び出して AWS DMS レプリケーションインスタンスをポーリングする Amazon CloudWatch のスケジュール済みイベントを作成します。 これにより、レプリケーションインスタンスとそのタスクのステータスを確認できます。

  1. AWS マネジメントコンソールの [サービス] で、[Lambda] を選択して Lambda コンソールにアクセスします。
  2. ダッシュボードから [関数の作成] を選択するか、直接 [関数] ページに移動した場合は、右上の端にある [関数の作成] ボタンを選択します。
  3. [関数の作成] ページで
    1. [Author from scratch (一から作成)] を選択します。
    2. 関数に名前を付けます。私は AutoscaleDMSReplicationInstance を選択しました
    3. 私が書いた Lambda 関数は Python 3.7 と互換性があるため、[ランタイム] ドロップダウンで [Python 3.7] を選択します
    4. [ロール][既存のロールを選択] を選択し、前のセクションで作成したロール [dmsautoscalerRole][関数の作成] を順に選択します
    5. 次に、[トリガーの追加] セクションで [SNS] を選択して SNS トリガーを追加します。SNS ボックスが Lambda 関数の左側に接続されて表示されます。そこに設定が必要であることを示すメモがあります。 ステップ 2 で作成した SNS トピック、[dmsautoscaler] を追加します。
  4. [デザイナー] セクションまでスクロールして、Lambda 関数の名前 [AutoscaleDMSReplicationInstance] を選択します。https://github.com/aws-samples/aws-dms-autoscaling/dms.py から表示される [関数コード] セクションに Python コードを貼り付けます。
  5. [環境変数] までスクロールして、以下の環境変数を作成します。
    Key デフォルト値 説明
    1 BUCKET_NAME  aws-database-blog Lambda 関数はここから設定ファイルを選択します。
    2 KEY_NAME

     artifacts/auto_scale_DMS_

    replication_instance/insta

    nce_types.json

    これは設定ファイルの名前です。
    3 MODIFICATION_TIMEOUT 1200 Lambda 関数が、レプリケーションインスタンスの変更がタイムアウトしたことをユーザーに通知するまでの合計タイムアウト値。
    4 TOPIC_ARN

    arn:aws:sns:us-west-

    2:<<AccountId>>:Replicati

    on_Instance_Update

    Replication_Instance_Update トピックの SNS ARN。
  6. [基本設定] で、[タイムアウト]30 秒に設定します。
  7. 他のものはすべてそのままにして、上にある [保存] を選択します。

結論

この記事では、CloudWatch アラームと Lambda 関数を組み合わせて AWS DMS レプリケーションインスタンスの使用率を監視する方法を説明しました。インスタンスを適切なサイズに自動的にスケールすることが、いかに簡単かをお見せしました。

この記事に質問やご意見がある場合は、本ページのコメント欄に記入してください。

著者について


Ballu Singh は AWS のプリンシパルソリューションアーキテクトです。サンフランシスコのベイエリアに住んでおり、お客様が AWS でアプリケーションを設計し最適化するサポートを行っています。余暇には、彼は読書、家族との時間を楽しんでいます。

 

 

 

 

Prabhat Sharma は AWS のソリューションアーキテクトです。彼はサンフランシスコを拠点とし、サンフランシスコとシリコンバレーのお客様が AWS で大規模アプリケーションを設計および構築するように支援しています。また、AWS、コンテナー、および機械学習の分野で専門知識を持っています。彼は、息子と妻と過ごす時間を大切にしています。

 

 

 

 

Photo of ArunArun Thiagarajanは アマゾン ウェブ サービスの AWS DMS と AWS SCT チームのデータベースエンジニアです。彼はデータベースの移行に関する課題に取り組み、お客様と緊密に協力して AWS DMS の真の可能性を実感できるようにサポートしています。AWS DMS と AWS SCT を使用して、何百ものデータベースを AWS クラウドに移行するのを手伝いました。