AWS DMS エラーログの削除プロセスを自動化し、レプリケーションインスタンスの状態が storage-full にならないようにするにはどうすればいいですか?
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 タスクエラーログを自動化するには、次の手順を実行します。
- Lambda コンソールを開き、先ほど作成した Lambda 関数を選択します。
- [デザイナー] で [トリガーを追加] をクリックします。
- ドロップダウンリストから [イベントウォッチ (Cloudwatch イベント] を選択します。
- [ルール] で、[新しいルール] を選択します。
- [ルール名] と [ルールの説明] を入力します。
- [スケジュール式] に、レート式を入力します。詳細については、「rate または cron を使ったスケジュール式」をご参照ください。
- [追加] を選択します。
**注:**このコードは変更し、最適化することができます。cronjob または Lambda スケジューラを使用して、このスクリプトが定期的に実行されるようにスケジュールすることも可能です。
関連するコンテンツ
- 質問済み 22日前lg...
- 質問済み 9ヶ月前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 6ヶ月前
- AWS公式更新しました 7ヶ月前
- AWS公式更新しました 6ヶ月前