AWS CLI Update_Stack无法传递包含/的参数值

时间:2018-06-01 16:21:43

标签: amazon-web-services powershell amazon-s3 amazon-cloudformation aws-cli

我整个上午一直试图创建一个最终更新AWS堆栈的powershell脚本。一切都很好,直到我必须将参数传递给cloudformation模板。

其中一个参数值(ParameterKey = ZipFilePath)包含一个/。但脚本失败抱怨它期待a =但发现了一个/。我试图逃避斜线但是API抱怨它发现反斜杠而不是等于。我哪里错了?

... <snip creating a zip file> ...

 $filename = ("TotalCommApi-" + $DateTime + ".zip")

aws s3 cp $filename ("s3://S3BucketName/TotalCommApi/" + $filename)

aws cloudformation update-stack --stack-name TotalCommApi-Dev --template-url https://s3-region.amazonaws.com/S3bucketName/TotalCommApi/TotalCommApiCFTemplate.json --parameters ParameterKey=S3BucketName,ParameterValue=S3BucketNameValue,UsePreviousValue=false ParameterKey=ZipFilePath,ParameterValue=("TotalCommApi/" + $filename) ,UsePreviousValue=false

cd C:\Projects\TotalCommApi\TotalComm_API

以下是CloudFormation模板的相关部分:

    "Description": "An AWS Serverless Application that uses the ASP.NET Core framework running in Amazon Lambda.",
"Parameters": {
        "ZipFilePath": {
            "Type": "String",
            "Description": "Path to the zip file containing the Lambda Functions code to be published."
        },
        "S3BucketName": {
            "Type": "String",
            "Description": "Name of the S3 bucket where the ZipFile resides." 
        } 
},
"AWSTemplateFormatVersion": "2010-09-09",
"Outputs": {},
"Conditions": {},
"Resources": {
    "ProxyFunction": {
        "Type": "AWS::Lambda::Function",
        "Properties": {
            "Code": {
                "S3Bucket": {"Ref": "S3BucketName" },
                "S3Key": { "Ref": "ZipFilePath" }
            },

这是PowerShell ISE生成的错误消息

[图片已删除]

更新:我使用的是Powershell 2附带的Windows 7.我升级到Powershell 4.然后我的脚本产生了这个错误:

AWS CLI Error

根据咨询公司的建议,我卸载了我通过msi安装的CLI,然后将Python升级到3.6.2,然后通过pip重新安装CLI。我仍然得到同样的错误。我在屏幕上回显了这个命令,这就是我所看到的:

upload: .\TotalCommApi-201806110722.zip to s3://S3bucketName/TotalCommApi/TotalCommApi-201806110722.zip
aws
cloudformation
update-stack
--stack-name
TotalCommApi-Dev
--template-url
https://s3-us-west-2.amazonaws.com/s3BucketName/TotalCommApi/TotalCommApiCFTemplate.json
--parameters
ParameterKey=S3BucketName
UsePreviousValue=true
ParameterKey=ZipFilePath
ParameterValue=TotalCommApi/TotalCommApi-201806110722.zip

1 个答案:

答案 0 :(得分:0)

很抱歉延迟回复你了 - 好消息是我可能会暗示你的问题是什么。

ParameterKey=ZipFilePath,ParameterValue=("TotalCommApi/" + $filename) ,UsePreviousValue=false

我正在疯狂地试图重现这个问题。为什么?因为我假设("TotalCommApi/" + $filename)之后的空格是复制的工件,而不是您使用的实际值。当我添加空格时:

aws cloudformation update-stack --stack-name test --template-url https://s3.amazonaws.com/test-bucket-06-09/test.template --parameters ParameterKey=S3BucketName,ParameterValue=$bucketname,UsePreviousValue=false ParameterKey=ZipFilePath,ParameterValue=testfolder/$filename ,UsePreviousValue=false
Error parsing parameter '--parameters': Expected: '=', received: ','

这不是您的错误消息(而不是/),但我认为在您的情况下可能是类似的问题 - 请检查以确保您的命令中使用的值不在#39;在某处有额外的空间。