我需要:
数据工厂是在与“主”二头肌不同的模块中创建的。这是为了防止“主”模板太大而难以使用 - 这是二头肌相对于手臂模板的主要优点之一。创建函数应用程序也是如此。
对于角色分配,我有:
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-08-01-preview' = {
name: guid(storageAccount.id, contributorRoleId, adfDeploy.outputs.dfId)
VSCode 然后出现以下“问题”:
此表达式用于对“name”属性的赋值 “Microsoft.Authorization/roleAssignments”类型,这需要 可以在部署开始时计算的值。 可以在开始时计算的 adfDeploy 属性包括 “名字”。
我无法从字符串(订阅/rg/资源等)组成 storageAccount Id,因为订阅 id 也是在运行时确定的,因为调用同一个主二头肌来部署到多个订阅。
有没有什么方法可以实现所需的功能,而无需将数据工厂和功能应用程序的创建拉回到“主”二头肌?
您可以创建一个用于存储角色分配的通用模块:
// storage-account-role-assignment.bicep
param storageAccountName string
param principalId string
param roleId string
// Get a reference to the storage account
resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' existing = {
name: storageAccountName
}
// Grant permissions to the storage account
resource storageAccountAppRoleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
name: guid(storageAccount.id, roleId, principalId)
scope: storageAccount
properties: {
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', roleId)
principalId: principalId
}
}
然后从您创建数据工厂或函数应用程序的位置调用此模块:
// function-app.bicep
...
resource functionApp 'Microsoft.Web/sites@2021-03-01' = {
name: functionAppName
kind: 'functionapp'
identity: {
type: 'SystemAssigned'
}
...
}
// Create role assignment
module roleAssignment 'storage-account-role-assignment.bicep' = {
name: 'function-storage-account-role-assignment'
scope: resourceGroup()
params:{
storageAccountName: storageAccountName
roleId: '<role-id>'
principalId: functionApp.identity.principalId
}
}
// data-factory.bicep
...
resource dataFactory 'Microsoft.DataFactory/factories@2018-06-01' = {
name: name
identity: {
type: 'SystemAssigned'
}
...
}
// Create role assignment
module roleAssignment 'storage-account-role-assignment.bicep' = {
name: 'data-facory-storage-account-role-assignment'
scope: resourceGroup()
params:{
storageAccountName: storageAccountName
roleId: '<role-id>'
principalId: dataFactory.identity.principalId
}
}
我联系了支持人员。 这是 EastUS2 的容量问题。我将其移至美国中部并且正在运行。