Как ждать до тех пор, пока EC2 (созданный в Lambda) 2/2 проверка состояния проходит в Python с использованием Boto3 и вызова функции Lambda из сценария Shell - PullRequest
0 голосов
/ 12 июля 2019

Вариант использования, который я выполняю:

  1. Создать экземпляр EC2
  2. В этом ожидании, пока этот экземпляр EC2 будет запущен и работает
  3. Развертывание сборки путем запуска сценария оболочки в экземпляре EC2
  4. Получите ответ об успешном выполнении сценария оболочки
  5. Завершить работу экземпляра
  6. После того, как экземпляр завершен, и ответ запускаемого сценария оболочки соответствует коду успеха, мне нужно запустить другой конвейер в Jenkins, который, в свою очередь, вызовет создание экземпляра EC2 и т. Д.

Основная цель ожидания:

  1. Если моя лямбда-функция завершится без выполнения всего кода, моя сборка не будет развернута, и будет запущен следующий конвейер jenkins (шаг 6), который я не хочу, пока я не завершу первое развертывание успешно.
  2. Если есть какая-либо ошибка в развертывании сборки (Шаг 3), она должна вернуть эту ошибку и не должна запускать мой следующий конвейер, с которым я не могу справиться, так как мой код ответа возвращается задолго до того, как будут запущены мои экземпляры EC2.

Я вызываю функцию Lambda из сценария оболочки (shellScript.sh), и команда для вызова приведена в следующем коде, который взят из документации AWS.

В лямбда-функции у меня есть следующий код Python, чтобы сначала создать экземпляр EC2, а затем определить, работает ли EC2 вместе с проверкой состояния 2/2, но он завершает работу и возвращает 200 успешных кодов в сценарий оболочки, когда «состояние экземпляра» показывает, что работает (Lambda продолжает работать с другими командами для запуска после того, что не упомянуто здесь, и состояние EC2 находится в состоянии инициализации).

Какую функцию API следует использовать для блокировки, пока в EC2 «проверка состояния» не отобразится «2/2 проверки пройдены»? (Я не хочу, чтобы моя лямбда-функция закрывалась до тех пор, пока в статусе не будет пройдено 2/2 проверки.)

Примечание. При ответе на печать отображается состояние «ОК»

Я ссылался на ссылку переполнения стека ниже и пробовал эти опции (как видно из моего кода ниже), но у меня это не сработало.

Как заблокировать, пока проверка состояния EC2 не пройдена с использованием Python Boto3?

ShellScript.sh:

aws lambda invoke --invocation-type RequestResponse --function-name <my-function-name> --payload '{"Key": "'$value'"}' /dev/stdout

Lambda_function.py:

    instance = EC2.run_instances(
        ImageId=<image-id>,
        InstanceType=<instance-type>,
        MinCount=1, 
        MaxCount=1,
        .......
    )
    instance_id = instance['Instances'][0]['InstanceId']
    ec2instance = ec2.Instance(id=instance_id)
    ec2instance.wait_until_running()
    waiter = EC2.get_waiter('instance_status_ok')
    waiter.wait(
        InstanceIds=[instance_id],
        WaiterConfig={
            'Delay': 15,
            'MaxAttempts': 40
        },
        IncludeAllInstances = True
    )
    response = EC2.describe_instance_status(
        InstanceIds=[instance_id],
        IncludeAllInstances=True
    )
    print(response)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...