Я развертываю приложение на 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 кажется слишком сложным, и я боюсь, что из-за этого могут возникнуть другие проблемы.Любые предложения о том, как я могу это исправить или альтернативный подход приветствуются.