我正在使用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可序列化的&# 34;
import boto3
import time
import json
cloudformation = boto3.resource('cloudformation')
stack_resource = cloudformation.StackResource('prodUpgradeForchestartorFullStack','ApplicationStack')
def lambda_handler(event, context):
return stack_resource
请建议!!
答案 0 :(得分:1)
您可以从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。