在 Azure Stack Hub 中将 API 版本配置文件与 Python 配合使用

重要

Python SDK 已从 track 1 更新为 track 2。 建议尽快迁移到 track 2 SDK。 有关说明,请参阅此迁移指南

Python SDK 支持 API 版本配置文件将不同的云平台(例如 Azure Stack Hub 和公共 Azure)用作目标。 使用 API 配置文件为混合云创建解决方案。

本文中的说明要求 Azure 订阅。 如果没有 Azure 订阅,可以获取一个试用版订阅

Python 与 API 版本配置文件

Python SDK 支持以下 API 配置文件:

  • latest
    此配置文件以 Azure 平台中所有服务提供程序的最新 API 版本为目标。

  • 2020_09_01_hybrid
    此配置文件针对版本 2102 或更高版本的 Azure Stack Hub 平台中所有资源提供程序的最新 API 版本。

  • 2019_03_01_hybrid
    此配置文件针对版本 1904 或更高版本的 Azure Stack Hub 平台中所有资源提供程序的最新 API 版本。

    有关 API 配置文件和 Azure Stack Hub 的详细信息,请参阅在 Azure Stack Hub 中管理 API 版本配置文件

安装 Azure Python SDK

  1. 安装 Git
  2. 安装 Python SDK

配置文件

对于包含日期的配置文件,若要使用不同的 SDK 配置文件或版本,请替换中 v<date>_hybrid 的日期。 例如,对于 2008 版本,配置文件为 2019_03_01,字符串变为 v2019_03_01_hybrid。 请注意,有时,SDK 团队会更改包的名称,因此仅用不同日期替换字符串的日期可能不起作用。 请参阅下表,了解配置文件与 Azure Stack 版本的关联。

Azure Stack 版本 配置文件
2301 2020_09_01
2206 2020_09_01
2108 2020_09_01
2102 2020_09_01
2008 2019_03_01

有关 Azure Stack Hub 和 API 配置文件的详细信息,请参阅 API 配置文件的摘要

请参阅 Python SDK 配置文件

订阅

如果还没有订阅,请创建订阅,并保存稍后要使用的订阅 ID。 有关如何创建订阅的详细信息,请参阅此文档

服务主体

应创建服务主体及其关联环境信息并将其保存到某个位置。 建议使用具有 owner 角色的服务主体,但根据该示例,contributor 角色即可满足要求。 有关必需值,请参阅示例存储库中的自述文件。 读取的这些值可以是 SDK 语言支持的任何格式,例如我们的示例使用的 JSON 文件格式。 并非所有这些值都可以使用,具体取决于所运行的示例。 有关更新的示例代码或详细信息,请参阅示例存储库

租户 ID

若要查找 Azure Stack Hub 的目录或租户 ID,请按照此文中的说明进行操作。

注册资源提供程序

遵循此文档注册所需的资源提供程序。 根据要运行的示例,将需要这些资源提供程序。 例如,如果要运行 VM 示例,则需要 Microsoft.Compute 资源提供程序注册。

Azure Stack 资源管理器终结点

Azure 资源管理器 (ARM) 是一种管理框架,可供管理员用来部署、管理和监视 Azure 资源。 Azure 资源管理器可以通过单个操作以组任务而不是单个任务的形式处理这些任务。 可以从资源管理器终结点获取元数据信息。 该终结点返回 JSON 文件,其中包含运行代码所需的信息。

  • Azure Stack 开发工具包 (ASDK) 中的 ResourceManagerEndpointUrl 是:https://management.local.azurestack.external/
  • 集成系统中的 ResourceManagerEndpointUrl 为 https://management.region.<fqdn>/,其中 <fqdn> 是完全限定的域名。
  • 检索所需的元数据:<ResourceManagerUrl>/metadata/endpoints?api-version=1.0。 有关可用的 API 版本,请参阅 Azure REST API 规范。 例如,在 2020-09-01 配置文件版本中,可以将资源提供程序 microsoft.resourcesapi-version 更改为 2019-10-01

