创建外部连接(预览版)

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

本文介绍如何连接到外部数据源,使其数据可供 Azure 机器学习使用。 你还将了解如何连接到多个外部非数据服务。 可以使用 Azure 机器学习 CLI、用于 Python 的 Azure 机器学习 SDK 或机器学习工作室来创建这些连接。

Azure 机器学习连接安全地将用户名和密码存储为密钥保管库中的机密。 Azure 连接充当密钥保管库代理,与连接的交互是与 Azure Key Vault 的直接交互。 Key Vault 基于角色的访问控制(RBAC)管理对数据资源的访问。 在将凭据存储到密钥保管库后,您无需直接处理这些凭据。

Azure 支持连接到以下外部源以实现数据可用性:

  • Snowflake
  • Azure SQL 数据库

重要

此功能目前处于公开预览状态。 此预览版在提供时没有附带服务级别协议,我们不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。

有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

先决条件

  • Azure 机器学习的订阅。

  • Azure 机器学习工作区。

  • 安装了扩展版本 2.15.1 或更高版本的 ml Azure CLI。

    如果有较旧的 Azure CLI 版本或扩展,请使用以下代码卸载它并安装新版本。

    az extension remove -n ml
    az extension add -n ml --yes
    az extension show -n ml 2.15.1
    

创建 Snowflake 数据连接

可以使用 Azure 机器学习 CLI、用于 Python 的 Azure 机器学习 SDK 或机器学习工作室创建使用用户名/密码身份验证的 Snowflake 数据连接。

还可以使用 Azure CLI 或 Python SDK 创建将 OAuth 与服务主体配合使用的 Snowflake 连接。 机器学习工作室不支持创建 OAuth 连接。

创建使用用户名/密码身份验证的连接

若要创建 Snowflake 连接,请先组装定义连接的 YAML 文件,然后运行调用 YAML 文件的命令或脚本。 对于 Python SDK,还可以直接指定连接信息,而无需使用 YAML 文件。

可以在 YAML 文件中存储凭据,并在创建连接时重写 Azure CLI 命令行中的存储凭据。 但是,最好避免将凭据存储在文件中,因为安全漏洞可能会导致凭据泄漏。 你可以省略 credentials 值,并在命令行中提供这些值。

以下 YAML 文件定义使用用户名/密码身份验证的 Snowflake 连接。 若要创建文件,请提供一个<connection-name> ,并将<account><database><warehouse><role>占位符替换为 Snowflake 帐户中的值。 如果未提供值 <role>,则值默认为 PUBLIC。 使用 my_snowflake_connection.yaml 等名称保存文件。

$schema: http://azureml/sdk-2-0/Connection.json
type: snowflake
name: <connection-name>

target: jdbc:snowflake://<account>.snowflakecomputing.com/?db=<database>&warehouse=<warehouse>&role=<role>
credentials:
    type: username_password
    username: <snowflake-username>
    password: <snowflake-password>

若要创建连接,请运行以下命令行之一,为占位符提供 YAML 文件名 <yaml-filename>

  • 若要使用存储在 YAML 文件中的用户名和密码,请运行以下命令:

    az ml connection create --file <yaml-filename>.yaml
    
  • 要在命令行中作为参数提供用户名和密码,请运行以下命令,并在占位符 <username><password> 处输入您的信息:

    az ml connection create --file <yaml-filename>.yaml --set credentials.username="<username>" credentials.password="<password>"
    

使用 Azure CLI 或 Python SDK 创建与 OAuth 身份验证的连接

可以使用 Azure CLI 或 Python SDK 创建一个 Snowflake 连接,该连接使用 OAuth 的服务主体进行身份验证。

重要

必须先 将 Azure 配置为代表客户端颁发 OAuth 令牌,然后才能使用 OAuth 创建连接。 此配置过程为 OAuth 连接创建所需的服务主体。

若要为 Azure 机器学习创建 OAuth 连接,需要以下信息:

  • 客户端 ID:服务主体的 ID
  • 客户端密码:服务主体机密
  • 租户 ID:Microsoft Entra ID 租户的 ID

