如何通过ARM REST API部署Bicep注册表(ACR)内的Bicep模板
结论
直接通过ARM REST API部署存储在Bicep注册表(ACR)中的模板完全可行,不需要强制使用Template Specs(模板规格)。你之前查阅文档时没找到对应配置,是因为引用ACR模板不需要使用templateSpec参数,而是通过通用的模板链接参数实现。
具体配置方法
调用ARM部署创建API时,在请求体的properties节点下使用templateLink属性指向ACR中存储的模板即可,不需要额外的中转环节:
- 调用API的身份(服务主体、托管标识等)需要同时配置两类权限:一是目标部署范围(资源组/订阅/管理组)的部署写入权限,二是对应ACR的
AcrPull权限,用于拉取存储在注册表中的模板工件 - 不需要为ACR模板地址配置SAS令牌,ARM原生支持通过Azure AD身份认证直接拉取ACR内的Bicep相关工件,只要身份有对应拉取权限就能正常读取
- 如果发布到ACR的Bicep模板引用了其他外部模块,发布时需要通过
bicep publish命令完整上传所有依赖,部署时ARM会自动解析拉取关联模块,不需要手动处理嵌套模板的地址 - 支持通过ACR资源ID或者ACR公网/内网域名两种方式指定模板地址
对应的REST API请求体示例如下:
{ "location": "<部署区域,例如chinaeast2>", "properties": { "mode": "Incremental", "templateLink": { // 方式1:通过ACR资源ID指定模板 "id": "/subscriptions/<订阅ID>/resourceGroups/<ACR所在资源组>/providers/Microsoft.ContainerRegistry/registries/<ACR实例名>/bicep/<模板仓库名>:<版本标签>" // 方式2:通过ACR端点URI指定模板 // "uri": "https://<ACR实例名>.azurecr.io/bicep/<模板仓库名>:<版本标签>" }, "parameters": { // 填入部署所需的参数键值对 } } }
选型说明
你优先选择Bicep注册表存储模板的方案完全适配自动化事件触发部署场景:
- 不需要额外维护Template Spec类型的Azure资源,模板版本管理、跨团队模块复用的能力和Bicep原生工作流完全对齐
- 部署链路和用Template Spec的链路没有本质区别,REST API调用的逻辑基本一致,只是传入的模板地址参数不同
- 仅在跨租户部署的场景下,Template Spec的权限配置会比ACR模板更简便,单租户内的自动化服务场景下,Bicep注册表方案没有额外使用门槛
内容的提问来源于stack exchange,提问作者Eric McNeill
相关产品推荐
相关产品推荐

