Visual Studio 2017 年的 AWS 工具

AWS Tools for Visual Studio 2017

我正在使用 visual studio 2017 的 Aws 工具包中包含的模板来创建无服务器 asp.net 核心 2 Web api 服务,该服务代理托管在 aws 中的 S3 存储桶拉姆达函数。我可以使用 dotnet cli

部署它
dotnet lambda deploy-serverless

子命令的所有参数都存储在 aws-lambda-tools-defaults.json 文件。除了为 CloudFormation 模板设置的参数外,一切都按预期工作

{
"Information" : [
    "This file provides default values for the deployment wizard inside Visual Studio and the AWS Lambda commands added to the .NET Core CLI.",
    "To learn more about the Lambda commands with the .NET Core CLI execute the following command at the command line in the project root directory.",
    "dotnet lambda help",
    "All the command line options for the Lambda command can be specified in this file."
],
"profile"     : "Development",
"region"      : "ap-southeast-2",
"configuration" : "Release",
"framework"     : "netcoreapp2.0",
"s3-prefix"     : "s3-prefix/",
"s3-bucket"     : "s3-bucket-name",
"stack-name"    : "stack-name",
"template"      : "serverless.template",
"template-parameters" : "\"ShouldCreateBucket\"=\"true\";\"BucketName\"=\"app-bucket-name\"",
    "stack-wait"          : true
}

在创建堆栈之前,这些参数不会传递到模板中。任何人都可以阐明这一点吗?我是不是遗漏了什么或者是 visual studio 的 aws 工具的错误?

感谢您的宝贵时间!

好的,现在可以回答我自己的问题了……这是人为错误……真令人尴尬。我在 "Conditions" 中打错了,所以 BucketNameNotProvided 总是错误的。

"Conditions" : {
"CreateS3Bucket" : {"Fn::Equals" : [{"Ref" : "ShouldCreateBucket"}, "true"]},
"BucketNameNotProvided" : {"Fn::Equals" : [{"Ref" : "BucketName"}, ""]}}

因此,模板 "BucketName" 已从 "Properties" 中删除,导致 Bucket 具有自动生成的名称。

"Bucket" : {
    "Type" : "AWS::S3::Bucket",
    "Condition" : "CreateS3Bucket",
    "Properties" : {
        "BucketName" : { "Fn::If" : ["BucketNameNotProvided", {"Ref" : "AWS::NoValue" }, { "Ref" : "BucketName" } ] }
    }
}