簡體   English   中英

如何使用 Azure 二頭肌調整現有資源?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM