Назад | Перейти на главную страницу

Как запустить сервер в ASG за LB и развернуть на нем код с помощью облачной информации?

Я пытаюсь создать довольно простую инфраструктуру для сред DEV. Указанные ограничения:

Это предполагаемая архитектура:

У меня есть хороший шаблон облачной информации, который не работает. Сообщение об ошибке:

Received 1 FAILURE signal(s) out of 1. Unable to satisfy 100% MinSuccessfulInstancesPercent requirement

Похоже, это вызвано циклом зависимости:

... или словами:

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

Вопрос: Можно ли разорвать цикл, отключив проверки работоспособности целевой группы? (В aws такой опции не нашел). Какие еще варианты могут помочь?

В вашем шаблоне ASG вы можете установить HealthCheck собственность EC2. Таким образом, он не будет зависеть от проверок работоспособности ELB и пометит экземпляр как работоспособный, как только он завершит UserData сценарий.

TestAutoScalingGroup:
  Type: AWS::AutoScaling::AutoScalingGroup
  Properties:
    [...]
    HealthCheckType: EC2

Тогда в вашем LaunchConfiguration.UserData вам нужно отправить сигнал после завершения скрипта UserData:

TestLaunchConfig:
  Type: AWS::AutoScaling::LaunchConfiguration
  Properties:
    [...]
    UserData:
      Fn::Base64:
        !Sub |
          #!/bin/bash -x
          [... some setup ...]
          # Signal the status from this instance
          /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} \
            --resource TestAutoScalingGroup --region ${AWS::Region}

Обратите внимание, что --resource параметр должен соответствовать TestAutoScalingGroup имя ресурса.

Надеюсь, это поможет :)