首页 > 解决方案 > 如何在 boto3 中使用 list_stacks 来查找堆栈并对其进行过滤?

问题描述

如何在 boto3 中使用 list_stacks 来查找名为 test-logging-9823492834 的堆栈,该堆栈是随机的?

我的尝试:

for stack in qa.cfn.list_stacks().filter(Prefix='test-logging'):
  print('{0}:{1}'.format(stack.name, stack.key))

AttributeError: 'dict' object has no attribute 'filter'

标签: boto3boto

解决方案


在 boto3 中,该list_stacks()函数没有用于stack_names.

客户端只有 2 个选项,您只能根据以下条件过滤输出StackStatus

response = client.list_stacks(NextToken='string',StackStatusFilter='option')

上述调用的响应将只返回一个字典StackSummaries

{
    'StackSummaries': [
        {
            'StackId': 'string',
            'StackName': 'string',
            'TemplateDescription': 'string',
            'CreationTime': datetime(2015, 1, 1),
            'LastUpdatedTime': datetime(2015, 1, 1),
            'DeletionTime': datetime(2015, 1, 1),
            'StackStatus': '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',
            'StackStatusReason': 'string',
            'ParentId': 'string',
            'RootId': 'string',
            'DriftInformation': {
                'StackDriftStatus': 'DRIFTED'|'IN_SYNC'|'UNKNOWN'|'NOT_CHECKED',
                'LastCheckTimestamp': datetime(2015, 1, 1)
            }
        },
    ],
    'NextToken': 'string'
}

因此,对于您的用例,您需要response['StackSummaries']自己在 python 中循环 + 过滤字典,而不是使用 boto3 寻找选项。

编辑 在这里可以完美使用的选项是describe_stacks返回有关特定堆栈的信息。 看这里

希望这可以澄清。


推荐阅读