добавление / добавление в userdata, переданные в cloudformation - PullRequest
0 голосов
/ 07 июня 2018

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

1 Ответ

0 голосов
/ 07 июня 2018

Обычно я вижу:

    "UserData": {
      "Fn::Base64": {
        "Fn::Join": [
          "",
          [

Старайтесь сохранить преобразование base64 как самый внешний уровень, при этом закодированы скрипты внутреннего уровня , а не .

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