You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

  1. 登录Prefect(Cloud或本地Server):
    • Cloud:prefect cloud login
    • 本地Server:先启动prefect server start,再执行prefect cloud login --key <API_KEY> --workspace <WORKSPACE_SLUG>
  2. 生成部署配置文件:
prefect deployment build aci_trigger_flow.py:aci_trigger_flow -n "ACI触发器部署" -q "default" --infra-process "docker"
  1. 应用部署:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:02:13