嗨,我有一个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文档,所以有人可以帮助我吗?
非常感谢!
答案 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'])