如何用Prefect触发Azure容器实例中的Docker镜像运行?
用Prefect触发Azure容器实例运行Docker镜像的部署方案
前提准备
- 安装必要依赖包:
pip install prefect azure-identity azure-mgmt-containerinstance - 拥有Azure账户的容器实例管理权限,且已完成本地Azure认证(比如通过
az login或配置服务主体)
步骤1:编写Prefect Flow脚本
创建aci_trigger_flow.py脚本,通过Azure SDK调用容器实例API实现触发逻辑,无需修改目标Docker镜像:
from prefect import flow, task from azure.identity import DefaultAzureCredential from azure.mgmt.containerinstance import ContainerInstanceManagementClient from azure.mgmt.containerinstance.models import ( ContainerGroup, Container, ResourceRequirements, ResourceRequests, ContainerGroupNetworkProtocol ) @task def start_aci_container(subscription_id, resource_group, container_group_name, image_name): # 初始化Azure容器实例客户端 credential = DefaultAzureCredential() aci_client = ContainerInstanceManagementClient(credential, subscription_id) # 定义容器配置(可根据镜像需求调整CPU、内存参数) container = Container( name=container_group_name, image=image_name, resources=ResourceRequirements( requests=ResourceRequests(cpu=1.0, memory_in_gb=1.5) ) ) # 定义容器组配置(区域、网络模式等按需调整) container_group = ContainerGroup( location="eastus", # 替换为你的资源组所在区域 containers=[container], os_type="Linux", # 镜像为Windows则改为"Windows" ip_address={ "ports": [{"protocol": ContainerGroupNetworkProtocol.TCP, "port": 80}], "type": "Public" } ) # 创建/启动容器实例(若容器组已存在则更新) result = aci_client.container_groups.begin_create_or_update( resource_group_name=resource_group, container_group_name=container_group_name, container_group=container_group ) result.wait() return result.result().provisioning_state @flow(name="ACI镜像触发Flow") def aci_trigger_flow(subscription_id, resource_group, container_group_name, image_name): provision_state = start_aci_container(subscription_id, resource_group, container_group_name, image_name) print(f"容器实例部署状态: {provision_state}") if __name__ == "__main__": # 替换为你的Azure资源信息 aci_trigger_flow( subscription_id="你的订阅ID", resource_group="你的资源组名称", container_group_name="你的容器组名称", image_name="你的镜像地址(如acr地址或公共镜像)" )
步骤2:部署Flow到Prefect
- 登录Prefect(Cloud或本地Server):
- Cloud:
prefect cloud login - 本地Server:先启动
prefect server start,再执行prefect cloud login --key <API_KEY> --workspace <WORKSPACE_SLUG>
- Cloud:
- 生成部署配置文件:
prefect deployment build aci_trigger_flow.py:aci_trigger_flow -n "ACI触发器部署" -q "default" --infra-process "docker"
- 应用部署:
prefect deployment apply aci_trigger_flow-deployment.yaml
步骤3:配置触发规则(按需)
- 定时触发:编辑生成的
aci_trigger_flow-deployment.yaml,添加定时规则后重新应用:
schedule: cron: "0 9 * * *" # 每天上午9点运行 timezone: "Asia/Shanghai"
- 事件触发:在Prefect Cloud控制台配置事件触发器(如监听Azure存储事件、外部Webhook等)
步骤4:验证运行
- 手动触发部署:
prefect deployment run "ACI镜像触发Flow/ACI触发器部署" - 查看运行日志:
prefect flow-run logs -n <对应Flow运行名称> - 登录Azure门户,确认容器实例是否成功启动
内容的提问来源于stack exchange,提问作者david backx
相关产品推荐
相关产品推荐

