为了避免复制实例上出现存储已满状态,应该如何自动执行 AWS DMS 错误日志删除流程?

2 分钟阅读
0

我想自动执行 AWS Database Migration Service(AWS DMS)错误日志删除流程,以便提高删除频率。

简述

如果您的 AWS DMS 错误日志占用了 DMS 复制实例的大量空间,则复制实例可能会进入存储已满状态。要解决此问题,请删除 DMS 任务的错误日志。

要删除 AWS DMS 任务的错误日志,请使用以下方法之一:

  • AWS DMS 控制台
  • AWS 命令行界面(AWS CLI)
  • API
  • Lambda 调度器

注意:可能导致存储已满状态的原因有很多。有关更多信息,请参阅为什么我的 AWS DMS 复制数据库实例状态为存储已满?

解决方案

**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅排查 AWS CLI 错误。此外,确保您使用的是最新版本的 AWS CLI

使用 AWS DMS 控制台

要手动删除您的 DMS 任务错误日志,请参阅如何开启、访问或删除 AWS DMS 的 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 参数修改任务设置。您可以使用 cron 作业安排 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.要创建 IAM policy,请使用以下 JSON。将示例任务 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. 从下拉列表中选择 EventBridge(Cloudwatch Events)
  4. 规则中,选择创建新规则
  5. 输入规则名称规则描述
  6. 计划表达式中,输入 rate 表达式。有关更多信息,请参阅使用 Rate 或 Cron 计划表达式
  7. 选择添加

**注意:**您可以更改和优化此代码。您也可以使用 cron 任务或 Lambda 调度器来安排此脚本定期运行。

AWS 官方
AWS 官方已更新 5 个月前
没有评论