練習 - 將資源新增至部署堆疊

已完成

您正在對新的存款應用程式進行短期衝刺 3。 最近,存款小組要求對一些使用中的 Azure 服務進行變更。 他們還要求建立支援應用程式所需的其他服務。

在此練習中,您會建立以參考 Bicep 檔案的資源群組為範圍的部署堆疊。 此檔案會定義 App Service 方案、應用程式服務和 Azure SQL 資料庫。 然後,您可以修改 App Service 方案的 SKU,並更新部署堆疊。 最後,您會新增現有的 Log Analytics 工作區和新的 Application Insights 執行個體,以支援應用程式的監視。

在此過程中,您將會:

  • 建立定義初始架構的 Bicep 檔案
  • 使用 Bicep 檔案,建立範圍設定為資源群組的部署堆疊。
  • 修改現有受控資源的屬性
  • 更新 Bicep 檔案,以包含現有的 Log Analytics 工作區和新的 Application Insights 執行個體
  • 更新部署堆疊以部署受控資源
  • 驗證部署堆疊的受控資源。

此練習使用適用於 Visual Studio Code 的 Bicep 延伸模組。 請務必在 Visual Studio Code 中安裝此延伸模組。

建立 Bicep 檔案

我們的第一個步驟是建立 Bicep 檔案,以定義要用於部署堆疊的資源。

  1. 打開 Visual Studio Code。

  2. 建立名為 main.bicep 的新檔案。

  3. 儲存空檔案,讓 Visual Studio Code 載入 Bicep 工具。

    您可以選取 [檔案]>[另存新檔],或在 Windows 中選取Ctrl+S (macOS 為 ⌘+S)。 請務必記住您儲存檔案的位置。 例如:您可能希望建立 templates 資料夾以儲存檔案。

  4. 將下列 Bicep 程式碼新增至檔案。 隨後將會部署範本。

    // Parameters
    @description('The location for all resources.')
    param location string = 'eastus'
    
    @description('The name of the SQL database.')
    param sqlDatabaseName string = 'sqldb-${uniqueString(resourceGroup().id)}'
    
    @description('The password of the admin user.')
    param sqlServerAdminUserName string
    
    @description('The name of the admin user.')
    @secure()
    param sqlServerAdminPassword string
    
    @description('The name of the SQL server.')
    param sqlServerName string = 'sql-${uniqueString(resourceGroup().id)}'
    
    @description('The name of the web application.')
    param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'
    
    // Variables
    @description('The name of the app service plan.')
    var appServicePlanName = 'plan-deposits'
    
    // Resource - App Service Plan
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'F1'
        capacity: 1
      }
    }
    
    // Resource - Web App
    resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
      name: webApplicationName
      location: location
      properties: {
        serverFarmId: appServicePlan.id  
      }
    }
    
    // Resource - SQL Server
    resource sqlServer 'Microsoft.Sql/servers@2021-11-01' ={
      name: sqlServerName
      location: location
      properties: {
        administratorLogin: sqlServerAdminUserName
        administratorLoginPassword: sqlServerAdminPassword
      }
    }
    
    // Resource - SQL Database
    resource sqlServerDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = {
      parent: sqlServer
      name: sqlDatabaseName
      location: location
      sku: {
        name: 'Standard'
        tier: 'Standard'
      }
    }
    

    請注意,您要使用包含字串插補、uniqueString() 函式的運算式來定義預設參數值。 部署此範本的人可以在部署時指定值來覆寫預設參數值,但其無法覆寫變數值。

    也請注意,您針對 App Service 方案的名稱使用變數,但針對其他名稱則使用參數。 儲存體帳戶和 App Service 應用程式需要全域唯一的名稱,但 App Service 方案名稱只需要在其資源群組中是唯一的就可以。 這項差異表示,只要部署全都進入不同的資源群組,就可以在不同的部署中使用相同的 App Service 方案名稱。

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

建立部署堆疊並將資源部署至 Azure