若要创建连接,请先组装定义连接的 YAML 文件,然后运行调用 YAML 文件的命令或脚本。 对于 Python SDK,还可以直接指定连接信息,而无需使用 YAML 文件。

创建以下 YAML 文件以定义使用 OAuth 的 Snowflake 连接。 请提供一个<connection-name>,并将<account><database><warehouse><service-principal-scope>占位符替换为您 Snowflake 帐户中的值。 对于凭据,请提供你的<client-id><client-secret><tenant_id>

name: <connection-name>
type: snowflake
target: jdbc:snowflake://<account>.snowflakecomputing.com/?db=<database>&warehouse=<warehouse>&scope=<service-principal-scope>
credentials:
  type: service_principal
  client_id: <client-id>
  client_secret: <client-secret>
  tenant_id: <tenant-id>
  • 若要使用存储在 YAML 文件中的凭据信息创建连接,请运行以下命令,将 <yaml-filename> 占位符替换为 YAML 文件名。

    az ml connection create --file <yaml-filename>.yaml
    
  • 若要覆盖 YAML 文件中的凭据信息或在命令行中提供凭据,请运行以下命令,并为占位符输入您的 <client-id><client-secret><tenant-id> 值:

    az ml connection create --file <yaml-filename>.yaml --set credentials.client_id="<client-id>" credentials.client_secret="<client-secret>" credentials.tenant_id="<tenant-id>"
    

创建 Azure SQL 数据库数据连接

可以使用 Azure 机器学习 CLI、用于 Python 的 Azure 机器学习 SDK 或机器学习工作室创建 Azure SQL 数据库数据连接。

若要创建 Azure SQL 数据库连接,请先组装定义连接的 YAML 文件,然后运行调用 YAML 文件的 Azure CLI 或 Python SDK 命令或脚本。 对于 Python SDK,还可以直接指定连接信息,而无需使用 YAML 文件。

创建以下 YAML 文件以定义 Azure SQL 数据库连接,并使用名称(如 my_azuresqldb_connection.yaml)保存该文件。 提供 <connection-name>,并将<server><port><database>占位符替换为 Azure SQL 数据库中的相应值。

可以将 Azure SQL 数据库用户名和密码存储在此文件中,但更安全的做法是将这些值留空,并在创建连接的命令行中提供它们。

$schema: http://azureml/sdk-2-0/Connection.json

type: azure_sql_db
name: <connection-name>

target: Server=tcp:<server>,<port>;Database=<database>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30
credentials:
    type: sql_auth
    username: <username>
    password: <password>

若要创建连接,请运行以下 CLI 命令行之一,为占位符提供 YAML 文件名 <yaml-filename>

  • 若要使用 YAML 文件中存储的用户名和密码,请运行以下命令:

    az ml connection create --file <yaml-filename>.yaml
    
  • 要在命令行中作为参数提供用户名和密码,请运行以下命令,并在占位符 <username><password> 处输入您的信息:

    az ml connection create --file <yaml-filename>.yaml --set credentials.username="<username>" credentials.password="<password>"
    

创建外部非数据连接

还可以创建与代码中使用的外部服务的非数据 Azure 机器学习连接。 本部分演示如何创建以下非数据连接:

  • Git
  • Python 源
  • Azure 容器注册表
  • 通用容器注册表
  • API 密钥

创建 Git 连接

可以使用 Azure CLI、Python SDK 或机器学习工作室创建 Git 连接。

若要使用 Azure CLI 创建 Git 连接,请使用以下 YAML 文件之一定义连接。 将文件命名为类似git-connection.yml的名字。

  • 若要使用个人访问令牌(PAT)进行连接,请提供<connection-name>,并将 <account><repo><PAT> 占位符替换为您 Git 帐户、存储库和 PAT 的值。

    name: <connection-name>
    type: git
    target: https://github.com/<account>/<repo>
    credentials:
       type: pat
       pat: <PAT>
    
  • 若要在不使用凭据的情况下连接到公共存储库,请提供<connection-name>,并将<account><repo>占位符替换为你的值。

    name: <connection-name>
    type: git
    target: https://github.com/<account>/<repo>
    

