【问题标题】:aws lambda python function to reboot ec2 instances not working用于重启 ec2 实例的 aws lambda python 函数不起作用
【发布时间】:2020-12-18 21:22:12
【问题描述】:

我有一个 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','内容类型': 'text/xml;charset=UTF-8', 'content-length': '231', 'date': 'Sun, 30 2020 年 8 月 15:44:40 GMT','服务器':'AmazonEC2'},'RetryAttempts':0}}

有趣的部分:如果我将 ec2.reboot_instances 更改为 ec2.start_instances 那么它可以工作。

所以我试图找出为什么会拒绝重启命令而接受启动/停止命令?

注意:我在 IAM 中包含了重启实例的权限。该实例是一个 linux openvpn 服务器 AMI 包

【问题讨论】:

  • 你确定它不工作吗?检查 CloudTrail 以查看 API 操作是否已触发
  • 所以你得到了 200 个响应,你可以在再次调用 lambda 后使用下面的命令 > uptime 检查服务器启动时间吗?
  • 所以你得到了 200 个响应,你可以在再次调用 lambda 后使用下面的命令 > uptime 检查服务器启动时间吗?
  • 您说它与start_instances() 一起工作——这是否意味着实例处于已停止 状态?您如何确认重启是否有效 - 我认为它不会出现在系统状态中,您需要连接到实例才能知道它是否有效。
  • @ChrisWilliams 感谢您的回复。创建了一个 cloudtrail 日志,但它没有记录任何操作。

标签: python amazon-ec2 aws-lambda reboot


【解决方案1】:

我使用了和你一样的代码,只是多一步让你检查: 在您为 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": "*"
    }
  ]
}

【讨论】:

    猜你喜欢
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2018-01-09
    • 2019-06-26
    • 2015-07-13
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多