Экземпляры Elastic Beanstalk не отправляют данные о работоспособности после изменения UserData в AWSEBAutoScalingLaunchConfiguration - PullRequest
0 голосов
/ 24 мая 2019

Я развертываю приложение на Elastic Beanstalk, и мне нужно изменить UserData в AWSEBAutoScalingLaunchConfiguration, которая обычно генерируется Elastic Beanstalk.Мне нужно сделать это для запуска сценария cfn-signal, чтобы при обновлении среды AWSEBAutoScalingGroup получал сигнал об успешном завершении и не выполнял откат.Однако, когда я делаю эти изменения, мои экземпляры никогда не отправляют никаких данных о состоянии здоровья, поэтому мое состояние Elastic Beanstalk остается на уровне «Сильный».Это приложение по-прежнему работает, когда я получаю доступ к конечной точке, поэтому экземпляры в порядке, я думаю, что демон работоспособности по какой-то причине просто не работает.

Я попытался запустить команду cfn-signal в .ebextensionsкоманда, но я считаю, что вводит некоторые циклические зависимости, которые я описал здесь (и до сих пор не выяснил).Таким образом, единственный способ решить эту проблему - выполнить команду в UserData, но я обеспокоен тем, что внесенные мной изменения приводят к тому, что данные о работоспособности не отправляются.

Вот содержимоефайл .ebextensions, который устанавливает UserData, а также другую конфигурацию, необходимую для проверки работоспособности ELB.

Resources:
  AWSEBAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      HealthCheckType: ELB
      HealthCheckGracePeriod: 300
    CreationPolicy:
      ResourceSignal:
        Timeout: PT5M
  AWSEBAutoScalingLaunchConfiguration:
    Type: AWS::AutoScaling::LaunchConfiguration
    Properties:
      UserData:
        "Fn::Base64":
          "Fn::Join":
          - ""
          - - |-
              Content-Type: multipart/mixed; boundary="===============5189065377222898407=="
              MIME-Version: 1.0

              --===============5189065377222898407==
              Content-Type: text/cloud-config; charset="us-ascii"
              MIME-Version: 1.0
              Content-Transfer-Encoding: 7bit
              Content-Disposition: attachment; filename="cloud-config.txt"

              #cloud-config
              repo_upgrade: none
              repo_releasever: 2018.03
              cloud_final_modules:
               - [scripts-user, always]

              --===============5189065377222898407==
              Content-Type: text/x-shellscript; charset="us-ascii"
              MIME-Version: 1.0
              Content-Transfer-Encoding: 7bit
              Content-Disposition: attachment; filename="user-data.txt"

              #!/bin/bash
              exec > >(tee -a /var/log/eb-cfn-init.log|logger -t [eb-cfn-init] -s 2>/dev/console) 2>&1
              echo [`date -u +"%Y-%m-%dT%H:%M:%SZ"`] Started EB User Data
              set -x

              # This signals the auto scaling group that the instance launched successfully
              yum update -y aws-cfn-bootstrap
              /opt/aws/bin/cfn-signal -e $? --stack
            - ' '
            - Ref: AWS::StackName
            - ' '
            - --resource AWSEBAutoScalingGroup --region
            - ' '
            - Ref: AWS::Region
            - |-


              function sleep_delay
              {
                if (( $SLEEP_TIME < $SLEEP_TIME_MAX )); then
                  echo Sleeping $SLEEP_TIME
                  sleep $SLEEP_TIME
                  SLEEP_TIME=$(($SLEEP_TIME * 2))
                else
                  echo Sleeping $SLEEP_TIME_MAX
                  sleep $SLEEP_TIME_MAX
                fi
              }

              # Executing bootstrap script
              SLEEP_TIME=10
              SLEEP_TIME_MAX=3600
              while true; do
                curl https://s3.dualstack.us-west-2.amazonaws.com/elasticbeanstalk-env-resources-us-west-2/stalks/eb_tomcat_4.0.1.200636.0/lib/UserDataScript.sh > /tmp/ebbootstrap.sh
                RESULT=$?
                if [[ "$RESULT" -ne 0 ]]; then
                  sleep_delay
                else
                  /bin/bash /tmp/ebbootstrap.sh     'https://s3.dualstack.us-west-2.amazonaws.com/elasticbeanstalk-env-resources-us-west-2/stalks/eb_tomcat_4.0.1.200636.0/lib/aws-elasticbeanstalk-tools-1.20-1.noarch.rpm'    'https://s3.dualstack.us-west-2.amazonaws.com/elasticbeanstalk-env-resources-us-west-2/stalks/eb_tomcat_4.0.1.200636.0/lib/awseb-ruby-2.2.4-x86_64-20160503_1008.tar.gz https://s3.dualstack.us-west-2.amazonaws.com/elasticbeanstalk-env-resources-us-west-2/stalks/eb_tomcat_4.0.1.200636.0/lib/basehooks.tar.gz'    'https://s3.dualstack.us-west-2.amazonaws.com/elasticbeanstalk-env-resources-us-west-2/stalks/eb_tomcat_4.0.1.200636.0/lib/beanstalk-core-2.12.gem https://s3.dualstack.us-west-2.amazonaws.com/elasticbeanstalk-env-resources-us-west-2/stalks/eb_tomcat_4.0.1.200636.0/lib/beanstalk-core-healthd-1.1.gem https://s3.dualstack.us-west-2.amazonaws.com/elasticbeanstalk-env-resources-us-west-2/stalks/eb_tomcat_4.0.1.200636.0/lib/executor-1.2.gem'    '
            - Ref: AWSEBInstanceLaunchWaitHandle
            - |-
              '    '
            - Ref: AWS::StackId
            - |-
              '    '
            - Ref: AWS::Region
            - |
              '    'e2232d72b415'    '1eb8fb9e-3237-488f-a962-facde7d5f717'    ''    'apache'    ''    &&
                  exit 0
                fi
              done

              --===============5189065377222898407==--
              ##Ec2InstanceReplacementRequest=63186836-db61-4b9d-baad-ba1ae88cc300

Все, кроме части cfn-signal, было скопировано из конфигурации запуска того же приложения Elastic Beanstalkдо внесения этих изменений.Моей целью было сохранить то же поведение, добавив команду cfn-signal.При этом там есть несколько случайных идентификаторов, которые я не знаю, к чему они относятся.Если я удаляю большую часть файла, например, так:

Resources:
  AWSEBAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      HealthCheckType: ELB
      HealthCheckGracePeriod: 300

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

Можно ли сделать то, что я описываю?Изменение UserData кажется слишком сложным, и я боюсь, что из-за этого могут возникнуть другие проблемы.Любые предложения о том, как я могу это исправить или альтернативный подход приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...