如何访问/转换模块输出到二头肌中的特定对象?
Posted
技术标签:
【中文标题】如何访问/转换模块输出到二头肌中的特定对象?【英文标题】:How to access/cast the module output to spefic object in bicep? 【发布时间】:2021-12-03 15:37:33 【问题描述】:我的二头肌下方正在返回 keyvault。我喜欢访问父二头肌的 keyvault 中的属性/功能。但是不知道作为模块使用时如何实现。
-
我有 keyvault.bicep
resource kv 'Microsoft.KeyVault/vaults@2019-09-01' existing =
name: kvName
scope: resourceGroup(subscriptionId, kvResourceGroup )
output kv1 object=kv
-
我有 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')
-
但 getSecret 方法在父二头肌中是未知的
请建议如何进行?
【问题讨论】:
您真的需要密钥库二头肌文件吗?您可以直接在父二头肌文件中引用密钥库吗? 你将如何在模板的其余部分使用这个pwd
变量?问题是getSecret 函数对如何使用有一些特殊要求。
@Thomas 这里的 Keyvault 只是一个例子。它可以是存储帐户或资源组。
@ochzhen 我同意你的观点,它不能分配给变量。它只能分配给模块的安全参数。正如我所说,密钥库就是一个例子。我从下面的答案中了解到,二头肌目前不支持此功能。
我不知道为什么它被否决了。请评论为什么它被否决?
【参考方案1】:
简短的回答是不支持。
在您的
parent.bicep
文件中,kv 是模块引用,而不是资源。为了正确理解父子资源层次结构,Bicep 需要在 parent 属性值中有正确父类型的资源引用。
虽然有一个简化资源引用的建议:
https://github.com/Azure/bicep/issues/2246假设您有 keyvault.bicep
模块来创建密钥库
resource kv 'Microsoft.KeyVault/vaults@2019-09-01' =
name: kvName
...
output name string = kv.name
在 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
在你的例子中,有几件事:
密钥保管库模块只是获取对密钥保管库的引用,因此您实际上并不需要模块,您可以直接在 parent.bicep 文件中引用密钥保管库。 getSecret function 是一个非常具体的函数,您只能使用它来将安全参数传递给另一个模块:从 Azure Key Vault 返回一个机密。
getSecret
函数只能在Microsoft.KeyVault/vaults
资源上调用。使用此函数将秘密传递给二头肌模块的安全字符串参数。该函数只能与具有@secure()
装饰器的参数一起使用。
【讨论】:
谢谢...所以意味着如果parent bicep
中存在资源,则无法使用getSecret
函数...它只能作为安全参数传递给模块。如果我的理解有误,请纠正我。
这行不通:resource kv 'Microsoft.KeyVault/vaults@2019-09-01' existing = name: kvModule..outputs.name 此表达式用于分配给“Microsoft.KeyVault/vaults”类型的“name”属性,它需要一个可以在部署开始时计算的值。 keyVaultModule 可以在开始时计算的属性包括 "name".bicep(BCP120)以上是关于如何访问/转换模块输出到二头肌中的特定对象?的主要内容,如果未能解决你的问题,请参考以下文章