我们正在评估是否将Serverless用于我们的一些新AWS应用基础架构。我们大量使用Cloudformation(由Ansible部署),因此我们需要能够干净地引用现有Cloudformation堆栈的输出 - 一个直接的例子是获取我们现有AWS网络基础设施的子网ID供lambda函数使用
经过大量浏览后,我还没有看到开箱即用的方式。我们现有的Cloudformation堆栈被命名为如果我可以只键入堆栈的名称和所需的输出变量,我可以在各种环境中可靠地获得所需的输出。我看到的一个可能的解决方案是使用aws cli提取变量并将它们作为环境变量传递给无服务器,但如果可能的话我想要一种更清晰的方法。
答案 0 :(得分:4)
如果Serverless Framework允许您在CloudFormation模板中使用Intrinsic Functions,则可以通过create cross-stack references从一个堆栈exporting stack output values内使用Exports
Fn::ImportValue
Outputs
部分中的属性),并使用另一个堆栈中的内部函数来引用导出的值。
答案 1 :(得分:0)
我能够考虑处理您的示例案例的最简单方法是让lambda使用boto3
来调用boto3.client('cloudformation', region_name=*specified region*).describe_stacks(StackName=*specified stack*)['Stacks']
。此列表包含与指定的StackName
匹配的所有堆栈,如果所有网络基础架构共享其名称的子集,则可以通过为该子字符串指定StackName
来列出所有这些堆栈。每个Stack对象都包含一个'Outputs'
块。请参阅here。
如果您想在任何地方公开它以方便使用,可以将API Gateway GET方法附加到lambda并将其公开给HTML表单。