如何访问/将模块输出投射到二头肌中的特定对象?

sen*_*sen 5 azure azure-resource-manager azure-devops infrastructure-as-code azure-bicep

我的二头肌下方正在返回 keyvault。我喜欢访问父二头肌中 keyvault 中的属性/功能。但不知道将其用作模块时如何实现。

  1. 我有keyvault.bicep
    resource kv 'Microsoft.KeyVault/vaults@2019-09-01' existing = {
         name: kvName
         scope: resourceGroup(subscriptionId, kvResourceGroup )
       }
       output kv1 object=kv
Run Code Online (Sandbox Code Playgroud)
  1. 我有parent.bicep(其中 keyvault.bicep 作为模块包含在内)
   module kv './keyvault.bicep' = {
     name: 'get Secrets'
     params: {
       subscriptionId: subscriptionId
       kvResourceGroup: resourceGroupName
       kvName: keyVaultName
     }
   }
   var pwd= kv.outputs.kv1.getSecret('key')
Run Code Online (Sandbox Code Playgroud)
  1. 但 getSecret 方法在父二头肌中未知

请建议如何进行?

Tho*_*mas 4

简短的回答是不支持。

在您的parent.bicep文件中,kv是模块引用,而不是资源。为了正确理解父子资源层次结构,Bicep 需要父属性值中正确父类型的资源引用。

不过,有一项简化资源引用的提案:

假设您有keyvault.bicep创建密钥保管库的模块

resource kv 'Microsoft.KeyVault/vaults@2019-09-01' = {
  name: kvName
  ...
}

output name string = kv.name
Run Code Online (Sandbox Code Playgroud)

在parent.bicep中,您可以获得对密钥保管库的引用,如下所示:

module kvModule './keyvault.bicep' = {
  name: 'key-vault-${keyVaultName}'
  params: {
    kvName: keyVaultName
    ...
  }
}

resource kv 'Microsoft.KeyVault/vaults@2019-09-01' existing = {
  name: kvModule.outputs.name
}
Run Code Online (Sandbox Code Playgroud)

在您的示例中,有几件事:

  • Key Vault 模块仅获取对 Key Vault 的引用,因此您实际上并不需要模块,您可以直接在 Parent.bicep 文件中引用 Key Vault。
  • getSecret 函数是一个非常具体的函数,您只能使用它来将安全参数传递给另一个模块:

    从 Azure Key Vault 返回机密。该getSecret函数只能在资源上调用Microsoft.KeyVault/vaults。使用此函数将秘密传递给 Bicep 模块的安全字符串参数。该函数只能与具有装饰器的参数一起使用@secure()

  • 这将不起作用:resource kv 'Microsoft.KeyVault/vaults@2019-09-01'execution = { name: kvModule..outputs.name } 此表达式用于对“Microsoft”的“name”属性进行赋值.KeyVault/vaults”类型,它需要一个可以在部署开始时计算的值。可以在开始时计算的 keyVaultModule 属性包括“name”.bicep(BCP120) (3认同)