AWS DMS エラーログの削除プロセスを自動化し、レプリケーションインスタンスの状態が storage-full にならないようにするにはどうすればいいですか?

所要時間2分
0

AWS Database Migration Service (AWS DMS) エラーログの削除プロセスを自動化し、より頻繁に削除を行いたいと考えています。

簡単な説明

DMS レプリケーションインスタンス内でAWS DMS エラーログが容量を多く消費する場合、レプリケーションインスタンスの状態が storage-full となってしまう可能性があります。DMS タスクの DMS タスクエラーログを削除すると、この問題を解決することができます。

AWS DMS タスクのエラーログの削除は、次のいずれかを使用して行います。

  • AWS DMS コンソール
  • AWS コマンドラインインターフェイス (AWS CLI)
  • API
  • Lambda スケジューラー

**注:**storage-ful の状態になってしまうのはいくつかの原因があります。詳細については、「 AWS DMS レプリケーション DB インスタンスがストレージ不足のステータスなのはなぜですか?」をご参照ください。

解決策

**注:**AWS CLI のコマンド実行時にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」をご参照ください。また、AWS CLI の最新バージョンを使用しているかどうかをご確認ください。

AWS DMS コンソールを使用する

DMS タスクのエラーログを手動で削除するには、「AWS DMS の Amazon CloudWatch Logs を有効化、アクセス、削除する方法を教えてください」をご参照ください。

AWS CLI を使用する

AWS CLI を使用してタスク設定を変更し、DMS タスクログを削除するには、modify-replication-task コマンドを実行します。

aws dms modify-replication-task --replication-task-arn <DMS task ARN> --replication-task-settings '{"Logging": { "DeleteTaskLogs": true}}'

このコマンドは、"DeleteTaskLogs": true パラメーターを使用してタスクを変更します。このパラメーターを使用してタスク設定を追加すると、タスクのすべてのログがレプリケーションインスタンスから削除されます。ログが削除されると、タスク設定によって "DeleteTaskLogs": true パラメーターが削除されます。このコマンドを実行した後、ログがレプリケーションインスタンスから削除されているかどうかを確認します。

"DeleteTaskLogs": true パラメーターでタスク設定を変更すれば、ログの定期的な削除が可能となります。cronjob を使用して、modify-replication-task を定期的に実行するようにスケジュールすることができます。

API を使用する

AWS DMS ログを自動的に削除するには、スクリプトを作成し、毎日、または必要な頻度で実行されるようにします。次の例では、AWS Lambda と Python のコードを使用して、指定されたタスク ARN のタスクエラーログの削除を自動化します。

Lambda 関数のセットアップ

Lambda 関数をセットアップするには、次の手順を実行します。

1.    Lambda コンソールを開き、DMS リソースが含まれる AWS リージョンを選択します。

2.    [関数] パネルで、[関数の作成] を選択します。

3.    [関数名] に名前を入力します。

4.    [ランタイム] には、[Python 3.8] を選択します。

5.    [デフォルトの実行ロールの変更] で、[基本的な Lambda アクセス権限で新しいロールを作成] を選択します。Lambda が作成する AWS Identity and Access Management (IAM) ロール名を書き留めておきます。

6.    [関数を作成] を選択します。

7.    AWS IAM コンソールを開き、Lambda 関数が作成した IAM ロールを開きます。

8.    次の JSON を使用して、IAM ポリシーを作成します。サンプルタスク ARN を自分のタスク ARN に置き換えてください。

{    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dms:ModifyReplicationTask"
            ],
            "Resource": "arn:aws:dms:us-east-1:1234567890:task:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
        }
    ]
}

9.    Lambda 関数が作成したロールに新しく作成されたポリシーをアタッチします。

10.    Lambda コンソールを開き、先ほど作成した Lambda 関数を選択します。

11.    [関数コード] に、次のコードを入力してから、[デプロイ] をクリックします。

import boto3import json
client = boto3.client('dms')
def lambda_handler(event, context):
    # specific task ARN
    taskarn = 'arn:aws:dms:us-east-1:1234567890:task:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
    # modify the DMS task
    response = client.modify_replication_task(
        ReplicationTaskArn=taskarn,
        ReplicationTaskSettings='{"Logging": { "DeleteTaskLogs": true}}'
    )

12.    [テスト] をクリックしてから、既定のテンプレートを使用して [イベント名] を入力します。

13.    [作成] をクリックしてから、もう一度 [テスト] を選択します。

DMS タスクのステータスが 変更中 に変わります。同時に、レプリケーションインスタンスの DMS タスクエラーログは削除されます。

Lambda スケジューラーを使用する

Lambda スケジューラーを使用して DMS タスクエラーログを自動化するには、次の手順を実行します。

  1. Lambda コンソールを開き、先ほど作成した Lambda 関数を選択します。
  2. [デザイナー][トリガーを追加] をクリックします。
  3. ドロップダウンリストから [イベントウォッチ (Cloudwatch イベント] を選択します。
  4. [ルール] で、[新しいルール] を選択します。
  5. [ルール名][ルールの説明] を入力します。
  6. [スケジュール式] に、レート式を入力します。詳細については、「rate または cron を使ったスケジュール式」をご参照ください。
  7. [追加] を選択します。

**注:**このコードは変更し、最適化することができます。cronjob または Lambda スケジューラを使用して、このスクリプトが定期的に実行されるようにスケジュールすることも可能です。

AWS公式
AWS公式更新しました 7ヶ月前