在使用PowerShell时,我无法使用任何CloudFormation模板进行部署或验证,但使用确切模板我使用AWS CLI或使用AWS控制台时没有遇到任何问题。
让我们采用一个基本的CloudFormation模板,让我们称之为Test.template
。
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "Simple template.",
"Parameters" : {
"KeyName" : {
"Type" : "String",
"Description" : "Name of an existing EC2 KeyPair to enable SSH access to the web server"
}
},
"Resources" : {
"Ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"KeyName" : "test",
}
}
}
}
没什么特别的,非常基本的。在创建EC2资源时忽略这会失败,这是一个格式正确的JSON CloudFormation模板。
现在,如果我使用AWS CLI运行此命令,它会成功返回并输出参数:
aws cloudformation validate-template --template-body file://c:/temp/Test.template
使用完全相同的文件,如果我在PowerShell中运行它,我会收到错误:
Test-CFNTemplate -TemplateBody file://c:/temp/Test.template
Test-CFNTemplate:模板格式错误:不支持的结构。在 line:1 char:1 + Test-CFNTemplate -TemplateBody file:// c:/temp/Test.template + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ + CategoryInfo:InvalidOperation:(Amazon.PowerShe ... NTemplateCmdlet:TestCFNTemplateCmdlet) [Test-CFNTemplate],InvalidOperationException + FullyQualifiedErrorId:Amazon.CloudFormation.AmazonCloudFormationException,Amazon.PowerShell.Cmdlets.CFN.TestCFNTemplateCmdlet
使用AWS控制台或使用aws cloudformation create-stack
部署此模板也没有问题我无法弄清楚为什么我无法使用PowerShell执行此操作。
New-CFNStack
也会返回相同的错误:
模板格式错误:不支持的结构。
我安装了最新版本的AWS PowerShell模块,并且我正在运行Powershell 5.1.14409.1012
我发现的有关此错误的其他所有内容都来自有问题的人,因为他们在TemplateBody中没有使用file://
,但在这里似乎并非如此。
答案 0 :(得分:3)
显然-TemplateBody
不支持本地文件URI。您首先需要将模板读入变量,并使用如下所示。
$content = [IO.File]::ReadAllText("c:\test.template")
Test-CFNTemplate -TemplateBody $content
这样做之后,它现在会给你预期的输出。
Test-CFNTemplate -TemplateBody $content
Capabilities : {}
CapabilitiesReason :
DeclaredTransforms : {}
Description : Simple template.
Parameters : {KeyName}
答案 1 :(得分:0)
-TemplateBody不支持本地文件URI太糟糕了。幸运的是,您仍然可以明确指定它们是内联文件。
Test-CFNTemplate -TemplateBody (get-content c:\test.template -Raw)
该命令应返回预期结果。
Test-CFNTemplate -TemplateBody (get-content c:\test.template -Raw)
Capabilities : {}
CapabilitiesReason :
DeclaredTransforms : {}
Description : Simple template.
Parameters : {KeyName}
我不能声称这是我的解决方案,就像我从以下博客中读过的那样:https://matthewdavis111.com/aws/test-cloudformation-powershell/