通过运行以下命令创建 Azure 机器学习连接,为占位符提供 YAML 文件名 <yaml-filename>

az ml connection create --file <yaml-filename>.yaml

Python 源

可以使用 Azure CLI、Python SDK 或机器学习 Studio 创建与 Python 馈送的连接。

使用以下 YAML 文件之一定义 Python 源连接。 将文件命名 为python-feed-connection.yml

  • 若要使用 PAT 进行连接,请提供一个<connection-name>,并将<feed-url><PAT>占位符替换为您源的值。

    name: <connection-name>
    type: python_feed
    target: https://<feed-url>
    credentials:
       type: pat
       pat: <PAT>
    
  • 若要使用用户名和密码进行连接,请提供<connection-name>,并将<feed-url><username><password>占位符替换为您的feed的值。

    name: <connection-name>
    type: python_feed
    target: https://<feed-url>
    credentials:
       type: username_password
       username: <username>
       password: <password>
    
  • 若要在不使用凭据的情况下连接到公共源,请提供<connection-name>,并将<feed-url>占位符替换为您的 Python 源 URL。

    name: <connection-name>
    type: python_feed
    target: https://<feed-url>
    

通过运行以下命令创建 Azure 机器学习连接,为占位符提供 YAML 文件名 <yaml-filename>

az ml connection create --file <yaml-filename>.yaml

Azure 容器注册表

可以使用 Azure CLI、Python SDK 或机器学习工作室创建到 Azure 容器注册表的连接。

使用以下 YAML 文件通过用户名/密码身份验证定义与 Azure 容器注册表的连接。

name: <connection-name>
type: container_registry
target: https://<container-registry-url>
credentials:
   type: username_password
   username: <username>
   password: <password>

若要创建连接,请运行以下命令:

az ml connection create --file connection.yaml

通用容器注册表

GenericContainerRegistry 工作区连接指定了用于镜像构建的外部注册表,例如 Nexus 或 Artifactory。 环境映像从指定的注册表推送,先前的缓存会被忽略。 可以使用 Azure CLI、Python SDK 或机器学习工作室创建与通用容器注册表的连接。

对于 Azure CLI 和 Python SDK,以下示例 YAML 文件定义了一个通用容器注册表连接。 使用自己的值更新示例值。

#myenv.yml
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json 
name: docker-image-plus-conda-example 
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
type: python_feed
conda_file: conda_dep.yml
description: Environment created from a Docker image plus Conda environment
#conda_dep.yml
name: project_environment
dependencies:
  - python=3.10
  - pip:
    - azureml-defaults
channels:
  - anaconda
  - conda-forge
#connection.yml
name: ws_conn_generic_container_registry
type: container_registry
target: https://test-registry.com
credentials:
  type: username_password
  username: myusername
  password: <password>
#hello_world_job.yml
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
command: echo "hello world"
environment: azureml:myenv@latest

运行以下命令,使用前面的 YAML 文件和凭据创建连接。 使用自己的值更新示例值。

az ml connection create --file connection.yml --credentials username=myusername password=<password> --resource-group my-resource-group --workspace-name my-workspace

若要创建环境,请运行以下命令:

az ml environment create --name docker-image-plus-conda-example --version 1 --file myenv.yml  --conda-file conda_dep.yml --image mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04 --resource-group my-resource-group --workspace-name my-workspace

运行以下命令,验证是否已成功创建环境。

az ml environment show --name docker-image-plus-conda-example --version 1 --resource-group my-resource-group --workspace-name my-workspace

API 密钥

创建以下 YAML 文件以定义与 API 密钥的连接。 使用自己的值更新示例值。

name: my_api_key
type: api_key
api_base: "https://myapi.core.chinacloudapi.cn/mycontainer"
api_key: "aAbBcCdD"

若要创建连接,请运行以下命令:

az ml connection create --file connection.yaml

为了提高安全性,请不要在 YAML 文件中包含 api_key 值,而是在命令行中提供它。

az ml connection create --file connection.yml --set api_key="aAbBcCdD"