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

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

  • Только один экземпляр ec2, основанный на стандартном linux ec2
  • Сервер nginx в контейнере Docker обслуживает healthcheck.html
  • Сервер должен быть в группе автомасштабирования
  • Доступ из Интернета только через балансировщик нагрузки приложения aws

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

Я получил хороший шаблон облачной информации, который не работает. Сообщение об ошибке:

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

Это, кажется, вызвано циклом зависимости:

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

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

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

1 ответ

Решение

В вашем шаблоне 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 Название ресурса.

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

Другие вопросы по тегам