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

设置includeDeletedResources=False后,boto3的list_discovered_resources仍返回已删除资源

问题分析与解决

为什么includeDeletedResources=False仍返回已删除栈?

AWS Config的list_discovered_resources接口中,includeDeletedResources=False的作用是排除已被AWS Config标记为DELETED状态的资源,但CloudFormation栈被删除后,AWS Config的资源状态可能不会立刻同步更新,或者部分已删除的栈在Config中仍保留着非DELETED的状态(比如栈删除操作还未被Config完全捕获)。另外,控制台“已删除”标签下的栈,只是CloudFormation自身保留的删除记录,和AWS Config的资源发现状态不同步。

可行的解决办法

1. 过滤AWS Config返回结果的resourceStatus字段

调用接口后手动筛选resourceStatus为ACTIVE的资源,示例代码:

member_session = boto3.session.Session(
    aws_access_key_id=credentials["Credentials"]["AccessKeyId"],
    aws_secret_access_key=credentials["Credentials"]["SecretAccessKey"],
    aws_session_token=credentials["Credentials"]["SessionToken"],
)
config_client = member_session.client('config')
response = config_client.list_discovered_resources(
    resourceType="AWS::CloudFormation::Stack",
    includeDeletedResources=False
)
# 筛选活跃资源
active_stacks = [res for res in response['resourceIdentifiers'] if res['resourceStatus'] == 'ACTIVE']

2. 直接调用CloudFormation的describe_stacks接口

如果目标只是获取活跃的CloudFormation栈,直接用CloudFormation客户端的接口更准确——它直接查询CloudFormation服务的活跃栈列表,不会包含已删除的栈:

cf_client = member_session.client('cloudformation')
response = cf_client.describe_stacks()
active_stacks = response['Stacks']

补充说明

AWS Config主要用于配置合规审计,其资源发现的状态同步可能存在延迟;而CloudFormation自身的接口是获取栈状态的最直接方式。如果必须用AWS Config,建议结合resourceStatus过滤,或者等待Config完成状态同步(通常几分钟到几十分钟不等,取决于资源类型和AWS内部处理速度)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:35:18