gpt4 book ai didi

python - 如何使用 boto3 cloudformation 资源列出和过滤堆栈?

转载 作者:行者123 更新时间:2023-12-03 07:21:20 26 4
gpt4 key购买 nike

我想获取基于给定状态集的堆栈列表。我知道使用 boto3 客户端进行云信息处理的解决方案,例如来自documentation :

response = client.list_stacks(
NextToken='string',
StackStatusFilter=[
'CREATE_IN_PROGRESS'|'CREATE_FAILED'|'CREATE_COMPLETE'|
'ROLLBACK_IN_PROGRESS'|'ROLLBACK_FAILED'|'ROLLBACK_COMPLETE'|
'DELETE_IN_PROGRESS'|'DELETE_FAILED'|'DELETE_COMPLETE'|
'UPDATE_IN_PROGRESS'|'UPDATE_COMPLETE_CLEANUP_IN_PROGRESS'|
'UPDATE_COMPLETE'|'UPDATE_ROLLBACK_IN_PROGRESS'|'UPDATE_ROLLBACK_FAILED'|
'UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS'|'UPDATE_ROLLBACK_COMPLETE'|
'REVIEW_IN_PROGRESS',
]
)

(旁注:我认为 | 应该是 ,,但无论如何)

但是,我了解“推荐”方式是使用 boto3 资源访问 AWS 服务。不幸的是,boto3 cloudformation 资源没有列出和过滤堆栈的方法(请参阅 the documentation )。

我想避免循环所有堆栈并检查每个检索到的堆栈对象的状态。

到目前为止,我发现的唯一方法是通过访问资源的客户端来解决问题,尽管这感觉有点老套,而且无法过滤例如堆栈名称。

cf = boto3.Session().resource('cloudformation')
cf.meta.client.list_stacks(StackStatusFilter=['ROLLBACK_COMPLETE'])

问题:知道如何为 cf 获得类似 list_stacks(StackStatusFilter=..) 的东西,它是一个 cloudformation.ServiceResource 对象允许过滤状态和堆栈名称?

最佳答案

有趣;这是 boto API 中的一个不幸的不对称性。也就是说,我会坚持使用资源并使用列表理解,而不是通过 meta 属性:

statuses = ['ROLLBACK_COMPLETE', 'CREATE_COMPLETE', 'UPDATE_COMPLETE']
cfn = boto3.resource('cloudformation')
stacks = [stack for stack in cfn.stacks.all() if stack.stack_status in statuses]

通过返回到 meta.client,您将获得字典响应而不是资源对象。如果可以的话,只需使用 cloudformation 客户端而不是资源。理解将返回 Stack 资源对象而不是字典

最终,两者都有效,只是一个偏好问题;如果可以的话,请避免混合范例。

关于python - 如何使用 boto3 cloudformation 资源列出和过滤堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52717444/

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