为 Bicep 模块创建专用注册表

要在你的组织内共享模块,你可以创建一个专用模块注册表。 然后你可以将模块发布到该注册表,并为需要部署模块的用户授予读取权限。 在注册表中共享模块后,你可以从 Bicep 文件中引用共享的模块。 若要使用公共模块,请参阅 Bicep 模块

要使用模块注册表,必须具有 Bicep CLI 版本 0.4.1008 或更高版本。 要与 Azure CLI 一起使用,还必须具有 2.31.0 或更高版本;要与 Azure PowerShell 一起使用,还必须具有 7.0.0 或更高版本。

配置专用注册表

Bicep 注册表托管在 Azure 容器注册表 (ACR) 上。 使用以下步骤为模块配置注册表。

  1. 如果已有容器注册表,则可以直接使用。 如果需要创建容器注册表,请参阅快速入门:使用 Bicep 文件创建容器注册表

    可以为模块注册表使用任何可用的注册表 SKU。 注册表异地复制为用户提供了本地状态或作为热备份。

  2. 获取登录服务器名称。 从 Bicep 文件链接到注册表时需要此名称。 登录服务器名称的格式为:<registry-name>.azurecr.cn

    要获取登录服务器名称,使用 Get-AzContainerRegistry

    Get-AzContainerRegistry -ResourceGroupName "<resource-group-name>" -Name "<registry-name>"  | Select-Object LoginServer
    
  3. 要将模块发布到注册表,你必须具有推送映像的权限。 要从注册表部署模块,你必须具有拉取映像的权限。 有关授予足够访问权限的角色的详细信息,请参阅 Azure 容器注册表角色和权限

  4. 根据用于部署模块的帐户类型,你可能需要自定义使用哪些凭据。 需要这些凭据才能从注册表获取模块。 默认情况下,凭据是从 Azure CLI 或 Azure PowerShell 获取的。 可以在 bicepconfig.json 文件中自定义获取凭据的优先顺序。 有关详细信息,请参阅用于还原模块的凭据

重要

专用容器注册表仅对具有所需访问权限的用户可用。 但是,可以通过公共 Internet 进行访问。 为了提高安全性,可以要求通过专用终结点进行访问。 请参阅使用 Azure 专用链接以私密方式连接到 Azure 容器注册表

专用容器注册表必须将策略 azureADAuthenticationAsArmPolicy 设置为 enabled。 如果将 azureADAuthenticationAsArmPolicy 设置为 disabled,发布模块时将收到 401(未授权)错误消息。 请参阅 Azure 容器注册表引入了条件访问策略

将文件发布到注册表

设置容器注册表后,可以将文件发布到注册表。 使用 publish 命令并提供你打算用作模块的任何 Bicep 文件。 在注册表中指定模块的目标位置。 发布命令将创建一个存储在注册表中的 ARM 模板。 这意味着,如果发布引用其他本地模块的 Bicep 文件,这些模块将完全扩展为一个 JSON 文件并发布到注册表。

Publish-AzBicepModule -FilePath ./storage.bicep -Target br:exampleregistry.azurecr.cn/bicep/modules/storage:v1 -DocumentationUri https://www.contoso.com/exampleregistry.html

借助 Bicep CLI 版本 0.27.1 或更高版本,除了编译的 JSON 模板外,还可以使用 Bicep 源代码发布模块。 如果使用 Bicep 源代码将模块发布到注册表,则可以按 Visual Studio Code 中的 F12转到定义)查看 Bicep Code。 需要 Bicep 扩展版本 0.27 或更高版本才能查看 Bicep 文件。

Publish-AzBicepModule -FilePath ./storage.bicep -Target br:exampleregistry.azurecr.io/bicep/modules/storage:v1 -DocumentationUri https://www.contoso.com/exampleregistry.html -WithSource

使用源开关时,清单中会显示另一层:

包含源的 bicep 模块注册表的屏幕截图。

如果 Bicep 模块引用专用注册表中的模块,则 ACR 终结点可见。 若要隐藏完整终结点,可以配置专用注册表的别名。

在注册表中查看文件

若要在门户中查看已发布的模块:

  1. 登录 Azure 门户

  2. 搜索“容器注册表”。

  3. 选择你的注册表。

  4. 从左侧菜单中选择“服务”->“存储库”。

  5. 选择模块路径(存储库)。 在前面的示例中,模块路径名称是 bicep/modules/storage。

  6. 选择标签。 在前面的示例中,标签是 v1。

  7. 工件引用与你将在 Bicep 文件中使用的引用相匹配

    Bicep 模块注册表工件引用

你现在已准备好从 Bicep 文件引用注册表中的文件。 有关用于引用外部模块的语法示例,请参阅 Bicep 模块


使用 Bicep 注册表文件

使用远程注册表中托管的 bicep 文件时,请务必了解本地计算机与注册表的交互方式。 首次声明对注册表的引用时,本地编辑器会尝试与 Azure 容器注册表通信,并将注册表的副本下载到本地缓存。

本地缓存位于:

  • 在 Windows 上

    %USERPROFILE%\.bicep\br\<registry-name>.azurecr.io\<module-path\<tag>
    
  • 在 Linux 上

    /home/<username>/.bicep
    
  • 在 Mac 上

    ~/.bicep
    

本地计算机可以识别在对包含注册表引用的指定文件运行 restore 之前对远程注册表所做的任何更改。

az bicep restore --file <bicep-file> [--force]

有关详细信息,请参阅 restore 命令

后续步骤