在S3中使用Lambda写入StackId

2024-09-30 16:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是create_stack api,使用的是AWS Lambda(带嵌套堆栈)…但我想将每个堆栈Id存储在S3中,这是作为嵌套堆栈的一部分创建的。 我正在为Lambda函数使用python。在

每当单独的堆栈作为嵌套堆栈(cloudformation)的一部分创建时,它会为每个堆栈附加一个惟一的Id,如下所示

MYnestedStack-Ec2Stack-1wqdhsjfiffn

我想将这个值存储在s3bucket中,这样我就可以使用这个Id来删除堆栈,而不用手动去AWS cloudformation控制台删除它。。在

我已经尝试了@ataylor下面的建议,但我得到了错误

“响应的JSON序列化期间出错:日期时间。日期时间(2016,7,12,15,23,16,451000,tzinfo=tzlocal())不可JSON序列化“

import boto3
import time
import json

client = boto3.client('cloudformation')


response = client.describe_stack_resources(
    StackName='Mystack',
    LogicalResourceId='Ec2Stack'
)

def lambda_handler(event, context):
        return response

我也尝试了下面的代码,得到的错误是

“响应的JSON序列化期间出错:云信息.StackResource(stack_name='Mystack',logical_id='Ec2Stack')不可JSON序列化“

^{pr2}$

请建议!!在


Tags: lambdaimportclientawsidjson序列化stack
1条回答
网友
1楼 · 发布于 2024-09-30 16:31:47

您可以从CloudFormation API获取堆栈名称。特别是,如果父堆栈名为Ec2Stack,则可以通过以下命令行获取嵌套堆栈的名称:

aws cloudformation describe-stack-resources \
     query StackResources[].[PhysicalResourceId][] \
     stack-name Ec2Stack

如果您有逻辑标识并想要资源的物理标识,请使用:

^{pr2}$

您可以从python调用相同的API:http://boto3.readthedocs.io/en/latest/reference/services/cloudformation.html#stackresource。在

当您想删除堆栈或将其保存到S3时,可以直接从API中使用它。在

相关问题 更多 >