能否在第二个Azure Bicep文件中引用存储账户的属性?
问题解答
当然可以获取Storage.bicep中创建的存储账户属性供cdn.bicep使用,常见有两种实现方案,你可以根据自己的部署场景选择:
方案1:通过「输出+参数」传递属性值
适合需要把存储部署和CDN部署拆分成两个独立流程的场景:
- 先在Storage.bicep末尾定义需要对外暴露的属性输出,示例代码:
// 假设你Storage.bicep中定义的存储账户逻辑名为stg output storageAccountName string = stg.name output storageAccountId string = stg.id output storageBlobEndpoint string = stg.properties.primaryEndpoints.blob
- 在cdn.bicep开头定义对应接收参数:
param storageAccountName string param storageAccountId string param storageBlobEndpoint string
- 部署时先执行Storage.bicep的部署,提取输出的属性值,再作为参数传入cdn.bicep的部署流程,Azure CLI示例命令:
# 部署存储模板并捕获输出 stgOutput=$(az deployment group create -g <资源组名称> -f Storage.bicep --query properties.outputs) # 传递参数部署CDN模板 az deployment group create -g <资源组名称> -f cdn.bicep \ --parameters storageAccountName=$(echo $stgOutput | jq -r '.storageAccountName.value') \ storageAccountId=$(echo $stgOutput | jq -r '.storageAccountId.value') \ storageBlobEndpoint=$(echo $stgOutput | jq -r '.storageBlobEndpoint.value')
方案2:通过existing关键字直接引用现有存储账户
如果CDN和存储部署在同一个订阅下,更推荐这种无需手动传参的方案:
直接在cdn.bicep中引用已经创建完成的存储账户,Bicep会自动读取它的所有属性,示例代码:
// 只需要传入存储账户名称即可 param storageAccountName string // 引用已存在的存储账户 resource stg 'Microsoft.Storage/storageAccounts@2023-01-01' existing = { name: storageAccountName // 如果存储和CDN不在同一个资源组,添加下面这行指定存储所在资源组 // scope: resourceGroup('<存储所在资源组名称>') } // 后续直接使用stg的属性即可,示例: var originHostName = replace(stg.properties.primaryEndpoints.blob, 'https://', '')
注意事项
- 使用
existing关键字时,部署使用的Azure账号需要有对应存储账户的读取权限 - 存储资源的API版本要和你实际使用的版本保持一致
内容的提问来源于stack exchange,提问作者ctgopinaath
相关产品推荐
相关产品推荐

