无服务器变量插值 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]
当使用无服务器框架部署我的应用程序时,我的 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]