У меня есть несколько сценариев пользовательских данных, которые в настоящее время используются автономными экземплярами EC2.Я хотел бы иметь возможность использовать их с облачной информацией и включать вызовы вспомогательных сценариев 'cfn-', чтобы сигнализировать стек облачной информации о прогрессе.По сути, я хотел бы иметь возможность добавлять некоторые данные в скрипт userdata и добавлять к нему некоторые данные.Для этого я планировал взять существующий сценарий и использовать sed, чтобы удалить ведущую строку shebang / script, и передать этот слегка измененный сценарий в облачную информацию в качестве параметра.Этот сценарий должен быть закодирован в base64 перед передачей в качестве параметра.Я base64 кодирую, а затем разделяю на основе размера 4096 байт (ограничение размера параметра).Мой шаблон облачной информации имеет 4 поля параметров 'userdata', в которые я могу передавать данные.В настоящее время это работает в существующих сценариях:
"UserData" : { "Fn::Join" : [ "", [ { "Ref" : "UserData" }, { "Ref" : "UserData2" }, { "Ref" : "UserData3" }, { "Ref" : "UserData4" }]]},
Примечание. Мне не нужно использовать встроенную функцию base64, поскольку отдельные параметры уже закодированы в base64.
Я пыталсяэто, но я получаю сообщение об ошибке (показать ниже):
"UserData" : {
"Fn::Join": [
"", [
{ "Fn::Base64":
{ "Fn::Join": [
"", [
"#!/bin/bash\n",
{"Fn::Join": ["", ["AWS_REGION=",{ "Ref" : "AWS::Region" },"\n"]]},
{"Fn::Join": ["", ["STACKNAME=",{ "Ref" : "AWS::StackName" },"\n"]]},
"LAUNCHCONFIG=LaunchConfig\n",
"# # Signalling cloudformation\n",
{"Fn::Join": ["", ["/opt/aws/bin/cfn-init -v --stack ",{ "Ref" : "AWS::StackName" }," --resource LaunchConfig --region ",{ "Ref" : "AWS::Region" },"\n"]]},
]
]}
},
{ "Ref" : "UserData" },
{ "Ref" : "UserData2" },
{ "Ref" : "UserData3" },
{ "Ref" : "UserData4" },
{ "Fn::Base64":
{ "Fn::Join": [
"", [
{"Fn::Join": ["", ["/opt/aws/bin/cfn-signal -e $? --stack ",{ "Ref" : "AWS::StackName" }," --resource AutoScalingGroup --region ",{ "Ref" : "AWS::Region" },"\n"]]},
]
]}
}
]
]
},
Получена ошибка:
UserData does not appear to be base64 encoded (Service: AmazonAutoScaling; Status Code: 400; Error Code: ValidationError
Я хочу избежать ситуациигде мне нужно знать соответствующие параметры заблаговременно - и, таким образом, генерировать новый сценарий пользовательских данных, включая детали, которые могут быть переданы в качестве параметра, - поскольку я хотел бы избежать создания пользовательского файла пользовательских данных, специально предназначенного для использования с облачной информацией.
Я передал пустые значения для четырех параметров 'userdata', поэтому кажется, что начальные и конечные элементы в соединении не кодируются в base64.Я ценю любое понимание этого, или как я могу выполнить то, что я описал.