AWS lamba start_instances выдает ожидающий ответ, но консоль по-прежнему показывает остановленный

AWS lamba start_instances выдает ожидающий ответ, но консоль по-прежнему показывает остановленный

У меня есть лямбда-функция, которую я настроил для запуска экземпляра:

import boto3
ec2 = boto3.client('ec2')
response = ec2.start_instances(
    InstanceIds=['i-xxx']
)
print(response)

Ответ выглядит хорошо, он показывает, что он переходит из состояния «Остановлено» в состояние «Ожидание»:

START RequestId: 26c0cf5e-6d70-4701-b0bd-68276b06d30d Version: $LATEST
{
    "StartingInstances": [
        {
            "CurrentState": {"Code": 0, "Name": "pending"},
            "InstanceId": "i-xxxxxx",
            "PreviousState": {"Code": 80, "Name": "stopped"},
        }
    ],
    "ResponseMetadata": {
        "RequestId": "fdab5818-0536-457f-a19e-17fea60100f4",
        "HTTPStatusCode": 200,
        "HTTPHeaders": {
            "x-amzn-requestid": "fdab5818-0536-457f-a19e-17fea60100f4",
            "content-type": "text/xml;charset=UTF-8",
            "content-length": "579",
            "date": "Wed, 16 Dec 2020 18:38:57 GMT",
            "server": "AmazonEC2",
        },
        "RetryAttempts": 0,
    },
}
END RequestId: f2ed2be9-e2f2-4beb-a69b-4cddee35bef4
REPORT RequestId: f2ed2be9-e2f2-4beb-a69b-4cddee35bef4  Duration: 1381.48 ms    Billed Duration: 1382 ms    Memory Size: 256 MB Max Memory Used: 97 MB  Init Duration: 688.96 ms    

Однако когда я смотрю на консоль, она по-прежнему отображается как остановленная и не запускается.

Не похоже, чтобы он не запустился:

                "StateReason": {
                    "Code": "Client.UserInitiatedShutdown",
                    "Message": "Client.UserInitiatedShutdown: User initiated shutdown",
                },

Политика, основанная на исполнении:

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "xxxxxxx",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "xxxxxxFunction",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "xxxxxxxx"
        }
      }
    }
  ]
}

Похоже, он на самом деле не пытался запуститься. Я использовал этот код для запуска других экземпляров. Мне интересно, проблема ли это в разрешениях, но ошибки нет. Роль выполнения лямбда-функции имеет EC2fullaccess.

Обратите внимание, еще одна точка данных. Я попробовал еще один код, который использует команду ssm send для отправки команды после ее запуска (после ручного запуска). Если я попробую это во время ее работы, то все получится.

решение1

Ваш том EBS зашифрован с использованием ключа KMS, а роль IAM, которую использует ваша функция Lambda, не имеет разрешения на расшифровку с использованием этого ключа KMS. В этом случае экземпляр EC2 запускается, но затем немедленно останавливается.

Итак, есть два возможных решения.

Решение 1: Добавьте свою роль IAM как «пользователя» вашего ключа KMS. Для этого вам необходимо отредактировать политику разрешений, прикрепленную к вашему ключу KMS, и добавить свою роль IAM как «пользователя» ключа (для шифрования/дешифрования).

Решение 2: Добавьте kms:CreateGrantв роль IAM вашей Lambda. С этим в вашей роли IAM AWS разрешит запуск экземпляра EC2.

Связанный контент