Невозможно изменить стек CloudFormation кластера ECS - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь изменить шаблон стека CloudFormation кластера ECS. Для начала я хочу просто скопировать той же конфигурации.

Исходный стек CloudFormation был создан ECS с помощью команды ecs-cli:

ecs-cli configure --cluster test-cluster --region eu-central-1 --default-launch-type EC2 --config-name test-cluster-config  
ecs-cli up --keypair Test --capability-iam --vpc $VPC --subnets $SUBNET_ID --security-group $SECURITY_GROUP_ID --size 1 --instance-type t2.micro --cluster-config test-cluster-config --force

Команды выше выполняются без проблем и настраивают кластер. Я успешно воссоздал этот кластер несколько раз и развернул на нем задачи ECS.

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

CFTEMP=$(mktemp ./jqXXXX.json)  
aws cloudformation get-template --stack-name amazon-ecs-cli-setup-test-cluster | jq .TemplateBody | xargs -0 printf | tail -c +2 | head -c -3 > $CFTEMP  
aws cloudformation update-stack --stack-name amazon-ecs-cli-setup-test-cluster --capabilities CAPABILITY_IAM --template-body "file://$CFTEMP"

Ссылка на содержимое $ CFTEMP (в пастбине) - https://pastebin.com/SxW0aJwa

Краткое описание кода выше (для людей, не владеющих Bash) следующее: создайте временный файл в текущей папке и сохраните имя в CFTEMP; получить шаблон AWS CF, извлечь TemplateBody из JSON (используя замечательный инструмент jq), преобразовать экранированные символы в теле в их действительные значения (например, \ n в новую строку), удалить 2 строки сверху и 3 строки снизу (что приводит к «разворачиванию» JSON) и сохранению вывода в $ CFTEMP; наконец, обновите шаблон стека данными из файла $ CFTEMP.

Для проверки шаблона я также выполняю следующий вызов validate-template:

aws cloudformation validate-template --template-body "file://$CFTEMP"

Результаты команды validate-template: здесь (снова вставка), но суть - насколько я понимаю, ошибок нет, для этого шаблона требуется возможность IAM, и я предоставляю ее явно с --capabilities CAPABILITY_IAM в команде update-stack.

Теперь, наконец, то, что я ожидаю , произойдет после того, как стек обновлений будет обновлен. Вместо этого команда возвращает успех, однако спустя минуту журналы CloudFormation сообщают, что статусом стека является UPDATE_ROLLBACK_COMPLETE. Журналы заполнены состояниями CREATE_IN_PROGRESS, CREATE_COMPLETE, UPDATE_IN_PROGRESS и аналогичными, однако первой ошибкой является следующее загадочное сообщение:

1 validation error detected: Value '' at 'imageId' failed to satisfy constraint: Member must have length greater than or equal to 1 (Service: AmazonAutoScaling; Status Code: 400; Error Code: ValidationError; Request ID: <REDACTED>)

Более длинный список событий журнала можно увидеть

здесь (ссылка на Imgur).

Просто для записи, то же самое происходит, когда я пытаюсь выполнить обновление с помощью опции «Просмотр / редактирование в конструкторе шаблонов» в веб-интерфейсе AWS.

Вопрос : Как обновить шаблон стека CF из CLI? Я хочу добавить одну команду к части UserData шаблона, но сейчас я не могу даже обновить с помощью буквально того же шаблона.

Я могу предоставить дополнительную информацию, такую ​​как полные журналы процесса обновления шаблона, а также полный вывод всех выполненных команд.

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