AWS Data Pipeline 授权问题
AWS Data Pipeline authorization issue
我正在尝试设置一个预定的 activity 来启动和停止 ec2 实例。我的活动失败,出现以下错误:
A client error (UnauthorizedOperation) occurred when calling the
StartInstances operation:You are not authorized to perform this
operation. Encoded authorization failure message:....
我的 cli activity 是这样的:
aws ec2 describe-instances --region us-west-2 --filter "Name=tag:auto-start,Values=yes" "Name=instance-state-name,Values=stopped" --query 'Reservations[*].Instances[*].[InstanceId]' --output text |xargs aws ec2 start-instances --region us-west-2 --instance-i
我需要提供我的 access/secret 键作为附加参数吗?由于我的访问权限有限,我无法更新数据管道策略。但是我可以使用 aws cli 工具启动和停止实例。
我正在写一个答案,因为我的提案需要一些细节。
为了安排这类事情,我建议使用 lambda,因为它更具成本效益且更直接。
AWS lambda 现在支持 scheduled events,然后您可以使用 sdk 进行 cli 调用(当前支持的语言是 python、node.js 和 java)。
例如,启动实例的快速 lambda 函数如下所示(未测试):
import boto3
def lambda_handler(event, context):
ec2.create_instances(ImageId='<ami-image-id>', MinCount=1, MaxCount=5)
然后你只需要安排这个 lambda 函数(类似 cron 的系统)。另请注意附加正确的 IAM 角色/权限。
boto3 文档是 here
无论您使用的是 Lambda 还是 DataPipeline,您都需要了解与它们关联的 IAM 角色和策略。要解决您的问题,您只需将 StartInstances
权限添加到 DataPipeLineDefaultResource
角色。默认策略是只读的,没有启动实例的权限。
推荐政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*",
"ec2:Describe*",
"ec2:Start*",
"ec2:RunInstances",
"ec2:Stop*",
"datapipeline:*",
"cloudwatch:*"
],
"Resource": [
"*"
]
}
]
}
让您的 IAM 管理员创建一个允许启动实例的新策略。 AWS DataPipeline 文档包含所需信息。然后将该 IAM 策略附加到 DataPipeLineDefaultResource
角色,您的问题就解决了。一旦你解决了这个问题,你就可以考虑是否使用Lambda了。
我正在尝试设置一个预定的 activity 来启动和停止 ec2 实例。我的活动失败,出现以下错误:
A client error (UnauthorizedOperation) occurred when calling the StartInstances operation:You are not authorized to perform this operation. Encoded authorization failure message:....
我的 cli activity 是这样的:
aws ec2 describe-instances --region us-west-2 --filter "Name=tag:auto-start,Values=yes" "Name=instance-state-name,Values=stopped" --query 'Reservations[*].Instances[*].[InstanceId]' --output text |xargs aws ec2 start-instances --region us-west-2 --instance-i
我需要提供我的 access/secret 键作为附加参数吗?由于我的访问权限有限,我无法更新数据管道策略。但是我可以使用 aws cli 工具启动和停止实例。
我正在写一个答案,因为我的提案需要一些细节。
为了安排这类事情,我建议使用 lambda,因为它更具成本效益且更直接。
AWS lambda 现在支持 scheduled events,然后您可以使用 sdk 进行 cli 调用(当前支持的语言是 python、node.js 和 java)。
例如,启动实例的快速 lambda 函数如下所示(未测试):
import boto3
def lambda_handler(event, context):
ec2.create_instances(ImageId='<ami-image-id>', MinCount=1, MaxCount=5)
然后你只需要安排这个 lambda 函数(类似 cron 的系统)。另请注意附加正确的 IAM 角色/权限。 boto3 文档是 here
无论您使用的是 Lambda 还是 DataPipeline,您都需要了解与它们关联的 IAM 角色和策略。要解决您的问题,您只需将 StartInstances
权限添加到 DataPipeLineDefaultResource
角色。默认策略是只读的,没有启动实例的权限。
推荐政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*",
"ec2:Describe*",
"ec2:Start*",
"ec2:RunInstances",
"ec2:Stop*",
"datapipeline:*",
"cloudwatch:*"
],
"Resource": [
"*"
]
}
]
}
让您的 IAM 管理员创建一个允许启动实例的新策略。 AWS DataPipeline 文档包含所需信息。然后将该 IAM 策略附加到 DataPipeLineDefaultResource
角色,您的问题就解决了。一旦你解决了这个问题,你就可以考虑是否使用Lambda了。