准确地按照this page上的逐步说明,我尝试将一个DynamoDB表的内容导出到S3存储桶。我完全按照指示创建了一个管道,但它无法运行。它似乎无法识别/运行EC2资源来执行导出。当我通过AWS Console访问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": ["*"]
}]
}
这些是否需要以某种方式进行修改?
答案 0 :(得分:2)
AWS论坛中存在类似问题,似乎与托管政策问题相关
https://forums.aws.amazon.com/message.jspa?messageID=606756
在该问题中,他们建议对访问和信任策略使用特定的内联策略来定义更改某些权限的角色。奇怪的是,具体的内联策略可以在
找到http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html
答案 1 :(得分:2)
我遇到了同样的错误。
在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"
}
]
}
答案 2 :(得分:0)
我有同样的问题。在我的情况下,托管策略是正确的,但是我必须使用上面链接到的文档Gonfva更新DataPipelineDefaultRole和DataPipelineDefaultResourceRole角色的信任关系。
答案 3 :(得分:0)
问题可能与 IAM 角色有关。
它可能会有所帮助,尽管并非在所有情况下。 当我尝试使用数据管道将 dynamodb 数据导出到 S3 时,我遇到了同样的问题。问题在于 资源角色 - DataPipelineDefaultResourceRole 和, 角色 - 数据管道中使用的 DataPipelineDefaultRole 角色
解决方案 转至 IAM -> 角色 -> DataPipelineDefaultResourceRole 并将 AmazonDynamoDBFullAccess 和 AmazonS3FullAccess 策略附加到此角色。 对 DataPipelineDefaultRole 执行相同的操作。
请注意:您应该根据您的用例授予受限的 DynamoDB 和 S3 访问权限。
立即尝试运行您的数据管道。它将处于运行状态。