在同一个 arm 模板部署中创建多个 keyvault 机密

Creating multiple keyvault secrets in same arm template deployment

我目前在同一 arm 模板部署中的 keyvault 中创建多个机密时遇到问题。问题是 arm 模板试图同时创建键,这是不支持的。我想做的是让第二个秘密依赖于第一个。

第一个键的名字是

"name": "[format('{0}/{1}', variables('kvName'), 'StorageAccountConnString')]"

我似乎无法让它工作。我不确定在 dependsOn 数组中写什么。我尝试按原样使用上面的值,我也尝试使用 resourceId,但它告诉我我只发送了一个参数,即使它不是真的:

"[resourceId('Microsoft.KeyVault/vaults/secrets', format('{0}/{1}', variables('kvName'), 'StorageAccountConnString'))]"

有人可以帮助我吗?有什么办法可以告诉 azure 不要同时部署这些秘密吗?或者如何按顺序 运行 获取它?

resourceId应该有两部分:

resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)

Returns the unique identifier of a resource. You use this function when the resource name is ambiguous or not provisioned within the same template. The format of the returned identifier varies based on whether the deployment happens at the scope of a resource group, subscription, management group, or tenant.

对于您的情况,这应该有效:

"[resourceId('Microsoft.KeyVault/vaults/secrets', variables('kvName'), 'StorageAccountConnString')]"

如果您不希望创建的秘密之间存在依赖关系,您始终可以使用 nested template

@Thomas 给我的答案解决了我要问的问题:如何正确地制定对密钥保管库机密的依赖关系。但问题是这不是手头的实际问题。

虽然 azure 告诉我一些“ConflictError”,但这并不是真正的问题。问题是有一个关于机密的 soft-delete 策略,它试图创建的机密已在一段时间前被删除。

因此,如果您正在寻找

的解决方案
##[error]ConflictError: A conflict occurred that prevented the operation from completing. The operation failed because the Key Vault changed from the point the operation began. This can happen if parallel operations are being performed on the Key Vault. To prevent this error, serialize the operations so that only one operation is performed on the Key Vault at a time. Follow this link for more information: https://go.microsoft.com/fwlink/?linkid=2147741

知道 parallel operations 实际上没有问题,但实际上 soft-delete 该机密的政策。