AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
为了避免复制实例上出现存储已满状态,我该如何自动执行 AWS DMS 错误日志删除流程?
我想自动执行 AWS Database Migration Service (AWS DMS) 错误日志删除流程,以便提高删除频率。
简短描述
如果您的 AWS DMS 错误日志占用了 DMS 复制实例的大量空间,则复制实例可能会进入 storage-full(存储已满)状态。要解决此问题,请删除 DMS 任务的错误日志。
要删除 AWS DMS 任务的错误日志,请使用以下方法之一:
- AWS DMS 控制台
- AWS 命令行界面 (AWS CLI)
- API
- Lambda 调度器
**注意:**可能导致 storage-full(存储已满)状态的原因有很多。有关更多信息,请参阅为什么我的 AWS DMS 复制数据库实例状态处于存储已满状态?
解决方法
**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,确保您使用的是最新版本的 AWS CLI。
使用 AWS DMS 控制台
要手动删除您的 DMS 任务错误日志,请参阅如何开启、访问或删除 AWS DMS 的 CloudWatch 日志?
使用 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. 在 Functions(函数)面板上,选择 Create function(创建函数)。
3. 输入 Function name(函数名称)。
4. 对于 Runtime(运行时),选择 python 3.8。
5. 对于 Change default execution role(更改默认执行角色),选择 Create a new role with basic Lambda permissions(创建具有基本 Lambda 权限的新角色)。记下 Lambda 创建的 AWS Identity and Access Management (IAM) 角色名称。
6. 选择 Create function(创建函数)。
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. 对于 Function code(函数代码),输入以下代码,然后选择 Deploy(部署):
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. 选择 Test(测试),然后使用默认模板输入 Event name(事件名称)。
13. 选择 Create(创建),然后再次选择 Test(测试)。
DMS 任务状态将更改为 Modifying(正在修改)。与此同时,系统会删除复制实例下的 DMS 任务错误日志。
使用 Lambda 调度器
要使用 Lambda 调度器自动删除 DMS 任务错误日志,请完成以下步骤:
- 打开 Lambda 控制台,然后选择您创建的 Lambda 函数。
- 对于 Designer(设计器),选择 Add trigger(添加触发器)。
- 从下拉列表中,选择 EventBridge (Cloudwatch Events)。
- 对于 Rule(规则),选择 Create a new rule(创建新规则)。
- 输入 Rule name(规则名称)和 Rule description(规则描述)。
- 在 Schedule expression(计划表达式)中,输入 rate 表达式。有关更多信息,请参阅使用 rate 或 cron 计划表达式。
- 选择 Add(添加)。
**注意:**您可以更改和优化此代码。您也可以使用 cron 作业或 Lambda 调度器来安排此脚本定期运行。
- 语言
- 中文 (简体)
