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 )