若要將此範本部署至 Azure,您必須從 Visual Studio Code 終端機登入您的 Azure 帳戶。 請確定您已安裝 Azure CLI 工具。

  1. 在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。

  2. 如果終端視窗右側顯示的殼層為 [bash],則正確的殼層隨即開啟,而您可以跳至下一節。

    Visual Studio Code 終端視窗的螢幕擷取畫面,其中顯示 bash 選項。

  3. 如果出現 bash 以外的殼層,請選取殼層下拉式清單箭號,然後選取 [Azure Cloud Shell (Bash)]

    Visual Studio Code 終端視窗的螢幕擷取畫面,其中顯示終端殼層下拉式清單並已選取 [Git Bash (預設)]。

  4. 在終端機殼層清單中,選取 [bash]

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中已選取 Bash 終端機。

  5. 在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存於 templates 資料夾,則可使用此命令:

    cd templates
    

安裝 Bicep

執行以下命令,確保您有最新版本 Bicep:

az bicep install && az bicep upgrade

使用 Azure CLI 登入 Azure

  1. 在 Visual Studio Code 終端中,執行下列命令以登入 Azure:

    az login
    
  2. 在開啟的瀏覽器中,登入您的 Azure 帳戶。

    Visual Studio Code 終端機會顯示與此帳戶相關聯的訂用帳戶清單。

  3. 在清單中,尋找您要在此練習中使用的訂用帳戶。

    如果您在登入時錯過此清單,您可以使用下列程式碼片段以再次列出訂用帳戶。

    az account list --output table
    
  4. 針對您在此工作階段中執行的所有 Azure CLI 命令,設定預設訂用帳戶。

    az account set --subscription "Your Subscription Name or ID"
    

建立資源群組

我們必須為部署堆疊和受控資源建立資源群組。 若要建立資源群組,請從 Visual Studio Code 中的終端行下列命令。

az group create \
    --name rg-depositsApplication \
    --location eastus

若要將此範本部署至 Azure,請從 Visual Studio Code 終端登入 Azure 帳戶。 確定您已安裝 Azure PowerShell

  1. 在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。

  2. 如果終端視窗右側顯示的殼層是 powershellpwsh,則已開啟正確的殼層,而您可以跳至下一節。

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中殼層下拉式清單中顯示 [pwsh] 選項。

  3. 如果出現 powershellpwsh 以外的殼層,則請選取殼層下拉式清單箭號,然後選取 [PowerShell]

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中顯示終端機殼層下拉式清單且已選取 [PowerShell]。

  4. 在終端機殼層清單中,選取 [powershell] 或 [pwsh]

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中已選取 PowerShell 終端機。

  5. 在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存在 templates 資料夾,則可使用此命令:

    Set-Location -Path templates
    

安裝 Bicep CLI

若要從 Azure PowerShell 使用 Bicep,請安裝 Bicep CLI

使用 Azure PowerShell 登入 Azure

  1. 在 Visual Studio Code 終端中,執行下列命令以登入 Azure:

    Connect-AzAccount
    
  2. 在開啟的瀏覽器中,登入您的 Azure 帳戶。

  3. 執行下列命令,以取得您要在此練習中使用的訂用帳戶識別碼:

    Get-AzSubscription
    

    訂用帳戶識別碼是第二個資料行。 複製第二個資料行。 它看起來像 aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e

  4. 針對您在此工作階段中執行的所有 Azure PowerShell 命令,設定預設訂用帳戶。

    Set-AzContext -SubscriptionId {Your subscription ID}
    

建立資源群組

我們必須為部署堆疊和受控資源建立資源群組。 若要建立資源群組,請從 Visual Studio Code 中的終端行下列命令。

New-AzResourceGroup `
    -Name rg-depositsApplication `
    -Location eastus

建立部署堆疊

