如何使用Python删除Prefect 2中的Blocks?
问题描述
我正在使用Prefect 2,目前已能通过以下Python代码创建AWS Credentials和Kubernetes Job等Prefect Blocks:
from prefect_aws import AwsCredentials from prefect.infrastructure import KubernetesJob async def create(): await AwsCredentials( aws_access_key_id="xxx", aws_secret_access_key="xxx", region_name="us-west-2", ).save(f"my-aws-credentials-block", overwrite=True) await KubernetesJob( image=f"my-image:latest", image_pull_policy="Always", ).save(f"my-kubernetes-job-block", overwrite=True)
现在我希望通过Python代码删除这些Blocks,已查阅prefect-kubernetes和prefect-aws的官方文档,但未找到相关操作说明。请问是否存在通过Python代码删除Prefect Blocks的方法?
解决方案
当然可以通过Python代码删除Prefect 2的Blocks,核心是用Prefect官方提供的客户端来操作,不需要依赖具体集成库的API。直接上实现代码:
from prefect.client import get_client import asyncio async def delete_blocks(): async with get_client() as client: # 删除AWS Credentials Block await client.delete_block_document( block_type_slug="aws-credentials", block_name="my-aws-credentials-block" ) # 删除Kubernetes Job Block await client.delete_block_document( block_type_slug="kubernetes-job", block_name="my-kubernetes-job-block" ) # 执行异步删除操作 asyncio.run(delete_blocks())
关键说明:
block_type_slug是对应Block类型的短标识,如果你不确定具体值,可以在终端执行prefect block type ls命令查看所有可用的Block类型slug- 删除时必须同时指定Block类型slug和Block名称,才能精准定位到要删除的目标Block
- 由于Prefect客户端的操作是异步的,因此需要用
asyncio.run()来触发执行删除函数
内容的提问来源于stack exchange,提问作者Hongbo Miao
相关产品推荐
相关产品推荐

