无服务器变量插值 env:VAR 使用 Fn::GetAtt 回退

Serverless variable interpolation env:VAR fallback using Fn::GetAtt

当使用无服务器框架部署我的应用程序时,我的 staging/production 环境使用相应的 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] }
    }

如何做到这一点?

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

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