在无服务器框架中引用现有的Cloudformation堆栈输出

时间:2016-12-05 20:49:06

标签: amazon-web-services amazon-cloudformation serverless-framework

我们正在评估是否将Serverless用于我们的一些新AWS应用基础架构。我们大量使用Cloudformation(由Ansible部署),因此我们需要能够干净地引用现有Cloudformation堆栈的输出 - 一个直接的例子是获取我们现有AWS网络基础设施的子网ID供lambda函数使用

经过大量浏览后,我还没有看到开箱即用的方式。我们现有的Cloudformation堆栈被命名为如果我可以只键入堆栈的名称和所需的输出变量,我可以在各种环境中可靠地获得所需的输出。我看到的一个可能的解决方案是使用aws cli提取变量并将它们作为环境变量传递给无服务器,但如果可能的话我想要一种更清晰的方法。

2 个答案:

答案 0 :(得分:4)

如果Serverless Framework允许您在CloudFormation模板中使用Intrinsic Functions,则可以通过create cross-stack references从一个堆栈exporting stack output values内使用Exports Fn::ImportValue Outputs部分中的属性),并使用另一个堆栈中的enter image description here内部函数来引用导出的值。

答案 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表单。