我运行了 AWS DataSync 任务,但在相关 Amazon CloudWatch 日志组中找不到日志。我应该如何排查此问题?
解决方案
确认 CloudWatch Logs 具有允许 DataSync 上传日志的资源策略。请按照以下步骤查看 DataSync 代理在 AWS 区域中的 CloudWatch Logs 资源策略:
**注意:**如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
1. 使用 AWS 命令行界面(AWS CLI)运行 describe-resource-policies 命令:
aws logs describe-resource-policies --region us-east-1
注意:每个 AWS 账户在每个区域最多允许 10 个 CloudWatch Logs 资源策略。如果超过此限制,在创建资源策略时会收到一条错误消息。
2. 查看命令的输出。如果未设置资源策略,则输出类似于以下内容:
{
"resourcePolicies": []
}
**重要提示:**确认在正确的 AWS 区域中启用了 DataSync 资源策略。该策略必须与您正在使用的 DataSync 代理位于同一区域。
请按照以下步骤创建资源策略,该策略授予 DataSync 上传日志的权限:
1. 创建一个 JSON 文件,向 DataSync 授予上传日志的最低权限:
{
"Statement": [
{
"Sid": "DataSyncLogsToCloudWatchLogs",
"Effect": "Allow",
"Action": [
"logs:PutLogEvents",
"logs:CreateLogStream"
],
"Principal": {
"Service": "datasync.amazonaws.com"
},
"Resource": "*"
}
],
"Version": "2012-10-17"
}
您可以命名文件 policy.json。
2. 使用 AWS CLI 运行 put-resource-policy 命令以使用 JSON 文件创建资源策略:
aws logs put-resource-policy --policy-name trustDataSync --policy-document file://policy.json --region <Region>
**重要提示:**将 DataSync 代理的 AWS 区域设置为 --region 的值。
3. 运行 describe-resource-policies 命令,确认资源策略已创建:
aws logs describe-resource-policies --region <Region>
注意:每个 AWS 账户在每个区域最多允许 10 个 CloudWatch Logs 资源策略。如果超过此限制,在创建资源策略时会收到一条错误消息。使用 put-resource-policy 命令验证您是否已达到限制。
4. 创建资源策略后,命令输出类似于以下内容:
{
"resourcePolicies": [
{
"policyName": "trustDataSync",
"policyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"DataSyncLogsToCloudWatchLogs\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"datasync.amazonaws.com\"},\"Action\":[\"logs:PutLogEvents\",\"logs:CreateLogStream\"],\"Resource\":\"*\"}]}",
"lastUpdatedTime": 1577448776606
}
]
}
5. 要测试资源策略,请运行 DataSync 任务。任务运行后几分钟,请确认您看到来自相关 CloudWatch 日志组的日志流。
相关信息
管理您的 CloudWatch Logs 资源的访问权限概述