以下是由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对其进行解析?
答案 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._,\-\/\(\)]*?)}"