2016-12-21 3 views
3

При попытке обновить стек CloudFormation в АМС кли:Обновление стека CloudFormation от AWS Cli с SAM преобразования

aws --profile dev cloudformation update-stack --stack-name mystackname --template-body file://events-list.yaml 

Я получаю следующее сообщение об ошибке

An error occurred (ValidationError) when calling the UpdateStack operation: UpdateStack cannot be used with templates containing Transforms. 

Поскольку я использую AWS бессерверную преобразование для развертывания лямбда-функций

Transform: 'AWS::Serverless-2016-10-31' 

Есть ли способ CLI выполнить этот этап k, или мне придется работать над моим APM в графическом интерфейсе.

ответ

11

Вы можете использовать deploy вместо update-stack:

aws cloudformation deploy \ 
    --template-file serverless-output.yaml \ 
    --stack-name new-stack-name \ 
    --capabilities CAPABILITY_IAM 

Эта команда необходима, потому что Transforms должны быть pplied с использованием change sets, который команда deploy автоматизирует для вас. См. Working with Stacks that Contain Transforms для дальнейшего обсуждения:

Чтобы создать или обновить стек с помощью преобразований, вы должны создать набор изменений, а затем выполнить его. В наборе изменений описаны действия, которые AWS CloudFormation будет принимать на основе обработанного шаблона. Во время обработки AWS CloudFormation преобразует синтаксис AWS SAM в синтаксис, который определяется преобразованием. Обработка может добавлять многократные ресурсы, о которых вы, возможно, не знаете. Например, специализированный ресурс AWS::Serverless::Function добавляет роль выполнения AWS Identity and Access Management (IAM) и функцию Lambda.

Для того чтобы вы знали о всех изменениях, внесенных преобразованиями, AWS CloudFormation требует использования наборов изменений. [...]

Если вы используете AWS CLI, вы можете использовать команды package и deploy, чтобы уменьшить количество шагов для запуска стеков с преобразованиями.

2

Попробуйте с развертыванием вместо обновления стеком

AWS CloudFormation развернуть \ --template-файл бессерверный-output.yaml \ --stack имя нового стека имя \ --capabilities CAPABILITY_IAM

+1

Конечно, добавлен ответ со ссылками на дополнительную документацию о различии между двумя командами. – wjordan

Смежные вопросы