我想获取基于给定状态集的堆栈列表。我知道使用 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/