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?

2 ответа

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

Это может помочь кому-то еще, у кого есть подобные проблемы. Эта ошибка может произойти, даже если вы неправильно расставили закрывающие скобки переменных, например

       - !Sub 'https://sqs.${AWS::Region}.amazonaws.com/${AWS::AccountId/${SQSName}'

В приведенном выше коде } отсутствует в AccountId.