Кластер Cloudformation ECS

Я пытаюсь написать шаблон формирования облака, который создаст конфигурацию запуска, ASG, кластер ECS и зарегистрирует экземпляры ec2 в ASG в указанном кластере.

У меня есть длинный файл userdata.sh, который используется для настройки конфигурации запуска.

Поместив эти пользовательские данные в файл yaml, т.е.

   ...
   UserData:
      Fn::Base64: !Sub | 
        #!/bin/bash
        ...

это выглядит довольно ужасно. Кроме того, когда я пытаюсь вставить имя кластера в агент ecs $ {ECSCluster} с помощью Sub, я получаю «имена переменных в синтаксисе Fn :: Sub должны содержать только буквенно-цифровые символы, подчеркивания, точки и двоеточия». Переменные среды в моих пользовательских данных принимают ту же форму $ {ENV_VARIABLE}.

Я пробовал передать файл пользовательских данных в стек AWS Cloudformation, но получил " Ошибка формата шаблона: неверный формат YAML. "

Каков рекомендуемый способ передачи сложного файла userdata.sh в CFT таким образом, чтобы можно было добавить имя кластера в конфигурацию ecs-agent?




Ответы (1)


Ошибка просто указывает, что ей не нравится способ ссылки на переменную в Fn::Sub. Вместо $(ECSCluster) это должно быть ${ECSCluster}. См. примеры в документы.

person Dmitry Deryabin    schedule 15.08.2017
comment
Я действительно использую $ {ECSCluster}, это была опечатка, извините - person user2254140; 15.08.2017
comment
Почти наверняка существует проблема со ссылками на переменные в ваших пользовательских данных (или в любой другой части вашего шаблона CF, которая использует Fn::Sub). Возможно, компилятор шаблона CF считает что-то ссылкой на переменную, что не предназначено для этого. Трудно сказать, не увидев, как это выглядит. - person Dmitry Deryabin; 15.08.2017
comment
если я ссылаюсь на переменные среды в формате $ {ENV_VAR}, как CFT может различать переменные среды и ресурсы? - person user2254140; 15.08.2017
comment
Я считаю, что не может. Можете ли вы попробовать ссылаться на переменные среды как $ENV_VAR и оставить переменные шаблона CF в формате ${CFT_VAR}? - person Dmitry Deryabin; 16.08.2017