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

标签 python amazon-web-services aws-cloudformation boto3

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

相关文章:

python - 使用 Django 的多个 ManyToMany 'in' 查询

python - 编写要导入的轻量级客户端函数的好方法 Twisted Python

安装 ez_setup.py 时出现 Python 错误 "could not create SSL/TLS secure channel"

java - 如何使用 Java SDK 使 Cloudfront 中的缓存失效

aws-lambda - CloudFormation 创建的 Lambda 不创建 LogStream/Logs

amazon-web-services - AWS 节点的 Docker 上是否有时间同步过程?

python - 创建一个具有恒定颜色的 numpy 图像

amazon-web-services - 什么是 ECS 镜像定义文件?

amazon-web-services - Amazon RDS - 仅在需要时才在线?

amazon-web-services - 尽管可以访问所有 ec2,但无法访问 vpc 端点