问题描述
我具有Lambda函数来重新启动实例:
import boto3
region = 'us-east-1'
instances = ['i-xxxxxxxxxxxxxxxxxxxxxxxxxx']
ec2 = boto3.client('ec2',region_name=region)
def lambda_handler(event,context):
response = ec2.reboot_instances(
InstanceIds=[
'i-xxxxxxxxxxxxxxxxxxxxxx',],)
print(response)
它只是拒绝工作。
触发时的响应:
{'ResponseMetadata':{'RequestId': '12994c92-98ab-4b62-bc10-a0e0b4881aaa','HTTPStatusCode':200, 'HTTPHeaders':{'x-amzn-requestid': '12994c92-98ab-4b62-bc10-a0e0b4881aaa','content-type': 'text / xml; charset = UTF-8','content-length':'231','date':'Sun,30 2020年8月15:44:40 GMT','server':'AmazonEC2'},'RetryAttempts':0}}
有趣的部分:如果我将ec2.reboot_instances更改为ec2.start_instances,那么它将起作用。
所以我试图找出为什么拒绝重启命令并接受启动/停止命令?
注意:我在IAM中包括重新启动实例的权限。该实例是一个Linux openvpn服务器AMI捆绑包
解决方法
我用的和你一样的代码,只是多一步让你检查: 在为 Lambda 分配的 IAM 账户中添加“RebootInstances”访问权限。 如果您按照文档创建了 IAM 政策,它将类似于:
{
"Version": "2012-10-17","Statement": [
{
"Effect": "Allow","Action": [
"logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"
],"Resource": "arn:aws:logs:*:*:*"
},{
"Effect": "Allow","Action": [
"ec2:Start*","ec2:Stop*","ec2:Reboot*" // <-----Add this
],"Resource": "*"
}
]
}