AWS Lambda python函数重新启动ec2实例不起作用

问题描述

我具有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": "*"
    }
  ]
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...