проблема boto3 с проверкой состояния экземпляра ec2

#amazon-web-services #boto #aws-lambda #boto3

#amazon-web-services #бото #aws-lambda #boto3

Вопрос:

Итак, у меня есть этот скрипт boto3, который запускает экземпляр ec2. Но когда я запускаю эту лямбда-функцию, функция describe_instance_status возвращает пустой массив InstanceStatus. Итак, программа завершается, после указания индекса нашего диапазона. Есть предложения?

 import boto3
from time import sleep
region = 'your region name'


def lambda_handler(event, context):

 cye_production_web_server_2 = 'abcdefgh'

 ec2 = boto3.client('ec2',region)

 start_response = ec2.start_instances(
    InstanceIds=[cye_production_web_server_2, ],
    DryRun=False
 )

 print(
    'instance id:',
    start_response['StartingInstances'][0]['InstanceId'],
    'is',
    start_response['StartingInstances'][0]['CurrentState']['Name']
 )

 status = None
 counter = 5
 while (status != 'ok' and counter > 0):
    status_response = ec2.describe_instance_status(
        DryRun=False,
        InstanceIds=[cye_production_web_server_2, ],
    )
    status = status_response['InstanceStatuses'][0]['SystemStatus']      ['Status']
    sleep(5)    # 5 second throttle
    counter=counter-1

 print(status_response)
 print('status is', status.capitalize())
  

Комментарии:

1. Проверяли ли вы журнал lambda (cloudwatch) на наличие какого-либо сообщения об ошибке?

2. индекс списка вне диапазона: обратная трассировка ошибки индекса (последний последний вызов): Файл «/var/task/lambda_function.py «, строка 31, в lambda_handler status = status_response[‘InstanceStatuses’][0][‘SystemStatus’][‘Статус’] Ошибка индекса: индекс списка находится вне диапазона

3. Вы уверены, что это сработало как отдельный скрипт?

Ответ №1:

По умолчанию описываются только запущенные экземпляры, если не указано иное.

Для перехода экземпляра в рабочее состояние может потребоваться несколько минут.

Ваша программа никогда не перейдет в режим ожидания, поскольку на предыдущем шаге произошел сбой, когда статус фактически не был возвращен на первой итерации.

Используйте «IncludeAllInstances», который является логическим параметром запроса, при значении true включает состояние работоспособности для всех экземпляров. При значении false отображается состояние работоспособности только для запущенных экземпляров. Значение по умолчанию равно false

Ответ №2:

Как упоминал omuthu, возвращаемый тип по умолчанию предоставляет информацию только о состоянии выполнения экземпляра. Чтобы получить другие состояния instant, установите аргумент «IncludeAllInstances» для describe_instance_status() как True.