【问题标题】:how to reference conditional variables in custom block in serverless.yaml如何在 serverless.yaml 的自定义块中引用条件变量
【发布时间】:2021-07-08 20:38:53
【问题描述】:

我正在尝试部署其变量取决于不同环境的无服务器应用程序。 目前我只需要根据环境修改custom块中的customDomain即可:

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

我想根据我是否调用 serverless deploy 来设置 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-services amazon-cloudformation serverless-framework serverless


    【解决方案1】:

    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 部分。

    【讨论】:

    • 它可以工作,但我认为你的答案有误,因为${self:provider.stage} 实际上应该是${opt:stage}(至少它是这样工作的)
    猜你喜欢
    • 2018-11-03
    • 2022-12-04
    • 2022-07-01
    • 1970-01-01
    • 2019-12-26
    • 2021-03-24
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    相关资源
    最近更新 更多