使用Python3 Boto3包删除AWS CloudFormation的栈(Stacks)

 更新时间:2024年01月08日 09:38:18   作者:scruffybear  
这篇文章主要介绍了如何使用Python3 Boto3删除AWS CloudFormation的栈(Stacks),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

小结

本文记录了使用Python3的Boto3包删除AWS CloudFormation的栈(Stacks)

问题及解决

有关Json文件的输入和输出

json.loads函数是将一个字符串(String)输入转换为字典类型(dictionary)输出
json.dumps函数是将一个字典类型(dictionary)输入转换为字符串(String)输出

当出现JSON object must be str, bytes or bytearray, not dict或者'dict' object has no attribute 'read'的错误时,需要检查以上输入类型是否正确。

对于datetime.datetime not JSON serializable的问题,也就是日期类型无法进行Json序列化,可以使用以下指令解决问题,应该是default=str这个参数起了作用,将日期类型处理为了字符串:

json_formatted_str = json.dumps(task_definition, indent=2, sort_keys=True, default=str)

使用Python3及正则表达式查找字符串包含某个子字符串

使用以下办法:

exp = re.compile(stack_name_to_Search)
stack_name = cfn_stack['StackName']
if re.search(exp, stack_name):
  ....

以上是查找 stack_name 这个字符串是否包含stack_name_to_Search这个子字符串。

使用Python3 Boto3删除AWS CloudFormation的栈(Stacks)

def delete_skms_stack(stack_name):
    cf_client = boto3.client('cloudformation')
    #list all the stacks excepts 'DELETED_STACKS'
    response = cf_client.list_stacks(
        StackStatusFilter=[
        'CREATE_IN_PROGRESS','CREATE_FAILED','CREATE_COMPLETE',
        'ROLLBACK_IN_PROGRESS','ROLLBACK_FAILED','ROLLBACK_COMPLETE',
        'DELETE_IN_PROGRESS','DELETE_FAILED',
        'UPDATE_IN_PROGRESS','UPDATE_COMPLETE_CLEANUP_IN_PROGRESS','UPDATE_COMPLETE','UPDATE_FAILED','UPDATE_ROLLBACK_IN_PROGRESS','UPDATE_ROLLBACK_FAILED','UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS','UPDATE_ROLLBACK_COMPLETE','REVIEW_IN_PROGRESS',
        'IMPORT_IN_PROGRESS','IMPORT_COMPLETE','IMPORT_ROLLBACK_IN_PROGRESS','IMPORT_ROLLBACK_FAILED','IMPORT_ROLLBACK_COMPLETE'
        ]
    )
    #Stack name pattern
    exp = re.compile(stack_name)
    print('--------------------')
    print(response['StackSummaries'])
    for cfn_stack in response['StackSummaries']:
        stack_name = cfn_stack['StackName']
        #match = re.search(regex_pattern,stack_name)
        if re.search(exp, stack_name):
        #Custome conditions can be implemented here
            try:
                response = cf_client.delete_stack(StackName=stack_name)
                stack_delete_status = cf_client.describe_stacks(StackName=stack_name)
                logger.info("Delete stack: " + json.dumps(response))
                while stack_delete_status['Stacks'][0]['StackStatus'] == 'DELETE_IN_PROGRESS':
                    time.sleep(10)
                    stack_delete_status = cf_client.describe_stacks(StackName=stack_name)
                    logger.info("Delete stack status: " + stack_delete_status['Stacks'][0]['StackStatus'])
                    if stack_delete_status['Stacks'][0]['StackStatus'] == 'DELETE_FAILED':
                        logger.warning('Delete failed. Retry delete')
                        resources = cf_client.delete_stack(StackName=stack_name)
                        return resources
                    elif stack_delete_status['Stacks'][0]['StackStatus'] == 'DELETE_IN_PROGRESS':
                        continue
                    else:
                        logger.info("Delete stack complete")
            except Exception as e:
                logger.error(e) 

以上代码执行效果如下:

INFO:__main__:Delete stack status: DELETE_IN_PROGRESS
INFO:__main__:Delete stack status: DELETE_IN_PROGRESS
INFO:__main__:Delete stack status: DELETE_IN_PROGRESS
INFO:__main__:Delete stack status: DELETE_IN_PROGRESS
ERROR:__main__:An error occurred (ValidationError) when calling the DescribeStacks operation: Stack with id ECS-Console-V2-Service-sammperso-johnvpc-svc-John-VPC-Cluster-8c3e39c8 does not exist

其中最后一个错误是因为CloudFormation的栈(Stacks)已经被删除,找不到了,所以是正常返回。

参考

Digital Ocean: Python Pretty Print JSON
Stackoverflow: JSON object must be str, bytes or bytearray, not dict
Stackoverflow: ‘dict’ object has no attribute ‘read’
Stackoverflow: How can I overcome “datetime.datetime not JSON serializable”?
Stackoverflow: How to delete multiple Cloudformation stacks at once?
Stackoverflow: Python regex check if string contains any of words

到此这篇关于如何使用Python3 Boto3删除AWS CloudFormation的栈(Stacks)的文章就介绍到这了,更多相关Python3 Boto3删除AWS CloudFormation的栈内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 从基础到高级详解Python中文件操作的全攻略实战指南

    从基础到高级详解Python中文件操作的全攻略实战指南

    在Python编程中,文件操作是连接程序与外部存储的桥梁,本文将从基础读写讲起,逐步深入到高效处理、异常管理、二进制操作等高级场景,希望对大家有所帮助
    2025-10-10
  • python实现猜数游戏(保存游戏记录)

    python实现猜数游戏(保存游戏记录)

    这篇文章主要为大家详细介绍了python实现猜数游戏,保存游戏记录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • django如何自己创建一个中间件

    django如何自己创建一个中间件

    这篇文章主要介绍了django如何自己创建一个中间件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python3.7.3版本和django2.2.3版本是否可以兼容

    python3.7.3版本和django2.2.3版本是否可以兼容

    在本篇文章里小编给大家整理的是一篇关于python3.7.3版本和django2.2.3版本是否可以兼容的相关知识点内容,有兴趣的朋友们可以学习下。
    2020-09-09
  • 利用Python读取txt文档的方法讲解

    利用Python读取txt文档的方法讲解

    今天小编就为大家分享一篇利用Python读取txt文档的方法讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python求两点之间的直线距离(2种实现方法)

    Python求两点之间的直线距离(2种实现方法)

    今天小编就为大家分享一篇Python求两点之间的直线距离(2种实现方法),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python实现列表转Excel表格的第一列

    Python实现列表转Excel表格的第一列

    这篇文章主要为大家详细介绍了如何将Python中的列表转换为Excel表格的第一列,并通过案例和代码展示具体的操作步骤,希望可以帮助大家快速掌握这一技能
    2024-04-04
  • Python tempfile模块生成临时文件和临时目录

    Python tempfile模块生成临时文件和临时目录

    这篇文章主要介绍了Python tempfile模块生成临时文件和临时目录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 详解python的argpare和click模块小结

    详解python的argpare和click模块小结

    这篇文章主要介绍了详解python的argpare和click模块小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • python写xml文件的操作实例

    python写xml文件的操作实例

    这篇文章主要介绍了python写xml文件的操作实例,是非常常见的实用技巧,需要的朋友可以参考下
    2014-10-10

最新评论