You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从CloudFormation已删除栈列表中获取指定StackId

问题

需要通过AWS CloudFormation的list_stacks()方法,筛选出名称包含BastionInfraStack、状态为DELETE_COMPLETE的最近删除的栈,并提取其StackId。

list_stacks()返回结果如下:

{"StackSummaries": [{"StackId": "arn:aws:cloudformation:us-east-2:111111111:stack/Dev-BastionInfraStack/34deb540-9c2f-11ed-90a7-022b01b65a64", "StackName": "Dev-BastionInfraStack", "CreationTime": "2023-01-24T21:36:48.468000+00:00", "LastUpdatedTime": "2023-01-24T21:37:26.782000+00:00", "DeletionTime": "2023-01-24T22:19:03.403000+00:00", "StackStatus": "DELETE_COMPLETE", "DriftInformation": {"StackDriftStatus": "NOT_CHECKED"}}, {"StackId": "arn:aws:cloudformation:us-east-2:111111111:stack/TestInfraStack/cf6d58d0-9b8c-11ed-a58b-02446413ef88", "StackName": "Dev-BastionInfraStack", "CreationTime": "2023-01-24T16:53:12.552000+00:00", "LastUpdatedTime": "2023-01-24T20:45:36.941000+00:00", "DeletionTime": "2023-01-24T21:15:49.673000+00:00", "StackStatus": "DELETE_COMPLETE", "DriftInformation": {"StackDriftStatus": "NOT_CHECKED"}}, {"StackId": "arn:aws:cloudformation:us-east-2:111111111:stack/Dev-BastionInfraStack/54bcf7c0-9b51-11ed-bae1-02f106ea059a", "StackName": "Dev-BastionInfraStack", "CreationTime": "2023-01-23T19:08:33.666000+00:00", "LastUpdatedTime": "2023-01-23T19:09:06.759000+00:00", "DeletionTime": "2023-01-23T20:59:59.677000+00:00", "StackStatus": "DELETE_COMPLETE", "DriftInformation": {"StackDriftStatus": "NOT_CHECKED"}}]}

当前已有的获取栈列表代码:

deleted_stacks = cfn.list_stacks(StackStatusFilter=['DELETE_COMPLETE'])
解决方案

可以通过以下步骤实现需求:

  1. 从返回结果中筛选出StackName包含BastionInfraStack的栈
  2. 按DeletionTime降序排序,确保最近删除的栈排在首位
  3. 提取排序后第一个栈的StackId

具体代码示例:

# 获取已删除的栈列表
deleted_stacks = cfn.list_stacks(StackStatusFilter=['DELETE_COMPLETE'])
stack_summaries = deleted_stacks.get('StackSummaries', [])

# 筛选名称包含BastionInfraStack的栈(简单包含匹配,无需正则)
target_stacks = [
    stack for stack in stack_summaries
    if 'BastionInfraStack' in stack['StackName']
]

# 按删除时间降序排序,最近删除的在前
target_stacks_sorted = sorted(
    target_stacks,
    key=lambda x: x['DeletionTime'],
    reverse=True
)

# 提取最近删除的栈的StackId
if target_stacks_sorted:
    latest_deleted_stack_id = target_stacks_sorted[0]['StackId']
    # 后续可直接使用latest_deleted_stack_id变量
else:
    latest_deleted_stack_id = None
    print("未找到符合条件的栈")

说明

  • 若需要更复杂的匹配规则(比如前缀/后缀匹配),可以替换为正则表达式,例如:import re; re.search(r'^.*BastionInfraStack.*$', stack['StackName'])
  • 排序逻辑依赖DeletionTime字段的时间格式,AWS返回的时间字符串可直接用于排序比较
  • 增加空列表判断,避免无符合条件栈时触发索引错误

内容的提问来源于stack exchange,提问作者msaavedra91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:35:21