練習 - 將資源新增至部署堆疊
您正在對新的存款應用程式進行短期衝刺 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 檔案,以定義要用於部署堆疊的資源。
打開 Visual Studio Code。
建立名為 main.bicep 的新檔案。
儲存空檔案,讓 Visual Studio Code 載入 Bicep 工具。
您可以選取 [檔案]>[另存新檔],或在 Windows 中選取Ctrl+S (macOS 為 ⌘+S)。 請務必記住您儲存檔案的位置。 例如:您可能希望建立 templates 資料夾以儲存檔案。
將下列 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 方案名稱。
儲存對檔案所做的變更。
建立部署堆疊並將資源部署至 Azure
若要將此範本部署至 Azure,您必須從 Visual Studio Code 終端機登入您的 Azure 帳戶。 請確定您已安裝 Azure CLI 工具。
在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。
如果終端視窗右側顯示的殼層為 [bash],則正確的殼層隨即開啟,而您可以跳至下一節。
如果出現 bash 以外的殼層,請選取殼層下拉式清單箭號,然後選取 [Azure Cloud Shell (Bash)]。
在終端機殼層清單中,選取 [bash]。
在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存於 templates 資料夾,則可使用此命令:
cd templates
安裝 Bicep
執行以下命令,確保您有最新版本 Bicep:
az bicep install && az bicep upgrade
使用 Azure CLI 登入 Azure
在 Visual Studio Code 終端中,執行下列命令以登入 Azure:
az login
在開啟的瀏覽器中,登入您的 Azure 帳戶。
Visual Studio Code 終端機會顯示與此帳戶相關聯的訂用帳戶清單。
在清單中,尋找您要在此練習中使用的訂用帳戶。
如果您在登入時錯過此清單,您可以使用下列程式碼片段以再次列出訂用帳戶。
az account list --output table
針對您在此工作階段中執行的所有 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。
在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。
如果終端視窗右側顯示的殼層是 powershell 或 pwsh,則已開啟正確的殼層,而您可以跳至下一節。
如果出現 powershell 或 pwsh 以外的殼層,則請選取殼層下拉式清單箭號,然後選取 [PowerShell]。
在終端機殼層清單中,選取 [powershell] 或 [pwsh]。
在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存在 templates 資料夾,則可使用此命令:
Set-Location -Path templates
安裝 Bicep CLI
若要從 Azure PowerShell 使用 Bicep,請安裝 Bicep CLI。
使用 Azure PowerShell 登入 Azure
在 Visual Studio Code 終端中,執行下列命令以登入 Azure:
Connect-AzAccount
在開啟的瀏覽器中,登入您的 Azure 帳戶。
執行下列命令,以取得您要在此練習中使用的訂用帳戶識別碼:
Get-AzSubscription
訂用帳戶識別碼是第二個資料行。 複製第二個資料行。 它看起來像 aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e。
針對您在此工作階段中執行的所有 Azure PowerShell 命令,設定預設訂用帳戶。
Set-AzContext -SubscriptionId {Your subscription ID}
建立資源群組
我們必須為部署堆疊和受控資源建立資源群組。 若要建立資源群組,請從 Visual Studio Code 中的終端行下列命令。
New-AzResourceGroup `
-Name rg-depositsApplication `
-Location eastus
建立部署堆疊
接下來,我們必須建立以最近建立的資源群組為範圍的部署堆疊。 若要建立部署堆疊,請從 Visual Studio Code 中的終端執行下列命令。
若要建立部署堆疊,請從 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
其會提示您為
sqlServerAdminUserName
輸入值。 建立 SQL Server 管理員的名稱,接下來按「Enter 鍵」。其會提示您為
sqlServerAdminPassword
輸入值。 為 SQL Server 管理員建立複雜密碼,接下來按「Enter 鍵」。等候更新作業完成,再進行下個工作。
若要建立部署堆疊,請從 Visual Studio Code 中的終端執行下列命令。
New-AzResourceGroupDeploymentStack ` -Name stack-deposits ` -ResourceGroupName rg-depositsApplication ` -TemplateFile ./main.bicep ` -ActionOnUnmanage DetachAll ` -DenySettingsMode None
其會提示您為
sqlServerAdminUserName
輸入值。 建立 SQL Server 管理員的名稱,接下來按「Enter 鍵」。其會提示您為
sqlServerAdminPassword
輸入值。 為 SQL Server 管理員建立複雜密碼,接下來按「Enter 鍵」。等候更新作業完成,再進行下個工作。
修改 Bicep 檔案,以新增現有的 Log Analytics 工作區和新的 Application Insights 執行個體
在 Visual Studio Code 中,開啟 main.bicep 檔案。
將醒目提示的程式碼新增至檔案的變數區段:
// 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'
將下列程式碼新增至檔案的底部:
// 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 } }
儲存對檔案所做的變更。
修改 Bicep 檔案,以修改 App Service 方案和 App Service
在 Visual Studio Code 中,開啟 main.bicep 檔案。
將 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 } }
在 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 } ] } } }
儲存對檔案所做的變更。
更新部署堆疊
修改 Bicep 檔案之後,我們想要更新部署堆疊,以便實作對 Bicep 檔案中資源所做的變更。
若要更新部署堆疊,請從 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
您會收到訊息,指出堆疊已存在於目前的訂用帳戶。 如果 action on unmanage 參數的值已變更,則警告會警示您新的值。 按
y
,接下來按「Enter 鍵」。其會提示您為
sqlServerAdminUserName
輸入值。 建立 SQL Server 管理員的名稱,接下來按「Enter 鍵」。其會提示您為
sqlServerAdminPassword
輸入值。 為 SQL Server 管理員建立複雜密碼,接下來按「Enter 鍵」。等候更新作業完成,再進行下個工作。
修改 Bicep 檔案之後,我們想要更新部署堆疊,以便實作對 App Service 方案所做的變更。
若要更新部署堆疊,請從 Visual Studio Code 中的終端執行下列命令。
Set-AzResourceGroupDeploymentStack ` -Name stack-deposits ` -ResourceGroupName rg-depositsApplication ` -TemplateFile ./main.bicep ` -ActionOnUnmanage DetachAll ` -DenySettingsMode none
其會提示您為
sqlServerAdminUserName
輸入值。 建立 SQL Server 管理員的名稱,接下來按「Enter 鍵」。其會提示您為
sqlServerAdminPassword
輸入值。 為 SQL Server 管理員建立複雜密碼,接下來按「Enter 鍵」。等候更新作業完成,再進行下個工作。
驗證部署堆疊和受控資源的更新。
完成更新之後,我們想要驗證 App Service 方案的 SKU 是否已更新,且部署堆疊管理的是現有的 Log Analytics 工作區和新的 Application Insights 執行個體。
若要檢視 App Service 方案的設定,請從 Visual Studio Code 中的終端執行下列命令。
az appservice plan show \ --name plan-deposits --resource-group rg-depositsApplication
請留意輸出的 sku 區段。 App Service 方案現在使用 S1 SKU。 其應該類似下列輸出:
"sku": { "capacity": 1, "family": "S", "name": "S1", "size": "S1", "tier": "Standard" },
若要檢視部署堆疊的設定,請從 Visual Studio Code 中的終端執行下列命令。
az stack group show \ --resource-group rg-depositsApplication \ --name stack-deposits
請注意輸出的資源區段。 我們現在會看到現有的 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" } ],
若要檢視 App Service 方案的設定,請從 Visual Studio Code 中的終端執行下列命令。
$plan = Get-AzAppServicePlan ` -ResourceGroupName rg-depositsApplication ` -Name plan-deposits $sku = $plan.Sku $sku
請留意輸出。 App Service 方案現在使用 S1 SKU。 其應該類似下列內容:
Name : S1 Tier : Standard Size : S1 Family : S Capacity : 1
若要檢視部署堆疊的設定,請從 Visual Studio Code 中的終端執行下列命令。
Get-AzResourceGroupDeploymentStack ` -ResourceGroupName rg-depositsApplication ` -Name stack-deposits
請注意輸出的資源區段。 我們現在會看到現有的 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