接下來,我們必須建立以最近建立的資源群組為範圍的部署堆疊。 若要建立部署堆疊,請從 Visual Studio Code 中的終端執行下列命令。

  1. 若要建立部署堆疊,請從 Visual Studio Code 中的終端執行下列命令。

    az stack group create \
        --name stack-deposits \
        --resource-group rg-depositsApplication \
        --template-file ./main.bicep \
        --action-on-unmanage detachAll \
        --deny-settings-mode none
    
  2. 其會提示您為 sqlServerAdminUserName 輸入值。 建立 SQL Server 管理員的名稱,接下來按「Enter 鍵」。

    顯示 Azure CLI 命令列提示您輸入 SQL Server 管理員使用者名稱的螢幕擷取畫面。

  3. 其會提示您為 sqlServerAdminPassword 輸入值。 為 SQL Server 管理員建立複雜密碼,接下來按「Enter 鍵」。

    顯示 Azure CLI 命令列提示您輸入 SQL Server 管理員密碼的螢幕擷取畫面。

  4. 等候更新作業完成,再進行下個工作。

  1. 若要建立部署堆疊,請從 Visual Studio Code 中的終端執行下列命令。

    New-AzResourceGroupDeploymentStack `
        -Name stack-deposits `
        -ResourceGroupName rg-depositsApplication `
        -TemplateFile ./main.bicep `
        -ActionOnUnmanage DetachAll `
        -DenySettingsMode None
    
  2. 其會提示您為 sqlServerAdminUserName 輸入值。 建立 SQL Server 管理員的名稱,接下來按「Enter 鍵」。

    顯示 Azure PowerShell 命令列提示您輸入 SQL Server 管理員使用者名稱的螢幕擷取畫面。

  3. 其會提示您為 sqlServerAdminPassword 輸入值。 為 SQL Server 管理員建立複雜密碼,接下來按「Enter 鍵」。

    顯示 Azure PowerShell 命令列提示您輸入 SQL Server 管理員密碼的螢幕擷取畫面。

  4. 等候更新作業完成,再進行下個工作。

修改 Bicep 檔案,以新增現有的 Log Analytics 工作區和新的 Application Insights 執行個體

  1. 在 Visual Studio Code 中,開啟 main.bicep 檔案。

  2. 將醒目提示的程式碼新增至檔案的變數區段:

    // Variables
    @description('The name of the Application Insights instance.')
    var applicationInsightsName = 'appinsights-deposits'
    
    @description('The name of the app service plan.')
    var appServicePlanName = 'plan-deposits'
    
    @description('The name of the Log Analytics Workspace.')
    var logAnalyticsWorkspaceName = 'log-deposits'
    
  3. 將下列程式碼新增至檔案的底部:

    // Resource - Log Analytics Workspace
    resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
      name: logAnalyticsWorkspaceName
      location: location
      properties: {
        retentionInDays: 30
        sku: {
          name: 'PerGB2018'
        }
      }
    }
    
    // Resource - Application Insights
    resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
      name: applicationInsightsName
      location: location
      kind: 'web'
      properties: {
        Application_Type: 'web'
        WorkspaceResourceId: logAnalyticsWorkspace.id
      }
    }
    
  4. 儲存對檔案所做的變更。

修改 Bicep 檔案,以修改 App Service 方案和 App Service

  1. 在 Visual Studio Code 中,開啟 main.bicep 檔案。

  2. 將 App Service 方案的 SKU 名稱從 F1 變更為 S1

    // Resource - App Service Plan
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'S1'
        capacity: 1
      }
    }
    
  3. 在 Application Insights 執行個體中新增醒目提示的程式碼:

    // Resource - Web App
    resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
      name: webApplicationName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        siteConfig: {
          appSettings: [
            {
              name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
              value: applicationInsights.properties.InstrumentationKey
            }     
          ]
        }    
      }
    }
    
  4. 儲存對檔案所做的變更。

更新部署堆疊

修改 Bicep 檔案之後,我們想要更新部署堆疊,以便實作對 Bicep 檔案中資源所做的變更。

  1. 若要更新部署堆疊,請從 Visual Studio Code 中的終端執行下列命令。

    az stack group create \
        --name stack-deposits \
        --resource-group rg-depositsApplication \
        --template-file ./main.bicep \
        --action-on-unmanage detachAll \
        --deny-settings-mode none
    
  2. 您會收到訊息,指出堆疊已存在於目前的訂用帳戶。 如果 action on unmanage 參數的值已變更,則警告會警示您新的值。 按 y,接下來按「Enter 鍵」。

    顯示部署堆疊已存在之 Azure CLI 命令列警告的螢幕擷取畫面。

  3. 其會提示您為 sqlServerAdminUserName 輸入值。 建立 SQL Server 管理員的名稱,接下來按「Enter 鍵」。

    顯示 Azure CLI 命令列提示您輸入 SQL Server 管理員使用者名稱的螢幕擷取畫面。

  4. 其會提示您為 sqlServerAdminPassword 輸入值。 為 SQL Server 管理員建立複雜密碼,接下來按「Enter 鍵」。

    顯示 Azure CLI 命令列提示您輸入 SQL Server 管理員密碼的螢幕擷取畫面。

  5. 等候更新作業完成,再進行下個工作。

修改 Bicep 檔案之後,我們想要更新部署堆疊,以便實作對 App Service 方案所做的變更。

  1. 若要更新部署堆疊,請從 Visual Studio Code 中的終端執行下列命令。

    Set-AzResourceGroupDeploymentStack `
        -Name stack-deposits `
        -ResourceGroupName rg-depositsApplication `
        -TemplateFile ./main.bicep `
        -ActionOnUnmanage DetachAll `
        -DenySettingsMode none
    
  2. 其會提示您為 sqlServerAdminUserName 輸入值。 建立 SQL Server 管理員的名稱,接下來按「Enter 鍵」。

    顯示 Azure PowerShell 命令列提示您輸入 SQL Server 管理員使用者名稱的螢幕擷取畫面。

  3. 其會提示您為 sqlServerAdminPassword 輸入值。 為 SQL Server 管理員建立複雜密碼,接下來按「Enter 鍵」。

    顯示 Azure PowerShell 命令列提示您輸入 SQL Server 管理員密碼的螢幕擷取畫面。

  4. 等候更新作業完成,再進行下個工作。

