You need to enable JavaScript to run this app. 使用boto3获取CloudFormation Stack资源ARN时报AttributeError错误
优惠活动
大模型
产品
解决方案
定价
更多

使用boto3获取CloudFormation Stack资源ARN时报AttributeError错误

报错根因

你碰到的报错本质是混用了boto3的两类服务接口:

  • boto3.resource()返回的是高层封装的面向资源的服务对象,这类对象没有直接挂载list_stack_resources这类底层原始API的调用方法
  • list_stack_resources是CloudFormation底层client接口提供的方法,不能直接在resource类型的服务实例上调用
可落地的实现方案

修正接口初始化逻辑

把原来的resource调用替换为标准client初始化写法:

import boto3

cf_client = boto3.client(
    'cloudformation',
    aws_access_key_id='xxxxxxxx',
    aws_secret_access_key='xxxxxxxxxxxx'
)

拉取目标栈的全量资源

用修正后的client实例调用API获取栈下所有资源信息:

resp = cf_client.list_stack_resources(
    StackName='ORG-ROLES'
)
all_resources = resp['StackResourceSummaries']

你的目标栈仅包含9个资源,单次请求就能拿到全量结果,不需要处理分页逻辑。

提取目标资源的ARN

返回的资源列表中,每个条目的PhysicalResourceId字段,对CloudFormation支持的绝大多数资源类型来说,就是对应资源的正式ARN。你可以通过模板中定义的资源逻辑ID、资源类型做匹配,筛出需要的资源:
比如要找逻辑ID为OrgReadOnlyRole的资源对应的ARN,参考写法:

target_resource_id = 'OrgReadOnlyRole'
for resource in all_resources:
    if resource['LogicalResourceId'] == target_resource_id:
        print(f"目标资源ARN:{resource['PhysicalResourceId']}")

补充提示

如果后续栈内资源总数超过100个,list_stack_resources接口会默认分页返回结果,需要通过返回值中的NextToken字段循环拉取,直到获取全量资源列表。

内容的提问来源于stack exchange,提问作者Dani Wol.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 10:15:03