[英]Is there a way to generate a bicep file for an existing Azure resource?
[英]Azure bicep dependsOn for existing resource
從我的“主”二頭肌模塊中,我想引用一個現有的 function,它是由從同一“主”二頭肌調用的模塊創建的。 所以使用了以下代碼:
resource functionApp 'Microsoft.Web/sites@2021-02-01' existing = {
name: functionAppName
scope: resourceGroup(subscriptionId, 'rg-365response-${env}-001')
}
然后,我可以使用“functionApp”資源變量中的屬性來獲取 function 密鑰並將其存儲為密鑰庫機密,如下所示:
resource funcSecret 'Microsoft.KeyVault/vaults/secrets@2021-04-01-preview' = {
name: '${kvName}/funcAppKey'
properties: {
value: listKeys('${functionApp.id}/host/default', functionApp.apiVersion).functionKeys.default
}
}
但是,當我運行資源組部署並看到以下錯誤時:
找不到資源組“rg-365response-int-001”下的資源“Microsoft.Web/sites/func-365response-int-001”
這是某種時間問題,我想它是在調用創建它的模塊之前檢查 function 應用程序有機會完成。
如果我第二次運行“主”二頭肌模塊,一切正常。
似乎不可能對“現有”資源使用“dependsOn”語法。
有替代方案嗎?
我認為您是正確的,因為 listKeys() 調用得太早了,不幸的是,您無法使用 dependsOn 修復它。 這里有更多解釋: https://bmoore-msft.blog/2020/07/26/resource-not-found-dependson-is-not-working/
解決這個問題的唯一方法是將 listKeys 和 function 放入不同的模塊中,如果第二個模塊不使用第一個模塊的輸入,請確保您有 dependsOs。
對我來說沒有加起來的部分是您在上面的示例中的資源上有一個existing
關鍵字,但您說您正在創建它。 您描述的症狀還表明您正在同一部署中創建它。 如果你是,他們你不需要'existing'關鍵字。
如果一切都失敗了 - 發布所有代碼。
DependOns
只能用於在同一個二頭肌文件(ARM 模板)中定義的資源。
當您使用existing
關鍵字時,它將被 Bicep 編譯為resourceId() or reference()
您可以創建一個模塊來創建秘密:
// key-vault-secret.bicep
param kvName string
param secretName string
@secure()
param secretValue string
resource kvSecret 'Microsoft.KeyVault/vaults/secrets@2021-04-01-preview' = {
name: '${kvName}/${secretName}'
properties: {
value: secretValue
}
}
然后從您創建 function 的位置,您可以像這樣調用它:
resource functionApp 'Microsoft.Web/sites@2021-03-01' = {
name: functionAppName
location: location
kind: 'functionapp'
...
}
// Add secret to KV
module functionKey 'key-vault-secret.bicep' = {
name: 'function-default-host-key'
scope: resourceGroup()
params:{
kvName: kvName
secretName: 'funcAppKey'
secretValue: listKeys('${functionApp.id}/host/default', functionApp.apiVersion).functionKeys.default
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.