如何逃避$ signon无服务器yaml配置?

时间:2017-05-03 16:04:11

标签: amazon-web-services yaml aws-api-gateway serverless-framework

我想在api网关使用stage variables时转义$ sign。

尝试部署时出现以下错误。

  

变量stageVariables.capabilitySecurityUrl的变量引用语法无效。   您只能参考env vars,options和&文件。您   可以查看我们的文档以获取更多信息。

我尝试了以下选项,但没有正常工作

1)使用无引号   Uri:https:// $ {stageVariables.capabilitySecurityUrl}

2)使用引号   Uri:" https:// $ {stageVariables.capabilitySecurityUrl}"

3)从文件

访问变量
./stageVariables.json
{
   "capabilitySecurityUrl":"https://${stageVariables.capabilitySecurityUrl}"
}

./serverless.yml
${file(./stageVariables.json):capabilitySecurityUrl}

任何帮助?

4 个答案:

答案 0 :(得分:2)

正如作者所说,自定义 variableSyntax 对我有用:

  # notice the double quotes for yaml to ignore the escape characters!
  # Use this for allowing CloudFormation Pseudo-Parameters in your serverless.yml
  # e.g. ${stageVariables.my_var}. All other Serverless variables work as usual.
  variableSyntax: "\\${((?!stageVariables)[ ~:a-zA-Z0-9._@'\",\\-\\/\\(\\)]+?)}"

https://www.serverless.com/framework/docs/providers/aws/guide/variables/#using-custom-variable-syntax

答案 1 :(得分:0)

你需要使用双$符号进行转义。

尝试:

https://$${stageVariables.capabilitySecurityUrl}

来源:How can I escape a $ dollar sign in a YAML string?

作为旁注,这与在ES6文字字符串中转义$符号时使用的策略相同。

答案 2 :(得分:0)

您可以尝试使用Cloudformation Join function

Fn::Join: ['', ['https://$','{{stageVariables.capabilitySecurityUrl}}']]

答案 3 :(得分:0)

转义变量现在由 Serverless

原生支持

https://github.com/serverless/serverless/issues/3565

<块引用>

关闭,因为新的解析器支持转义,例如 ${self:} 将按字面意思进行