使用Fn :: GetAtt的无服务器变量插值env:VAR后备

时间:2020-10-14 09:10:32

标签: yaml amazon-cloudformation serverless-framework

在使用无服务器框架部署我的应用程序时,我的登台/生产环境会使用相应的ElasticCache实例作为应用程序所需资源的一部分进行旋转,并将端点设置为环境变量。

  environment:
    REDIS_URL:
      Fn::Join:
        - ''
        - - 'redis://'
          - Fn::GetAtt: [ElasticCacheCluster, RedisEndpoint.Address]

上面的实现效果很好,但是使用serverless-offline时显然不能得到真正的端点,并且REDIS_URL最终以redis://[object Object]的形式出现。

我想做的是使用env:REDIS_URL(如果存在),如果不存在,请如上所述使用Fn :: GetAtt进行设置。

鉴于正常的后备语法为${env:REDIS_URL, fallback},我以为我可以使用上述Fn:GetAtt的某种形式,但我似乎无法使用该语法。

  environment:
    REDIS_URL: ${env:REDIS_URL,
      { Fn::Join:
        - ''
        - - 'redis://'
          - Fn::GetAtt: [ElasticCacheCluster, RedisEndpoint.Address] }
    }

这怎么办?

1 个答案:

答案 0 :(得分:0)

计算Fn:Join,然后在环境配置中将其引用为后备,似乎可行。

provider:
  environment:
    REDIS_URL: ${env:REDIS_URL, self:custom.REDIS_URL}
custom:
  REDIS_URL:
    Fn::Join:
      - ''
      - - 'redis://'
        - Fn::GetAtt: [ElasticCacheCluster, RedisEndpoint.Address]