【发布时间】:2019-11-29 07:12:12
【问题描述】:
我想将一个 cloudformation 堆栈的导出输出用作另一个堆栈中 lambda 的环境变量。
场景:
- Stack1:QueueStack - 包含一个 sqs 队列“myQueue”。堆栈导出 queueUrl 的输出:
"${AWS::StackName}-myQueueUrl" - Stack2:LambdaStack - 包含将在此队列中放入某些内容的 lambda 函数。 lambda 函数有一个环境。变量 'QUEUE_URL' 应该包含队列的 url。我想动态使用QueueStack输出的Url。类似的东西:
Type: AWS::Lambda::Function
Properties:
Environment:
Variables:
QUEUE_URL:
- Fn::ImportValue:
Fn::Sub: "${QueueStackParameter}-myQueueUrl"
但是这是不可能的,因为环境变量只能是字符串。
如何将一个 cloudformation 堆栈的导出输出用作另一个堆栈中 lambda 的环境变量,而 cloudformation 不会抱怨 env vars 必须是字符串?
更新
当这样写时,它确实有效:
QUEUE_URL: !Join
- ''
- - "Fn::ImportValue":
"Fn::Sub": "${QueueStackParameter}-myQueueUrl"
但是,当使用普通的ImportValue 语法时,它不起作用:
QUEUE_URL:
- Fn::ImportValue:
Fn::Sub: "${QueueStackParameter}-myQueueUrl"
CloudFormation 然后返回以下状态原因:
Value of property Variables must be an object with String (or simple type) properties
【问题讨论】:
-
我们在
Environment变量中大量使用Fn::ImportValue- 在lambda 函数、ECS 任务定义等中。所以它是已知的工作。也许还有一些更原始的错误,例如输出名称与您在ImportValue中指定的名称不匹配? -
@lexicore ,我更新了我的问题。当我第一次使用解决方法将其设置为
string时,它可以工作。但是在使用普通的ImportValue语法时它不起作用。我用示例更新了问题。 -
原来是语法错误。我不应该在前面使用“破折号”。这不是一个数组。
标签: amazon-web-services aws-lambda amazon-cloudformation