首页 > 解决方案 > 如何在 serverless.yaml 的自定义块中引用条件变量

问题描述

我正在尝试部署一个无服务器应用程序,其变量取决于不同的环境。到目前为止,我只需要根据环境修改块customDomaincustom的:

custom:
    domainName: my-domain.example.com
    certificateArn: arn:aws:acm:us-west-2:123123123:certificate/acm-id-based-on-env

我想根据我是否使用以下方式调用无服务器部署来设置 domainName 和 certificateArn:

serverless deploy --stage dev <<--- use some vars for domainName and certficiateArn
serverless deploy --stage prod <<--- use different vars for domainName and certificateArn

似乎在资源块中我应该被允许执行以下操作:

resources:
  Mappings:
    config:
      dev:
        domain_name: dev-domain.example.com 
        acm_arn: arn:aws:acm:us-west-2:123123123:certificate/prod-id
      prod:
        domain_name: prod-domain.other-domain.com
          acm_arn: arn:aws:acm:us-west-2:123123123:certificate/dev-id

但我不知道如何在自定义块中引用这些,甚至不知道这是否可能。

标签: amazon-web-servicesamazon-cloudformationserverless-frameworkserverless

解决方案


resources您指定 CloudFormation 模板时,除非您想在不应该使用的 CloudFormation 中使用它。

我猜你想在你的函数中添加变量作为环境变量,这是无服务器框架中最常见的方法:

custom:
  domain_name:
    dev: dev-domain.example.com
    prod: prod-domain.other-domain.com
  acm_arn:
    dev: arn:aws:acm:us-west-2:123123123:certificate/dev-id
    prod: arn:aws:acm:us-west-2:123123123:certificate/prod-id
...
provider:
  ...
  environment:
    DOMAIN_NAME: ${self:custom.domain_name.${self:provider.stage}}
    ACM_ARN: ${self:custom.acm_arn.${self:provider.stage}}

您为每个阶段添加它们,custom然后引用它们并将它们插入该environment部分。


推荐阅读