gpt4 book ai didi

python - 使用 Lambda 将 StackId 写入 S3

转载 作者:行者123 更新时间:2023-12-03 07:37:47 35 4
gpt4 key购买 nike

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

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

MYnestedStack-Ec2Stack-1WQDHSJFIFNFN

我想将此值存储在 S3 存储桶中,以便我可以使用该 ID 删除堆栈,而无需手动转到 AWS cloudformation 控制台删除相同的内容..

我已经按照下面@ataylor的建议进行了尝试,但出现错误

“响应 JSON 序列化期间发生错误:datetime.datetime(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 序列化期间发生错误:cloudformation.StackResource(stack_name='Mystack', Logical_id='Ec2Stack') 不可 JSON 序列化”

import boto3
import time
import json

cloudformation = boto3.resource('cloudformation')
stack_resource = cloudformation.StackResource('prodUpgradeForchestartorFullStack','ApplicationStack')

def lambda_handler(event, context):
return stack_resource

请大家推荐!!

最佳答案

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

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

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

aws cloudformation describe-stack-resources \
--query 'StackResources[?LogicalResourceId==`MYnestedStack`].[PhysicalResourceId][]' \
--stack-name Ec2Stack

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

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

关于python - 使用 Lambda 将 StackId 写入 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38252367/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com