如何在AWS Lambda中加载AWS Cloudformation的输出?

时间:2020-07-16 00:10:58

标签: amazon-web-services aws-lambda

嗨,我有一个cloudformation堆栈,它创建了几个ec2实例。而且我计划使用aws lambda SSH到那些ec2实例中进行管理。

我需要向aws lambda函数提供这些ec2实例的IP地址。我需要删除堆栈并重新运行以进行测试。因此,每次我重新运行cloudformation堆栈时,实例的ip地址都不同。我无法对aws lambda函数进行硬编码或将这些IP地址设置为环境变量。

堆栈的名称将相同。我设置了cloudformation堆栈,以输出每个ec2实例的IP地址。因此,我认为我可以使用堆栈名称作为参考,让我的aws lambda函数访问并加载其输出以实现此目标。

我发现了类似的帖子:AWS lambda read parameter or outputs from CloudFormation这样说。

但是他只描述了“授予Lambda函数cloudformation:DescribeStacks权限以读取CloudFormation堆栈的输出并在运行时将其加载到代码中。”

有人可以向我提供有关如何在AWS Lambda中加载的更多具体步骤吗?我找不到有关此的任何AWS文档,所以有人可以帮助我吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您将使用DescribeStacks(),它将返回所有堆栈的列表。例如,如果使用Python,它将是describe_stacks()

返回信息中包括每个堆栈的Outputs列表。您可以从那里获取所需的信息。

那会是这样的:

import boto3

cf_client = boto3.client('cloudformation')

response = cf_client.describe_stacks(StackName='foo')

for output in response['Stacks'][0]['Outputs']:
    print(output['OutputKey'], output['OutputValue'])