使用专用注册表中的模块

已完成

你已了解如何将模块发布到专用注册表中。 在本单元中,你将学习如何将注册表中已存在的模块用作 Bicep 模板的一部分。

使用 Bicep 模块

找到想要使用的模块后,可以在 Bicep 模板中创建模块定义。 下面是一个示例:

module myModule 'br:myregistry.azurecr.io/modulepath/modulename:moduleversion' = {
  name: 'my-module'
  params: {
    moduleParameter1: 'value'
  }
}

请注意,模块定义类似于本地模块的定义,但有一个重要的区别。 无需在文件系统上指定 Bicep 文件的路径,而是在注册表中包含模块的路径。

添加对模块的引用后,Visual Studio Code 尝试从注册表自动下载模块。 下载模块后,适用于 Visual Studio Code 的 Bicep 扩展会在你工作时为你提供 IntelliSense 和其他代码创作帮助。

别名

可以使用注册表别名来简化模块定义。 无需在每次定义模块时都指定注册表名称,而是使用其别名。 别名在一些方面有所帮助:

  • 它们可以使 Bicep 文件更有条理,并有助于避免重复键入注册表的全名。
  • 如果将来更改为新注册表,可以更新别名,而不是更新对它的每个引用。
  • 某些组织需要将不同的注册表用于不同的情况,例如用于开发和生产环境。 可以通过修改配置文件来切换别名引用的注册表, 然后更改将应用到文件夹中的所有 Bicep 文件。

若要定义别名,需要在与 Bicep 文件相同的文件夹中创建 bicepconfig.json 文件。 在 bicepconfig.json 文件中,定义别名,如以下示例所示:

{
  "moduleAliases": {
    "br": {
      "MyRegistry": {
        "registry": "myregistry.azurecr.io"
      }
    }
  }
}

在 Bicep 文件中定义模块时,请使用略有不同的模块路径类型,其中包括别名:

module myModule 'br/MyRegistry:bicep/my-module:v1' = {
  // ...
}

提示

请注意,在你使用别名时,路径的开头是 br/,而在你不使用别名时,路径的开头是 br:

别名还可以在注册表中包括模块的路径,这在为模块使用通用前缀时非常有用:

{
  "moduleAliases": {
    "br": {
      "MyRegistryWithPath": {
        "registry": "myregistry.azurecr.io",
        "modulePath": "bicep"
      }
    }
  }
}

然后,在 Bicep 文件中定义模块时,可以省略路径:

module myModule 'br/MyRegistryWithPath:my-module:v1' = {
  // ...
}

生成 Bicep 文件

准备好部署 Bicep 文件时,像平时一样部署它。 Bicep 在部署过程中自动从注册表下载模块。 Bicep 将引用的所有模块嵌入到转译的 ARM 模板(JSON 文件)中。

你也可以使用 bicep restore 命令将模块下载过程与生成分开, 然后使用 bicep build 命令和 --no-restore 命令行开关来阻止生成过程下载模块。 但是,通常不需要分隔模块,只需让 Bicep 自动下载模块即可。