正是按照本页上的分步说明,我正在尝试将其中一个 DynamoDB 表的内容导出到 S3 存储桶。我完全按照说明创建了一个管道,但它无法运行。它似乎无法识别/运行 EC2 资源来进行导出。当我通过 AWS 控制台访问 EMR 时,我看到如下条目:
Cluster: df-0..._@EmrClusterForBackup_2015-03-06T00:33:04Terminated with errorsEMR service role arn:aws:iam::...:role/DataPipelineDefaultRole is invalid
为什么我会收到此消息?我是否需要设置/配置其他内容才能运行管道?
更新:在AWS控制台的IAM->Roles
下,我看到了DataPipelineDefaultResourceRole
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"s3:List*",
"s3:Put*",
"s3:Get*",
"s3:DeleteObject",
"dynamodb:DescribeTable",
"dynamodb:Scan",
"dynamodb:Query",
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:UpdateTable",
"rds:DescribeDBInstances",
"rds:DescribeDBSecurityGroups",
"redshift:DescribeClusters",
"redshift:DescribeClusterSecurityGroups",
"cloudwatch:PutMetricData",
"datapipeline:PollForTask",
"datapipeline:ReportTaskProgress",
"datapipeline:SetTaskStatus",
"datapipeline:PollForTask",
"datapipeline:ReportTaskRunnerHeartbeat"
],
"Resource": ["*"]
}]
}
这对DataPipelineDefaultRole
:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"s3:List*",
"s3:Put*",
"s3:Get*",
"s3:DeleteObject",
"dynamodb:DescribeTable",
"dynamodb:Scan",
"dynamodb:Query",
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:UpdateTable",
"ec2:DescribeInstances",
"ec2:DescribeSecurityGroups",
"ec2:RunInstances",
"ec2:CreateTags",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:TerminateInstances",
"elasticmapreduce:*",
"rds:DescribeDBInstances",
"rds:DescribeDBSecurityGroups",
"redshift:DescribeClusters",
"redshift:DescribeClusterSecurityGroups",
"sns:GetTopicAttributes",
"sns:ListTopics",
"sns:Publish",
"sns:Subscribe",
"sns:Unsubscribe",
"iam:PassRole",
"iam:ListRolePolicies",
"iam:GetRole",
"iam:GetRolePolicy",
"iam:ListInstanceProfiles",
"cloudwatch:*",
"datapipeline:DescribeObjects",
"datapipeline:EvaluateExpression"
],
"Resource": ["*"]
}]
}
这些是否需要以某种方式修改?
我遇到了同样的错误。
在 IAM 中,将AWSDataPipelineRole
托管策略附加到DataPipelineDefaultRole
我还必须将信任关系更新为以下内容(需要文档中没有的ec2):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"ec2.amazonaws.com",
"elasticmapreduce.amazonaws.com",
"datapipeline.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
AWS 论坛中也有类似的问题,似乎与托管策略的问题有关
https://forums.aws.amazon.com/message.jspa?messageID=606756
在该问题中,他们建议对访问策略和信任策略使用特定的内联策略来定义更改某些权限的角色。奇怪的是,可以在以下位置找到特定的内联策略
http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html
我遇到了同样的问题。在我的情况下,托管策略是正确的,但我必须使用上面链接的文档 Gonfva 更新 DataPipelineDefaultRole 和 DataPipelineDefaultResourceRole 角色的信任关系,因为它们已经过时了。
问题可能与 IAM 角色有关。
它可能会有所帮助,尽管并非在所有情况下。当我尝试使用数据管道将 dynamodb 数据导出到 S3 时,我遇到了同样的问题。问题出在资源角色 - DataPipelineDefaultResourceRole 和,角色 - 数据管道默认数据管道中使用的角色
溶液转到 IAM -> Roles -> DataPipelineDefaultResourceRole 并将 AmazonDynamoDBFullAccess 和 AmazonS3FullAccess 策略附加到此角色。对 DataPipelineDefaultRole 执行相同的操作。
请注意:您应根据您的使用案例授予受限的 DynamoDB 和 S3 访问权限。
立即尝试运行数据管道。它将处于"正在运行"状态。