ZenML 接入 Amazon ECR:AWS 容器注册中心(Container Registry)完整配置指南

发布时间:2026/9/17 19:33:06
ZenML 接入 Amazon ECR:AWS 容器注册中心(Container Registry)完整配置指南 ZenML 接入 Amazon ECRAWS 容器注册中心Container Registry完整配置指南【免费下载链接】zenmlZenML : One AI Platform from Pipelines to Agents. https://zenml.io.项目地址: https://gitcode.com/GitHub_Trending/ze/zenml本篇技术指南以 ZenML 开源仓库中 Amazon Elastic Container Registry (ECR) 组件文档 为主体讲解如何将 AWS ECR 作为 ZenML Stack 中的容器注册中心组件接入、注册与认证并深度结合仓库源码src/zenml/integrations/aws/下的 flavor、实现类与 Service Connector揭示其底层工作原理。读完本篇你将掌握ECR 仓库的创建与 URI 拼接规则、zenml container-registry命令行注册与挂载流程、本地 Docker 认证与 AWS Service Connector 两种认证方式以及 ZenML 在推送镜像前对 ECR 仓库的预检逻辑。适用场景何时需要使用 AWS Container Registry在 ZenML 中容器注册中心Container Registry是多数远程 MLOps Stack 的必备组件用于存放 ZenML 为运行流水线而构建的 Docker 镜像。当满足以下任一条件时应当使用 AWS 容器注册中心flavor 名为aws来自 ZenML 的awsintegration后端即 Amazon ECRStack 中有一个或多个组件需要拉取或推送容器镜像。在 ZenML 中绝大多数远程 orchestrators、step operators 以及部分 model deployer 都会把流水线代码容器化因此需要容器注册中心来存储构建产物详见 容器注册中心总览你拥有 AWS 账号并可以访问 ECR 服务。如果你并非使用 AWS可以参考其他 container registry flavors如gcp、azure、dockerhub、github等。提示ZenML 的awsintegration 同时注册了多个 stack 组件 flavor包括AWSContainerRegistryFlavor、AWSDeployerFlavor、AWSImageBuilderFlavor、SagemakerStepOperatorFlavor与SagemakerOrchestratorFlavor见 src/zenml/integrations/aws/init.py。如果你同时使用 SageMaker orchestrator / step operator同一个awsintegration 即可覆盖全部组件。部署 ECR创建仓库RepositoryECR 注册中心本身在你创建 AWS 账号后即自动激活无需额外开通。但在向 ECR 推送镜像前必须先在目标区域内创建Repository。操作步骤如下打开 ECR 控制台确认右上角已选中正确的区域Region点击Create repository创建仓库创建一个private私有仓库。仓库的名称取决于你 Stack 中使用的 orchestrator 或 step operator 会构建的镜像名。关于仓库命名ZenML 源码给出了明确的指引AWSContainerRegistry.post_registration_message见 aws_container_registry.py会在注册组件后打印提示——Amazon ECR 要求你先创建仓库才能推送镜像使用远程 orchestrator 运行流水线时ZenML 会自动构建并推送名为REGISTRY_URI/zenml:PIPELINE_NAME的 Docker 镜像因此至少需要在 ECR 中创建一个名为zenml的仓库否则首次推送会失败。如果你希望跳过手工搭建直接部署一整套包含 ECR 的 ZenML 云端 Stack可以使用浏览器内的 stack 部署向导、stack 注册向导或 ZenML 官方 AWS Terraform 模块来完成部署与注册。URI 格式拼接你的 ECR 注册中心地址AWS Container Registry 的 URI 必须遵循以下格式ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com # 示例 123456789.dkr.ecr.eu-west-2.amazonaws.com 987654321.dkr.ecr.ap-south-1.amazonaws.com 135792468.dkr.ecr.af-south-1.amazonaws.com获取你的注册中心 URI 的方法打开 AWS 控制台点击右上角用户账户即可看到Account ID账号 ID在 AWS 区域端点列表中选择你希望存放容器镜像的区域。建议选择地理上更近的区域以获得更快的访问速度将上述两个值填入模板ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com即得到注册中心 URI。从源码层面看URI 是决定注册中心行为的关键配置AWSContainerRegistryConfig中的validate_aws_uri校验器见 aws_container_registry_flavor.py规定 URI不能包含/字符例如715803424592.dkr.ecr.us-east-1.amazonaws.com是合法的基类BaseContainerRegistryConfig见 base_container_registry.py还会自动去除 URI 末尾的斜杠并提供可选的default_repository字段用于指定镜像存储的默认命名空间AWSContainerRegistry._get_region见 aws_container_registry.py通过正则.*\.dkr\.ecr\.(.*)\.amazonaws\.com从 URI 中解析出 Region用于后续构造 ECR 客户端。若 URI 不符合该格式会抛出RuntimeError。注册并使用 AWS Container Registry前置条件使用 AWS Container Registry 需要准备已安装 ZenML 的awsintegrationzenml integration install awsAWSIntegration.REQUIREMENTS见 src/zenml/integrations/aws/init.py会安装sagemaker2.237.3,3.0.0、kubernetes、aws-profile-manager、pytz2021.1等依赖Docker 已安装并运行注册中心 URI参照上文 URI 格式 小节获取。注册组件并挂载到 Stack执行以下命令注册 AWS Container Registry并将其加入当前激活的 Stackzenml container-registry register NAME \ --flavoraws \ --uriREGISTRY_URI # 将容器注册中心添加到激活的 Stack zenml stack update -c NAME其中NAME是你为这个注册中心组件起的名字REGISTRY_URI形如715803424592.dkr.ecr.us-east-1.amazonaws.com。注册之后还需要配置认证方式才能登录 ECR。如果你想查看 ZenML 当前可用的所有容器注册中心 flavor可以执行zenml container-registry flavor list从实现角度看AWSContainerRegistryFlavor见 aws_container_registry_flavor.py的name为aws并声明了 Service Connector 需求connector_typeaws、resource_typeDOCKER_REGISTRY_RESOURCE_TYPE即docker-registry、resource_id_attruri。这意味着该 flavor 会以 URI 作为资源标识与 AWS Service Connector 做自动匹配。推送前的仓库预检源码行为AWSContainerRegistry.prepare_image_push见 aws_container_registry.py实现了镜像推送前的预检逻辑从镜像名中提取仓库名正则匹配uri/repo:tag形式镜像名不合法时抛出ValueError通过 ECR 客户端调用describe_repositories()拉取已有仓库列表若本地 AWS 凭据不可用导致调用失败会打印警告并继续尝试推送若目标仓库不存在则列出当前检测到的仓库并警告提示你可能需要先创建名为repo的仓库然后仍继续尝试推送。因此如果你在推送阶段收到 repository not found 类错误第一反应应当是回到 ECR 控制台确认目标仓库已创建。认证方式Authentication Methods不采用任何形式的认证ZenML 流水线就无法真正使用 AWS Container Registry。快速本地起步可使用Local Authentication而官方推荐的方式是通过AWS Service Connector认证尤其是当你配置的 ZenML Stack 同时组合了其他运行在 AWS 上的远程组件时Service Connector 可以复用同一套凭据。方式一本地认证Local Authentication该方式使用ZenML 代码运行所在环境中的 Docker 客户端认证。在本地机器上这是配置 AWS Container Registry 最快的方式注册时无需显式提供凭据直接复用 AWS CLI 与 Docker 客户端存储在本地机器上的凭据与配置。前置要求按 AWS CLI 官方文档 安装并配置好 AWS CLI。随后执行登录命令让 Docker 具备拉取与推送镜像的权限# 将 REGISTRY_URI 和 REGION 填入下面的占位符。 # REGION 可以从 REGISTRY_URI 中提取ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com aws ecr get-login-password --region REGION | docker login --username AWS --password-stdin REGISTRY_URI⚠️ 警告使用本地认证的 AWS Container Registry 所构成的 Stack不具备跨环境可移植性。若要实现 ZenML 流水线的完全可移植推荐使用 AWS Service Connector 将你的 AWS Container Registry 与远程 ECR 注册中心关联起来。方式二AWS Service Connector推荐AWS Service Connector 为 ECR 访问带来了自动配置auto-configuration、本地登录local login、更优的长期凭据安全实践、细粒度访问控制以及跨多个 Stack 组件复用同一凭据等能力。第 1 步注册 AWS Service Connector如果你尚未在 ZenML 部署中配置任何 AWS Service Connector可以运行交互式 CLI 命令进行注册并选择配置为仅访问 ECR 注册中心或同时访问多种 AWS 资源zenml service-connector register --type aws -i利用本地机器上已有的 AWS CLI 配置 自动配置一个面向 ECR 注册中心的 AWS Service Connector 的非交互式示例zenml service-connector register CONNECTOR_NAME --type aws --resource-type docker-registry --auto-configure示例命令输出$ zenml service-connector register aws-us-east-1 --type aws --resource-type docker-registry --auto-configure ⠸ Registering service connector aws-us-east-1... Successfully registered service connector aws-us-east-1 with access to the following resources: ┏━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ RESOURCE TYPE │ RESOURCE NAMES ┃ ┠────────────────────┼──────────────────────────────────────────────┨ ┃ docker-registry │ 715803424590.dkr.ecr.us-east-1.amazonaws.com ┃ ┗━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛注意请务必为 AWS 凭据对应的实体授予对目标 ECR 仓库的读写权限以及列举可访问 ECR 仓库的权限。AWS Service Connector 支持多种安全性与便捷性不同的认证方法请选择最适合你场景的一种。第 2 步查看可用的 Service Connector 资源若已配置一个或多个 AWS Service Connector可以查看其中哪些可用于访问你目标 ECR 注册中心zenml service-connector list-resources --connector-type aws --resource-type docker-registry示例命令输出The following docker-registry resources can be accessed by service connectors that you have configured: ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ CONNECTOR ID │ CONNECTOR NAME │ CONNECTOR TYPE │ RESOURCE TYPE │ RESOURCE NAMES ┃ ┠──────────────────────────────────────┼─────────────────────────┼────────────────┼────────────────────┼──────────────────────────────────────────────┨ ┃ 37c97fa0-fa47-4d55-9970-e2aa6e1b50cf │ aws-secret-key │ aws │ docker-registry │ 715803424590.dkr.ecr.us-east-1.amazonaws.com ┃ ┠──────────────────────────────────────┼─────────────────────────┼────────────────┼────────────────────┼──────────────────────────────────────────────┨ ┃ d400e0c6-a8e7-4b95-ab34-0359229c5d36 │ aws-us-east-1 │ aws │ docker-registry │ 715803424590.dkr.ecr.us-east-1.amazonaws.com ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛第 3 步注册 AWS Container Registry 并连接 Service Connector确定好用于连接目标 ECR 注册中心的 AWS Service Connector 后注册 AWS Container Registry 并通过 Service Connector 建立关联# 注册 AWS container registry 并指定目标 ECR 注册中心 URI zenml container-registry register CONTAINER_REGISTRY_NAME -f aws \ --uriREGISTRY_URL # 通过 AWS Service Connector 将 AWS container registry 连接到目标 ECR 注册中心 zenml container-registry connect CONTAINER_REGISTRY_NAME -i非交互式连接方式按 connector ID 指定zenml container-registry connect CONTAINER_REGISTRY_NAME --connector CONNECTOR_ID示例命令输出$ zenml container-registry connect aws-us-east-1 --connector aws-us-east-1 Successfully connected container registry aws-us-east-1 to the following resources: ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ CONNECTOR ID │ CONNECTOR NAME │ CONNECTOR TYPE │ RESOURCE TYPE │ RESOURCE NAMES ┃ ┠──────────────────────────────────────┼────────────────┼────────────────┼────────────────────┼──────────────────────────────────────────────┨ ┃ d400e0c6-a8e7-4b95-ab34-0359229c5d36 │ aws-us-east-1 │ aws │ docker-registry │ 715803424590.dkr.ecr.us-east-1.amazonaws.com ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛第 4 步将 AWS Container Registry 加入 ZenML Stack# 注册并设置包含新容器注册中心的 Stack zenml stack register STACK_NAME -c CONTAINER_REGISTRY_NAME ... --set提示将 AWS Container Registry 与 Service Connector 关联后你的本地 Docker 客户端将不再自动认证到远程注册中心。如果仍需要通过 Docker CLI 手动操作远程注册中心可以使用 Service Connector 的 local login 功能临时为本地 Docker 客户端完成认证zenml service-connector login CONNECTOR_NAME --resource-type docker-registry示例命令输出$ zenml service-connector login aws-us-east-1 --resource-type docker-registry ⠼ Attempting to configure local client using service connector aws-us-east-1... WARNING! Your password will be stored unencrypted in /home/stefan/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store The aws-us-east-1 Docker Service Connector was used to successfully configure the local Docker/OCI container registry client/SDK.底层原理ECS 客户端与凭据解析理解 Service Connector 如何驱动 ECR有助于排查认证类问题。AWSContainerRegistry._get_ecr_client见 aws_container_registry.py的客户端构造逻辑为若该注册中心配置了 connector则通过Client().get_service_connector(...)获取 connector 模型实例化AWSServiceConnector并调用其get_ecr_client()返回经 Service Connector 认证的 ECR 客户端否则回退到boto3.Session().client(ecr, region_name...)即直接使用本地 AWS 凭据对应文档中的 Local Authentication 方式。AWSServiceConnector.get_ecr_client的实现位于 aws_service_connector.py它按DOCKER_REGISTRY_RESOURCE_TYPE资源类型装配客户端与 flavor 声明的 Service Connector 需求一一对应。这意味着只要zenml container-registry connect成功流水线构建镜像时就会自动使用 connector 提供的短期凭据无需在 Docker 中手工 login。小结与延伸至此你已完成 ZenML 接入 Amazon ECR 的完整闭环创建 ECR 私有仓库 → 拼接注册中心 URI → 安装awsintegration 并注册awsflavor 的 Container Registry → 通过本地认证或推荐的AWS Service Connector 完成认证 → 将组件挂载进 ZenML Stack 并交付给 orchestrator / step operator 使用。关键要点回顾环节关键信息安装zenml integration install aws注册组件zenml container-registry register NAME --flavoraws --uriREGISTRY_URI挂载 Stackzenml stack update -c NAME或zenml stack register STACK_NAME -c NAME ... --set本地认证aws ecr get-login-password --region REGION \| docker login --username AWS --password-stdin REGISTRY_URI推荐认证zenml service-connector register NAME --type aws --resource-type docker-registry --auto-configurezenml container-registry connect NAME --connector CONNECTOR_ID本地客户端登录zenml service-connector login CONNECTOR_NAME --resource-type docker-registry仓库命名远程 orchestrator 场景需提前创建名为zenml的 ECR 仓库进一步阅读本文所依托的原始组件文档为 docs/book/component-guide/container-registries/aws.md完整 flavor 列表可参考 容器注册中心总览AWS integration 的其余组件SageMaker orchestrator、SageMaker step operator、AWS image builder、AWS deployer实现位于 src/zenml/integrations/aws/ 目录下可供继续深入。【免费下载链接】zenmlZenML : One AI Platform from Pipelines to Agents. https://zenml.io.项目地址: https://gitcode.com/GitHub_Trending/ze/zenml创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询