AWS: при вызове операции Creat eStack произошла ошибка клиента (ValidationError): требуется ParameterValue для ParameterKey ...

Я пытаюсь создать сценарий PowerShell, который, помимо прочего, создает стек AWS CloudFormation. У меня проблемы с командой aws cloudformation create-stack, однако, похоже, что она не подбирает параметры. Вот фрагмент кода, доставляющий мне неприятности:

$version = Read-Host 'What version is this?'
aws cloudformation create-stack --stack-name Cloud-$version --template-body C:\awsdeploy\MyCloud.template --parameters ParameterKey=BuildNumber,ParameterValue=$version

Я получаю ошибку:

aws : 
At C:\awsdeploy\Deploy.ps1:11 char:1
+ aws cloudformation create-stack --stack-name Cloud-$version --template-bo ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

A client error (ValidationError) occurred when calling the CreateStack operation: ParameterValue for ParameterKey BuildNumber is required

Я знаю, что скрипт CloudFormation в порядке, потому что я могу выполнить его без проблем через проводник AWS. Раздел параметров выглядит следующим образом:

"Parameters" : {
    "BuildNumber" : { "Type" : "Number" }
  },

Я пробовал следующее, ни один из которых, кажется, не помогает:

  • замена $version статическим значением
  • изменение типа параметра с номера на строку
  • пытается передать список параметров в формате JSON

Никаких кубиков ни на одном из них, та же ошибка. Как будто просто не принимает параметры по какой-то причине. Есть идеи?

1 ответ

Решение

Держу пари, что Powershell с трудом разбирает запятую и впоследствии теряет ParameterValue. Вы можете попробовать обернуть весь раздел после --parameter в строке (в двойных кавычках, так $version все еще решает)

aws cloudformation create-stack --stack-name Cloud-$version --template-body C:\awsdeploy\MyCloud.template --parameters "ParameterKey=BuildNumber,ParameterValue=$version"

Или, если это не удалось, попробуйте явно запустить строку в среде cmd.


Если вы заинтересованы в альтернативном решении, AWS внедрила свои инструменты командной строки в отдельную утилиту под названием AWS Tools for Powershell. create-stack карты для New-CFNStack как показано в этой документации: New-CFNStack Docs

Похоже, это будет эквивалентный вызов:

$p1 = New-Object -Type Amazon.CloudFormation.Model.Parameter 
$p1.ParameterKey = "BuildNumber" 
$p1.ParameterValue = "$version" 

New-CFNStack -StackName "cloud-$version" ` 
-TemplateBody "C:\awsdeploy\MyCloud.template" ` 
-Parameters @( $p1 )
Другие вопросы по тегам