練習 - 重構 Bicep 檔案以使用模組

已完成

備註

此練習為選擇性項目。 如果您想要完成此練習,您必須先建立 Azure 訂用帳戶,才能開始。 如果您沒有 Azure 帳戶,或目前不想建立帳戶,您可以閱讀指示,以便瞭解所呈現的資訊。

在此練習中,您將更新先前建立的 Bicep 檔案,使其針對 Azure App Service 資源使用模組。 模組有助於讓主要檔案的意圖更清楚。 如果您選擇的話,可以在其他 Bicep 檔案中重複使用 App Service 模組。

在此過程中,您將會:

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

加入新的模組檔案

  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@2024-04-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    

    請注意,您已從 main.bicep Bicep 檔案複製參數和變數,因為 appService.bicep Bicep 檔案必須是獨立的。

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

從父代 Bicep 檔案新增模組參照

既然您已擁有用於部署 App Service 資源的完整模組,您可以在父 Bicep 檔案中參考這個模組。 因為模組會部署 App Service 資源,因此您可以從父檔案中刪除相關聯的資源和變數。

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

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

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

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

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

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

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

    output appServiceAppHostName string = appServiceApp.properties.defaultHostName
    

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

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

    此輸出會在將作為模組的 Bicep 檔案內加以宣告,因此只能供父代 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@2024-04-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSkuName
  }
}

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

output appServiceAppHostName string = appServiceApp.properties.defaultHostName

如果任一 Bicep 檔案不符合,請複製範例或調整您的檔案以符合範例。

部署更新後的 Bicep 檔案

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

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

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

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

檢查您的部署

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

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

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

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

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

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

  4. 選擇輸出索引標籤。注意有一個名為appServiceAppHostName的輸出,它是您的 App Service 應用程式的主機名稱。 將主機名稱複製到剪貼簿。

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

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

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

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