首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure Bicep -引用一个在开始时无法计算的变量

Azure Bicep -引用一个在开始时无法计算的变量
EN

Stack Overflow用户
提问于 2022-08-04 08:33:43
回答 1查看 319关注 0票数 0

我需要:

  • 创建数据工厂
  • 创建存储帐户
  • 创建函数应用程序
  • 将数据工厂的角色分配添加到存储帐户
  • 将函数应用程序的角色分配到存储帐户H 210F 211

数据工厂是在“主”二头肌之外的一个独立模块中创建的。这是为了防止“主要”模板太大,很难使用-二头肌比手臂模板的主要好处之一。函数应用程序的创建也是如此。

关于角色分配,我有:

代码语言:javascript
复制
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-08-01-preview' = {
  name: guid(storageAccount.id, contributorRoleId, adfDeploy.outputs.dfId)

然后,VSCode提出了以下“问题”:

这个表达式在分配给"Microsoft.Authorization/roleAssignments“类型的"name”属性时使用,该类型需要在部署开始时计算的值。adfDeploy的属性(可以在开头计算)包括"name“。

我无法从字符串(订阅/rg/ storageAccount等)编写Id。因为订阅id也是在运行时确定的,因为调用相同的主二头肌来部署到多个订阅。

有什么方法可以实现所需的,而不把数据工厂和功能应用程序的创建撤回到“主”二头肌?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-04 20:26:52

您可以创建用于存储角色分配的通用模块:

代码语言:javascript
复制
// 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
  }
}

然后从创建数据工厂或函数应用程序的地方调用此模块:

代码语言:javascript
复制
// 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
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73232751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档