amazon-web-services - 使用 SAM 或 Cloudformation 将一个堆栈的输出用作其他堆栈中 lambda 的环境变量
问题描述
我想将一个 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
解决方案
另一种想法是使用 AWS Systems Manager Parameter Store 在 2 个堆栈之间共享数据。在QueueStack
中,添加一个AWS::SSM::Parameter
具有可预测路径的命名,例如/QueueStack/URL
:
Type: AWS::SSM::Parameter
Properties:
Type: String
Name: /QueueStack/URL
Value:
Ref: "MyQueue"
然后,在您LambdaStack
的 中QUEUE_URL
,您可以这样做来引用它:
Type: AWS::Lambda::Function
Properties:
Environment:
Variables:
QUEUE_URL: '{{resolve:ssm:/QueueStack/URL:1}}'
这是有关此主题的参考链接https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html
推荐阅读
- google-app-maker - 在数据源脚本构建器中使用 DatePicker 作为参数,
- java - 网格布局管理器
- django - Django - 进行 POST 时请求的资源上不存在“Access-Control-Allow-Origin”标头
- android - 如何在 kotlin 上捕获参数的数据类型?
- php - 通过php网页上传文件
- c# - C# - 有没有办法使用反射来概括 ASP.NET MVC Core 2.2 的每个可能视图模型的编辑视图
- vuejs2 - 我无法使用 $refs 获取表单元素
- php - 赶上 SQLite 错误“数据库已锁定”
- android - 在 Android 上使用 Opus 音频编码
- excel - MS Access 数据库关闭时,VBA 代码中的更新语句失败