gpt4 book ai didi

python - Boto:检查 CloudFormation 堆栈是否存在的最佳方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 18:34:17 24 4
gpt4 key购买 nike

使用 Boto 检查 CloudFormation 堆栈是否存在且未处于损坏状态的最佳方法是什么?我所说的损坏是指失败和回滚状态。

我不想使用 try/except 解决方案,因为 boto 将其记录为错误,并且在我的场景中,它会将异常日志发送到警报系统。


目前我有以下解决方案:

1) 使用boto.cloudformation.connection.CloudFormationConnection.describe_stacks()

valid_states = '''\
CREATE_IN_PROGRESS
CREATE_COMPLETE
UPDATE_IN_PROGRESS
UPDATE_COMPLETE_CLEANUP_IN_PROGRESS
UPDATE_COMPLETE'''.splitlines()

def describe_stacks():
result = []
resp = cf_conn.describe_stacks()
result.extend(resp)
while resp.next_token:
resp = cf_conn.describe_stacks(next_token=resp.next_token)
result.extend(resp)
return result


stacks = [stack for stack in describe_stacks() if stack.stack_name == STACK_NAME and stack.stack_status in valid_states]
exists = len(stacks) >= 1

这很慢,因为我有很多堆栈。


2) 使用boto.cloudformation.connection.CloudFormationConnection.list_stacks()

def list_stacks(filters):
result = []
resp = cf_conn.list_stacks(filters)
result.extend(resp)
while resp.next_token:
resp = cf_conn.list_stacks(filters, next_token=resp.next_token)
result.extend(resp)
return result

stacks = [stack for stack in list_stacks(valid_states) if stack.stack_name == STACK_NAME]
exists = len(stacks) >= 1

这需要很长时间,因为摘要会保留 90 天,而且我有很多堆栈。


问题:检查给定堆栈是否存在且未处于失败或回滚状态的理想解决方案是什么?

最佳答案

我实现了以下有效的方法:

import boto3
from botocore.exceptions import ClientError

client = boto3.client('cloudformation')

def stack_exists(name, required_status = 'CREATE_COMPLETE'):
try:
data = client.describe_stacks(StackName = name)
except ClientError:
return False
return data['Stacks'][0]['StackStatus'] == required_status

我没有找到任何完整的以前的解决方案,也没有任何快速的方法可以使用 boto3 来完成它,所以我创建了上面的解决方案。

关于python - Boto:检查 CloudFormation 堆栈是否存在的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23019166/

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