我正在尝试设置一个计划活动来启动和停止ec2实例。我的活动失败,出现以下错误:
调用 启动实例操作:您无权执行此操作 操作。编码的授权失败消息:....
我的 cli 活动是这样的:
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
我需要提供我的访问/密钥作为附加参数吗?由于我的访问权限有限,因此无法更新数据管道策略。但是,我能够使用 aws cli 工具启动和停止实例。
无论您使用的是 Lambda 还是数据管道,您都需要了解与之关联的 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。
我正在写一个答案,因为它表明我的提案需要一些细节。
为了调度这些事情,我建议使用 lambda,因为它更具成本效益和直接性。
AWS lambda 现在支持计划事件,然后您可以使用开发工具包(目前支持的语言是 python、node.js 和 java)进行 cli 调用。
例如,用于启动实例的快速 lambda 函数如下所示(未测试):
import boto3
def lambda_handler(event, context):
ec2.create_instances(ImageId='<ami-image-id>', MinCount=1, MaxCount=5)
然后你只需要调度这个lambda函数(类似cron的系统)。另请注意附加正确的 IAM 角色/权限。BOTO3 文档在这里