示例 JSON:

{
   "galleryEndpoint": "https://portal.local.azurestack.external:30015/",
   "graphEndpoint": "https://graph.chinacloudapi.cn/",
   "portal Endpoint": "https://portal.local.azurestack.external/",
   "authentication": 
      {
         "loginEndpoint": "https://login.chinacloudapi.cn/",
         "audiences": ["https://management.yourtenant.partner.onmschina.cn/3cc5febd-e4b7-4a85-a2ed-1d730e2f5928"]
      }
}

信任 Azure Stack Hub CA 根证书

如果使用的是 ASDK,则必须显式信任远程计算机上的 CA 根证书。 不需要信任 Azure Stack Hub 集成系统的 CA 根证书。

Windows

  1. 在计算机上找到 Python 证书存储位置。 该位置可能因 Python 的安装位置而异。 打开命令提示符或权限提升的 PowerShell 提示符,然后键入以下命令:

      python -c "import certifi; print(certifi.where())"
    

    记下证书存储位置,例如, ~/lib/python3.5/site-packages/certifi/cacert.pem。 具体的路径取决于操作系统以及安装的 Python 版本。

  2. 若要信任 Azure Stack Hub CA 根书,请将它附加到现有的 Python 证书:

    $pemFile = "<Fully qualified path to the PEM certificate; for ex: C:\Users\user1\Downloads\root.pem>"
    
    $root = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
    $root.Import($pemFile)
    
    Write-Host "Extracting required information from the cert file"
    $md5Hash    = (Get-FileHash -Path $pemFile -Algorithm MD5).Hash.ToLower()
    $sha1Hash   = (Get-FileHash -Path $pemFile -Algorithm SHA1).Hash.ToLower()
    $sha256Hash = (Get-FileHash -Path $pemFile -Algorithm SHA256).Hash.ToLower()
    
    $issuerEntry  = [string]::Format("# Issuer: {0}", $root.Issuer)
    $subjectEntry = [string]::Format("# Subject: {0}", $root.Subject)
    $labelEntry   = [string]::Format("# Label: {0}", $root.Subject.Split('=')[-1])
    $serialEntry  = [string]::Format("# Serial: {0}", $root.GetSerialNumberString().ToLower())
    $md5Entry     = [string]::Format("# MD5 Fingerprint: {0}", $md5Hash)
    $sha1Entry    = [string]::Format("# SHA1 Fingerprint: {0}", $sha1Hash)
    $sha256Entry  = [string]::Format("# SHA256 Fingerprint: {0}", $sha256Hash)
    $certText = (Get-Content -Path $pemFile -Raw).ToString().Replace("`r`n","`n")
    
    $rootCertEntry = "`n" + $issuerEntry + "`n" + $subjectEntry + "`n" + $labelEntry + "`n" + `
    $serialEntry + "`n" + $md5Entry + "`n" + $sha1Entry + "`n" + $sha256Entry + "`n" + $certText
    
    Write-Host "Adding the certificate content to Python Cert store"
    Add-Content "${env:ProgramFiles(x86)}\Python35\Lib\site-packages\certifi\cacert.pem" $rootCertEntry
    
    Write-Host "Python Cert store was updated to allow the Azure Stack Hub CA root certificate"
    

注意

如果通过 Python SDK 使用 virtualenv 进行开发,则必须向虚拟环境证书存储添加上述证书。 路径看起来可能类似于:..\mytestenv\Lib\site-packages\certifi\cacert.pem

示例

请参阅此示例存储库,获取最新 (track 2) 示例代码。 有关 track 1 示例代码,请参阅此示例存储库。 根 README.md 描述一般要求,每个子目录都包含特定示例,内有其自己的 README.md 描述如何运行该示例。

有关适用于 Azure Stack 版本 2008 或配置文件 2019-03-01 及更低版本的示例,请参阅此文

后续步骤