練習 - 重構範本以使用模組

已完成

在此練習中,您將更新先前建立的 Bicep 範本,使其針對 Azure App Service 資源使用模組。 模組有助於讓主要範本的用途更加明確。 如果您想要的話,可以在其他範本中重複使用 App Service 模組。

在此過程中,您將會:

  • 加入新的模組,並將 App Service 資源移至其中。
  • 從主要 Bicep 範本參照該模組。
  • 新增 App Service 應用程式主機名稱的輸出,然後從模組和範本部署發出該輸出。
  • 測試部署以確定範本有效。

加入新的模組檔案

  1. 在 Visual Studio Code 中,於 main.bicep 檔案建立所在的相同資料夾中建立名為 modules 的新資料夾。 在 modules 資料夾中,建立名為 appService.bicep 的檔案。 儲存檔案。

  2. appService.bicep 檔案中新增下列內容:

    param location string
    param appServiceAppName string
    
    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    
    var appServicePlanName = 'toy-product-launch-plan'
    var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    

    請注意,您複製了 main.bicep 範本中的參數和變數,因為 appService.bicep 範本必須是獨立的。

  3. 儲存對檔案所做的變更。 請注意,Visual Studio Code 不會顯示任何紅色波浪線來指出遺漏變數、遺漏參數或資源無效的警告。

從父代範本新增模組參照

現在您已有完整的模組可部署 App Service 資源,因此您可以參照父代範本內的模組了。 因為模組會部署 App Service 資源,所以您可以從父代範本中刪除相關聯的資源和變數。

  1. main.bicep 檔案中,刪除 App Service 資源以及 appServicePlanNameappServicePlanSkuName 變數定義。 請勿刪除與 App Service 參數,因為您仍然需要這些參數。 此外,請勿刪除儲存體帳戶的參數、變數或資源。

  2. main.bicep 檔案底部新增下列 Bicep 程式碼:

    module appService 'modules/appService.bicep' = {
      name: 'appService'
      params: {
        location: location
        appServiceAppName: appServiceAppName
        environmentType: environmentType
      }
    }
    

    請注意,您要藉由參照父代範本中的參數來指定模組的參數。

  3. 儲存對檔案所做的變更。

以輸出的方式新增主機名稱

  1. appService.bicep 檔案底部新增下列 Bicep 程式碼:

    output appServiceAppHostName string = appServiceApp.properties.defaultHostName
    

    此程式碼會宣告此模組 (將會命名為 appServiceAppHostName) 的輸出會是 string 類型。 輸出會從 App Service 應用程式的 defaultHostName 屬性取得其值。

  2. 儲存對檔案所做的變更。

    此輸出會在將作為模組的 Bicep 檔案內加以宣告,因此只能供父代範本使用。 您也需要將輸出傳回給已部署該範本的人員。

  3. 開啟 main.bicep 檔案,並在檔案底部新增下列程式碼:

    output appServiceAppHostName string = appService.outputs.appServiceAppHostName
    

    請注意,此輸出的宣告方式與模組中的輸出類似。 但這次您要參照模組的輸出,而不是資源屬性。

  4. 儲存對檔案所做的變更。

驗證 Bicep 檔案

完成上述所有變更之後,main.bicep 檔案看起來應該像下列範例:

param location string = 'eastus'
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'

@allowed([
  'nonprod'
  'prod'
])
param environmentType string

var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountSkuName
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

module appService 'modules/appService.bicep' = {
  name: 'appService'
  params: {
    location: location
    appServiceAppName: appServiceAppName
    environmentType: environmentType
  }
}

output appServiceAppHostName string = appService.outputs.appServiceAppHostName

appService.bicep 檔案看起來應該像下列範例:

param location string
param appServiceAppName string

@allowed([
  'nonprod'
  'prod'
])
param environmentType string

var appServicePlanName = 'toy-product-launch-plan'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'

resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSkuName
  }
}

resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

output appServiceAppHostName string = appServiceApp.properties.defaultHostName

如果任一檔案不符,請複製範例,或是將您的範本調整為與範例相符。

部署更新後的 Bicep 範本

在終端中執行下列 Azure CLI 命令。

az deployment group create \
  --template-file main.bicep \
  --parameters environmentType=nonprod

在終端內執行下列 Azure PowerShell 命令。

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -environmentType nonprod

檢查您的部署

  1. 在瀏覽器中,返回 Azure 入口網站。 移至您的資源群組;現在有兩個成功的部署。

  2. 選取 [2 個成功] 連結。 請注意,您在清單中有一個名為 main 的部署,以及一個名為 appService 的新部署。

    螢幕擷取畫面: 部署的 Azure 入口網站介面,其中列出兩個部署且狀態為成功。

  3. 選取名為 main 的部署,然後選取 [部署詳細資料],以展開已部署的資源清單。

    請注意,我們的模組部署會出現在清單中。

    螢幕擷取畫面: 特定部署的 Azure 入口網站介面,其中列出一個資源。

  4. 選取 [輸出] 索引標籤。請注意,其中會有一個名為 appServiceAppHostName 的輸出,其具有您 App Service 應用程式的主機名稱。 將主機名稱複製到剪貼簿。

    螢幕擷取畫面: 特定部署輸出的 Azure 入口網站介面。

  5. 開啟新的瀏覽器索引標籤,並貼上您已複製的主機名稱。 您應該會看到預設的 App Service 歡迎頁面。

    螢幕擷取畫面: 預設的應用程式服務歡迎頁面。

恭喜! 您已成功地為絕佳應用程式部署好基礎。