Я пытаюсь написать скрипт в bash для AWS Autoscaling Group. Это означает, что даже если экземпляр завершен, Autoscaling Group переустанавливает экземпляр и все пакеты из тегов по имени пакета и номеру пакета значений. Вот LaunchConfiguration группа из AWS шаблона CloudFormation:Использование сценария bash в инфраструктуре AWS для установки пакетов из тегов Autoscalling Group
"WorkerLC": {
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"Properties" : {
"ImageId": {"Ref" : "SomeAMI"},
"InstanceType" : "m3.medium",
"SecurityGroups" : [{"Ref": "SecurityGroup"}],
"UserData" : {
"Fn::Base64": {
"Fn::Join": [ "", [
{"Fn::Join": ["", ["Engine=", {"Ref": "Env"},".app.net"," \n"]]},
{"Fn::Join": ["", [
"#!/bin/bash\n",
"cd /app/\n",
"./worker-install-package.sh"
]]}
]]
}
}
}
}
И я хочу взять из тегов AutoscalingGroup как то:
"Worker": {
"Type" : "AWS::AutoScaling::AutoScalingGroup",
"Properties": {
"LaunchConfigurationName": {"Ref": "Worker"},
"LoadBalancerNames": [{"Ref": "WorkerELB"}],
"AvailabilityZones": {"Ref": "AZs"},
"MinSize" : "1",
"MaxSize" : "1",
"HealthCheckGracePeriod": 300,
"Tags" : [
{"Key": "WorkersScalingGroup", "Value": {"Fn::Join": ["", ["Offering-", {"Ref": "Env"} "-Worker-1"]]}, "PropagateAtLaunch": true},
{"Key": "EIP", "Value": {"Ref": "WorkerIP"}, "PropagateAtLaunch": true},
{"Key": "Environment", "Value": {"Ref": "Env"}, "PropagateAtLaunch": true}
]
}
}
Итак, теперь сложная часть. Теперь я попытался найти в тегах Userdata текст «рабочий». Потому что у меня есть несколько типов экземпляров, и каждый из них поставляется с другими пакетами.
Это первый раз, когда я что-то написал в bash. Вот worker-install-package.sh:
#read tag for the installed package
EC2_REGION='us-east-1'
AWS_ACCESS_KEY='xxxxx'
AWS_SECRET_ACCESS_KEY='xxxxxxxxxxxxxxxxxx'
InstanceID=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id`
PackageName=`/opt/aws/apitools/ec2/bin/ec2-describe-tags -O $AWS_ACCESS_KEY -W $AWS_SECRET_ACCESS_KEY --filter resource-id=$InstanceID --filter key='worker' | cut -f5`
while read line
if [ "$PackageNmae" = "worker" ]; then
sudo -- sh -c "./install-package.sh ${PackageName} ${Value}"
/opt/aws/apitools/ec2/bin/ec2-create-tags $InstanceID -O $AWS_ACCESS_KEY -W $AWS_SECRET_ACCESS_KEY --tag "worker-${PackageName}"=$Value
fi
done
У меня есть два вопроса. Во-первых, если я делаю это правильно. Во-вторых, как я могу оценить значение имени пакета (это некоторое количество версий пакета)?
Спасибо!
Как я объяснил здесь: «... Autoscaling Group переустанавливает экземпляр и все пакеты из тегов по имени пакета и номеру пакета значений ...». Вы можете прочитать об Autoscaling group в документах AWS. Почему я использую теги?Когда кто-то меняет версию пакета, он также обновляет тег: «/ opt/aws/apitools/ec2/bin/ec2-create-tags» только для AutoscalingGroup – muzafarow
Спасибо, я использую ASG в своей повседневной профессиональной жизни и не нуждаюсь любой документ об этом. Я просто даю вам возможность изучить: как я говорю, ваше мнение правильно и будет работать, однако вы можете лучше использовать sth, например, службу AWS opsworks. Не уверен, что я правильно понимаю ваш второй вопрос, и, возможно, это причина нашего недоразумения здесь. Я лично полагался бы на скрипт ведро S3/Opsworks, а не на теги для этой цели конфигурации, но это зависит от вас, чтобы решить – Tom