Azure Bicep能否像Terraform一样引用独立仓库中的模块?
结论
Azure Bicep 当前正式版本不支持直接在模块声明中填写 Git 仓库地址实现跨独立仓库的模块引用,你仿照 Terraform 语法写的引用方式不符合 Bicep 现有语法规则,因此运行失败。目前有两种成熟的替代方案可以实现相同的需求:
方案1:使用 Bicep 模块注册表(官方推荐)
这是微软官方主推的跨项目共享 Bicep 模块的方案,你可以先将通用 Bicep 模块推送到 Azure 容器注册表(ACR)中,之后在任意项目中都可以直接引用注册表内的模块,引用语法示例如下:
module storagemod 'br:myacr.azurecr.cn/bicep/modules/storage-account:v0.2.0' = { name: 'createDataLakeAndContainers' params: { rg_name: 'MyRG' resource_name: 'mynewdatalake' } }
权限校验只需给流水线服务主体分配对应 ACR 的 AcrPull 权限即可,不需要额外配置 Git 凭证。
方案2:流水线前置拉取依赖仓库
如果你暂时不想搭建模块注册表,可以沿用类似 Terraform 的实现思路:在流水线运行 Bicep 部署之前,先将存放公共模块的独立仓库克隆到流水线工作目录的指定路径下,之后用本地相对路径引用模块即可。
Azure DevOps 流水线拉取外部仓库的 YAML 配置示例如下:
steps: # 拉取指定版本的公共模块仓库到本地 modules 目录 - checkout: git://MyProj/Dataplatform/myrepo@v0.2.0 path: s/modules displayName: 'Checkout public Bicep module repository' # 后续正常运行Bicep部署即可 - task: AzureCLI@2 inputs: azureSubscription: '你的Azure服务连接名称' scriptType: 'bash' inlineScript: 'az deployment group create -g MyRG -f ./main.bicep'
对应的 Bicep 模块引用写法:
module storagemod './modules/storage-account/datalake.bicep' = { name: 'createDataLakeAndContainers' params: { rg_name: 'MyRG' resource_name: 'mynewdatalake' } }
该方案不需要额外调整现有权限配置,直接复用 Azure DevOps 内置的仓库拉取权限即可完成校验。
补充说明:目前 Bicep 官方团队已经将原生 Git 源模块引用功能列入开发 roadmap,未来版本可能会支持类似 Terraform 的直接引用方式,当前正式版本暂未落地该能力。
内容的提问来源于stack exchange,提问作者Mike Williamson
相关产品推荐
相关产品推荐

