CloudFormation 和 PowerShell:模板格式错误:结构不受支持
Posted
技术标签:
【中文标题】CloudFormation 和 PowerShell:模板格式错误:结构不受支持【英文标题】:CloudFormation and PowerShell: Template format error: unsupported structure with 【发布时间】:2017-12-30 13:38:07 【问题描述】:在使用 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:模板格式错误:结构不受支持。在 行:1 字符:1 + Test-CFNTemplate -TemplateBody file://c:/temp/Test.template + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ + CategoryInfo : InvalidOperation: (Amazon.PowerShe...NTemplateCmdlet:TestCFNTemplateCmdlet) [测试-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://
,但这里似乎并非如此。
【问题讨论】:
【参考方案1】:-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/
【讨论】:
【参考方案2】:显然-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
【讨论】:
以上是关于CloudFormation 和 PowerShell:模板格式错误:结构不受支持的主要内容,如果未能解决你的问题,请参考以下文章
sql Powershell Migration工具http://stackingcode.com/blog/2011/10/12/database-migrations-with-powershel
powershell 来自https://stackoverflow.com/questions/31051103/how-to-export-a-class-in-powershell-v5-mod
AWS CloudFormation:Cognito LambdaTrigger CustomEmailSender - 属性“AWS CloudFormation 目前不支持。”和 CDK 的使用