【问题标题】:Can't start EC2 instance in VPC via lambda无法通过 lambda 在 VPC 中启动 EC2 实例
【发布时间】:2018-12-19 20:58:08
【问题描述】:

我已按照following tutorial 按 ID 启动/停止实例。

我没有为 stopEC2InstancesstartEC2Instance 函数提供 VPC 信息。

问题:虽然在停止实例时它可以正常工作,但 startEC2Instances 函数无法完成它的工作。

我想知道自编写教程以来boto3 是否发生了某种变化?我检查了boto3 API 以确保,但start_instances 仍然是相同的功能。

除了上面链接文章中的内容之外,我没有更改任何代码。

更新

startEC2Instances 函数的最新成功运行的 CloudWatch Logs(它没有按预期工作并且仍然没有启动实例)

START RequestId: 663ce39a-8534-11e8-9928-2b8c600ed800 Version: $LATEST
started your instances: REDACTED
END RequestId: 663ce39a-8534-11e8-9928-2b8c600ed800
REPORT RequestId: 663ce39a-8534-11e8-9928-2b8c600ed800  Duration: 1055.49 ms    Billed Duration: 1100 ms Memory Size: 512 MB    Max Memory Used: 56 MB  
START RequestId: 7f7e57ac-8534-11e8-9c44-41bb6e4a0724 Version: $LATEST
started your instances: REDACTED
END RequestId: 7f7e57ac-8534-11e8-9c44-41bb6e4a0724
REPORT RequestId: 7f7e57ac-8534-11e8-9c44-41bb6e4a0724  Duration: 420.79 ms Billed Duration: 500 ms Memory Size: 512 MB Max Memory Used: 56 MB  

更新 2 我正在从上面的文档中复制政策文档和代码,我没有做任何更改。

{
  "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*"
      ],
      "Resource": "*"
    }
  ]
}

startEC2Instance 代码:

import boto3
# Enter the region your instances are in. Include only the region without specifying Availability Zone; e.g.; 'us-east-1'
region = 'us-east-1'
# Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX']
instances = ['REDACTED']

def lambda_handler(event, context):
    ec2 = boto3.client('ec2', region_name=region)
    ec2.start_instances(InstanceIds=instances)
    print 'started your instances: ' + str(instances)

【问题讨论】:

  • 您需要提供有关您遇到的实际问题的更多信息,而不是“不做它的工作”。请编辑您的问题以包含您收到的实际错误消息。
  • @MarkB 没有错误。当我测试该功能时,它说它是成功的。但是我要启动的 EC2 实例尚未启动。我总是在实例停止后一两分钟后尝试启动它们。
  • 检查 CloudWatch 日志中的 Lambda 函数日志是否有任何错误。在代码中添加 try/catch 以确保捕获(并记录)任何抛出的异常。
  • @MarkB 请检查更新
  • 您可能应该修改代码以显示ec2.start_instances() 的输出——它提供了所有已启动实例的InstanceId(只需将其放在print() 语句中)。另外,请确保您在正确的区域中查看它们是否已启动。

标签: amazon-web-services amazon-ec2 aws-lambda boto3


【解决方案1】:

问题似乎是附加到我的实例的加密卷。此卷设置为在启动时启动,因此会导致问题。我尝试使用不同的 IAM EBS 操作,包括 AttachVolumeDetachVolumeDescribeVolumes 等。

但最终起作用的是 KMS 操作 CreateGrant,其资源设置为加密卷的密钥的 key ID

【讨论】:

  • 总有一小部分缺失的信息是文档没有涵盖的 ;-)
猜你喜欢
  • 2022-10-22
  • 2019-06-26
  • 2017-06-23
  • 2020-03-22
  • 2019-12-31
  • 2017-07-23
  • 2020-10-09
  • 1970-01-01
  • 2020-11-08
相关资源
最近更新 更多