驗證部署堆疊和受控資源的更新。

完成更新之後,我們想要驗證 App Service 方案的 SKU 是否已更新,且部署堆疊管理的是現有的 Log Analytics 工作區和新的 Application Insights 執行個體。

  1. 若要檢視 App Service 方案的設定,請從 Visual Studio Code 中的終端執行下列命令。

    az appservice plan show \
        --name plan-deposits
        --resource-group rg-depositsApplication
    
  2. 請留意輸出的 sku 區段。 App Service 方案現在使用 S1 SKU。 其應該類似下列輸出:

    "sku": {
        "capacity": 1,
        "family": "S",
        "name": "S1",
        "size": "S1",
        "tier": "Standard"
    },
    
  3. 若要檢視部署堆疊的設定,請從 Visual Studio Code 中的終端執行下列命令。

    az stack group show \
        --resource-group rg-depositsApplication \
        --name stack-deposits
    
  4. 請注意輸出的資源區段。 我們現在會看到現有的 Log Analytics 工作區,以及列為受控資源的新 Application Insights 執行個體。 您應該會覺得結果與下列輸出很相似:

    "resources": [
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm/databases/sqldb-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././serverfarms/plan-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././sites/webapp-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././components/appinsights-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././workspaces/log-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      }
    ],
    
  1. 若要檢視 App Service 方案的設定,請從 Visual Studio Code 中的終端執行下列命令。

    $plan = Get-AzAppServicePlan `
        -ResourceGroupName rg-depositsApplication `
        -Name plan-deposits
    $sku = $plan.Sku
    $sku
    
  2. 請留意輸出。 App Service 方案現在使用 S1 SKU。 其應該類似下列內容:

    Name         : S1
    Tier         : Standard
    Size         : S1
    Family       : S
    Capacity     : 1
    
  3. 若要檢視部署堆疊的設定,請從 Visual Studio Code 中的終端執行下列命令。

    Get-AzResourceGroupDeploymentStack `
        -ResourceGroupName rg-depositsApplication `
        -Name stack-deposits
    
  4. 請注意輸出的資源區段。 我們現在會看到現有的 Log Analytics 工作區,以及列為受控資源的新 Application Insights 執行個體。 您應該會覺得結果與下列輸出很相似:

    Resources                     : /subscriptions/./resourceGroups/rg-depositsApplication/././servers/                        sql-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm/databases/sqldb-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././serverfarms/plan-deposits
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././sites/webapp-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././components/appinsights-deposits
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././workspaces/log-deposits