[英]How can I adapt an existing resource with Azure Bicep?
我目前正在將一些基礎設施作為代碼腳本從 Azure CLI 移植到 Azure Bicep。 除此之外,Bicep 文件應該創建一個子網並允許從該子網訪問現有的 Azure SQL 服務器和現有的存儲帳戶。
對於 SQL 服務器,這很簡單——我可以引用現有的服務器資源並聲明一個表示 VNET 規則的子資源:
resource azureSqlServer 'Microsoft.Sql/servers@2021-05-01-preview' existing = {
name: azureSqlServerName
resource vnetRule 'virtualNetworkRules' = {
name: azureSqlServerVnetRuleName
properties: {
virtualNetworkSubnetId: subnetId
}
}
}
但是,對於存儲帳戶,網絡規則不是子資源,而是存儲帳戶資源的屬性 ( properties.networkAcls.virtualNetworkRules
)。 我無法在我的 Bicep 文件中聲明存儲帳戶的所有詳細信息,因為從我目前正在處理的部署中,該資源已超出 scope。 本質上,我想調整現有資源,只需確保存在一個規則。
以下不起作用,因為existing
不能與properties
結合:
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' existing = {
name: storageAccountName
properties: {
networkAcls: {
virtualNetworkRules: [
{
id: subnetId
action: 'Allow'
}
]
}
}
}
有什么方法可以讓我使用二頭肌來調整現有資源的一小部分?
bicep 中的existing
關鍵字用於告訴 bicep 該資源已經存在,您只需要在代碼中對該資源進行符號引用。 如果資源不存在,則部署可能會[可能]以某種方式失敗。
您的第一個片段相當於:
resource vnetRule 'Microsoft.Sql/servers/virtualNetworkRules@2021-05-01-preview' = {
name: '${azureSqlServerName}/${azureSqlServerVnetRuleName}'
properties: {
virtualNetworkSubnetId: subnetId
}
}
在您的第二個片段中,由於您要更新屬性,因此您必須提供資源的完整聲明,IOW 您必須定義和部署 storageAccount。 這不是二頭肌獨有的,它是 Azure 中的聲明性 model 的工作方式。
也就是說,如果您想在二頭肌中部署到另一個 scope,您可以使用具有 scope 屬性的模塊。 例如
module updateStorage 'storage.bicep' = {
scope: resourceGroup(storageResourceGroupName)
name: 'updateStorage'
}
缺點是您需要確保定義/聲明該 storageAccount 所需的所有屬性,這並不理想。 有一些方法可以圍繞它進行創作,但如果 storageAccount 不存在,則部署肯定會失敗。 例如,您可以斷言 storageAccount 存在,獲取其屬性,然后合並或修改模塊中的屬性。 您可能能夠完成這項工作(取決於您的更改程度),但它在聲明性 model 中有點反模式。
這種幫助?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.