无服务器语法和CloudFormation语法之间似乎冲突

时间:2018-11-28 15:46:34

标签: amazon-cloudformation serverless-framework

以下是由Serverless加载的CloudForamtion文件的一部分。

# resource.yml
.
.
.
{"Fn::Sub": "arn:aws:sqs:*:${AWS::AccountId}:sqs-spoon-*-${env:SERVICE}"}

# serverless.yml
.
.
resources:
  - ${file:resource.yml}

${AWS::AccountId}是CloudFormation伪参数,${env:SERVICE}是无服务器变量。

当我运行sls deploy时,它将返回错误。

  Invalid variable reference syntax for variable AWS::AccountId. You can only reference env vars, options, & files. You can check our docs for more info.

似乎说Serverless将${AWS::AccountId}识别为Serverless变量,而不是CloudFormation伪参数。

对吗?

如果是这样,如何让Serverless不解析伪参数,以便稍后CloudFormation对其进行解析?

2 个答案:

答案 0 :(得分:1)

我可以用plugin解决它。

使用该插件,可以将${AWS::AccountId}替换为#{AWS::AccountId}来解决它的问题。

{"Fn::Sub": "arn:aws:sqs:*:#{AWS::AccountId}:sqs-spoon-*-${env:SERVICE}"}

答案 1 :(得分:0)

您可以使用serverless.yml中的单个配置行来定义variableSyntax,从而完成对本机AWS语法的支持。详细信息可以在https://github.com/serverless/serverless/pull/3694处找到。

provider:
  name: aws
  runtime: nodejs8.10
  variableSyntax: "\${((env|self|opt|file|cf|s3)[:\(][ :a-zA-Z0-9._,\-\/\(\)]*?)}"