練習 - 有條件地部署資源
注意
當您第一次啟動沙箱並接受條款時,您的 Microsoft 帳戶會與名為「Microsoft Learn 沙箱」的新 Azure 目錄建立關聯。 系統也會將您新增至名為「指引訂用帳戶」的特殊訂用帳戶。
您需要將玩具公司的資源部署到各種環境,而且您想要使用參數和條件來控制部署到每個環境的項目。
在此練習中,您將會建立 Azure SQL 邏輯伺服器和資料庫。 然後,新增稽核設定來確保已啟用稽核,但您只想要在部署至實際執行環境時才啟用稽核。 為了稽核,您必須要有儲存體帳戶,但也只在將資源部署至實際執行環境時才部署此儲存體帳戶。
在此過程中,您將會:
- 建立 Bicep 檔案來定義邏輯伺服器和資料庫。
- 新增儲存體帳戶和 SQL 稽核設定,而且都依條件來部署。
- 為開發環境設定基礎結構,然後驗證結果。
- 重新部署實際執行環境的基礎結構,然後查看變更。
此練習使用適用於 Visual Studio Code 的 Bicep 延伸模組。 請務必在 Visual Studio Code 中安裝此延伸模組。
建立內有邏輯伺服器和資料庫的 Bicep 範本
打開 Visual Studio Code。
建立名為 main.bicep 的新檔案。
儲存空檔案,讓 Visual Studio Code 載入 Bicep 工具。
您可以選取 [檔案]>[另存新檔],或在 Windows 中選取Ctrl+S (macOS 為 ⌘+S)。 請務必記住您儲存檔案的位置。 例如,您可能需要建立範本資料夾來儲存檔案。
若要定義邏輯伺服器和資料庫,請將下列內容新增至檔案,以及這些資源所需的參數和變數。 請自行輸入此內容,而不要複製並貼上,如此才能了解工具在寫入 Bicep 檔案上的助益。
@description('The Azure region into which the resources should be deployed.') param location string @secure() @description('The administrator login username for the SQL server.') param sqlServerAdministratorLogin string @secure() @description('The administrator login password for the SQL server.') param sqlServerAdministratorLoginPassword string @description('The name and tier of the SQL database SKU.') param sqlDatabaseSku object = { name: 'Standard' tier: 'Standard' } var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}' var sqlDatabaseName = 'TeddyBear' resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' = { name: sqlServerName location: location properties: { administratorLogin: sqlServerAdministratorLogin administratorLoginPassword: sqlServerAdministratorLoginPassword } } resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-05-01-preview' = { parent: sqlServer name: sqlDatabaseName location: location sku: sqlDatabaseSku }
請注意,所有參數都包含
@description
裝飾項目,有助於讓其更易於使用。 另請注意,sqlServerAdministratorLogin
和sqlServerAdministratorLoginPassword
參數都已套用@secure
裝飾項目。 這告訴 Bicep 這些參數值是機密。 Azure 不會將機密值列印到記錄。
新增儲存體帳戶
在邏輯伺服器的稽核設定中,您必須指定儲存體帳戶來包含稽核資料。 您將會更新 Bicep 檔案來建立此儲存體帳戶,但只在要啟用稽核時才這麼做。
在參數宣告下方,新增下列參數:
@description('The name of the environment. This must be Development or Production.') @allowed([ 'Development' 'Production' ]) param environmentName string = 'Development' @description('The name of the audit storage account SKU.') param auditStorageAccountSkuName string = 'Standard_LRS'
在變數宣告下方,新增下列變數:
var auditingEnabled = environmentName == 'Production' var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
請注意,您建立一個名為
auditingEnabled
的變數,作為部署稽核資源時的條件。 建立這樣的變數可讓 Bicep 程式碼更清楚且更容易閱讀。 任何查看您資源上條件的人員都將一目了然實際情況。另請注意,
auditStorageAccountName
變數使用名為take()
的函式。 儲存體帳戶名稱的長度上限為 24 個字元,所以此函式會截斷字串尾端,以確保名稱有效。在檔案底部,請在資源下方,為儲存體帳戶新增下列資源定義:
resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) { name: auditStorageAccountName location: location sku: { name: auditStorageAccountSkuName } kind: 'StorageV2' }
請注意,儲存體帳戶的定義包含
if
關鍵字來指定部署條件。
新增稽核設定
在您剛新增的儲存體帳戶下方,新增下列設定:
resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2024-05-01-preview' = if (auditingEnabled) { parent: sqlServer name: 'default' properties: { state: 'Enabled' storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : '' storageAccountAccessKey: environmentName == 'Production' ? auditStorageAccount.listKeys().keys[0].value : '' } }
請注意,此定義與儲存體帳戶一樣,包含相同的
if
條件。 此外,storageEndpoint
和storageAccountAccessKey
屬性使用問號 (?
) 三元運算子,以確保值一律有效。 如果您不這麼做,Azure Resource Manager 會先評估運算式值,再評估資源部署條件,結果傳回錯誤,因為找不到儲存體帳戶。儲存對檔案所做的變更。
驗證 Bicep 檔案
完成上述所有變更之後,Bicep 檔案看起來應該像下列範例:
@description('The Azure region into which the resources should be deployed.')
param location string
@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string
@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string
@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object = {
name: 'Standard'
tier: 'Standard'
}
@description('The name of the environment. This must be Development or Production.')
@allowed([
'Development'
'Production'
])
param environmentName string = 'Development'
@description('The name of the audit storage account SKU.')
param auditStorageAccountSkuName string = 'Standard_LRS'
var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
var sqlDatabaseName = 'TeddyBear'
var auditingEnabled = environmentName == 'Production'
var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: sqlServerAdministratorLogin
administratorLoginPassword: sqlServerAdministratorLoginPassword
}
}
resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-05-01-preview' = {
parent: sqlServer
name: sqlDatabaseName
location: location
sku: sqlDatabaseSku
}
resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
name: auditStorageAccountName
location: location
sku: {
name: auditStorageAccountSkuName
}
kind: 'StorageV2'
}
resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2024-05-01-preview' = if (auditingEnabled) {
parent: sqlServer
name: 'default'
properties: {
state: 'Enabled'
storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
storageAccountAccessKey: environmentName == 'Production' ? auditStorageAccount.listKeys().keys[0].value : ''
}
}
否則,請複製範例或調整範本,以符合範例。
將 Bicep 範本部署至 Azure
若要將此範本部署至 Azure,您必須從 Visual Studio Code 終端機登入您的 Azure 帳戶。 請確定您已安裝 Azure CLI,並記得使用您用來啟動沙箱的相同帳戶登入。
在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。
如果終端視窗在右側顯示 bash,表示已開啟正確的殼層。 或者,如果您在右側看到 Bash 殼層圖示,則可以加以選取來啟動殼層。
如果出現 bash 以外的殼層,請選取殼層下拉式清單箭號,然後選取 [Git Bash]。
在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存於 templates 資料夾,則可使用此命令:
cd templates
安裝 Bicep
執行以下命令,確保您有最新版本 Bicep:
az bicep install && az bicep upgrade
登入 Azure
在 Visual Studio Code 終端中,執行下列命令以登入 Azure:
az login
在開啟的瀏覽器中,登入您的 Azure 帳戶。 Visual Studio Code 終端機會顯示與此帳戶相關聯的訂用帳戶清單。 選取名為 [指引訂用帳戶] 的訂用帳戶。
如果您最近使用多個沙箱,則終端機可能會顯示多個「指引訂用帳戶」執行個體。 在此情況下,請使用接下來的兩個步驟來將其設定為預設訂用帳戶。
取得指引訂用帳戶識別碼。
az account list \ --refresh \ --query "[?contains(name, 'Concierge Subscription')].id" \ --output table
使用訂用帳戶識別碼設定預設訂用帳戶。 將 {your subscription ID} 取代為最新的指引訂用帳戶識別碼。
az account set --subscription {your subscription ID}
設定預設資源群組
使用 Azure CLI 時,您可以設定預設的資源群組,並省略本練習中其餘的 Azure CLI 命令參數。 將預設值設定為在沙箱環境中為您建立的資源群組。
az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"
使用 Azure CLI 將範本部署至 Azure
在 Visual Studio Code 終端機中,透過執行下列程式碼,將 Bicep 範本部署到 Azure。 請注意,您明確將 location
參數設定為 westus3
。
az deployment group create --name main --template-file main.bicep --parameters location=westus3
若要將此範本部署至 Azure,請從 Visual Studio Code 終端登入 Azure 帳戶。 請確定您已安裝 Azure PowerShell,並登入啟動沙箱的相同帳戶。
在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。
如果終端視窗在右側顯示 pwsh 或 powershell,表示已開啟正確的殼層。 或者,如果您在右側看到 PowerShell 殼層圖示,則可以加以選取來啟動殼層。
如果出現 pwsh 或 powershell 以外的殼層,則請選取殼層下拉式箭頭,然後選取 [PowerShell]。
在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存在 templates 資料夾,則可使用此命令:
Set-Location -Path templates
安裝 Bicep CLI
若要從 Azure PowerShell 使用 Bicep,請安裝 Bicep CLI。
使用 Azure PowerShell 登入 Azure
在 Visual Studio Code 終端中,執行下列命令:
Connect-AzAccount
瀏覽器隨即開啟,讓您可以登入您的 Azure 帳戶。 瀏覽器可能會在背景中開啟。
登入 Azure 之後,您會在終端機中看到與此帳戶相關聯的訂用帳戶清單。 如果您已啟動沙箱,則會顯示名為「指引訂用帳戶」的訂用帳戶。 針對練習的其餘部分選取此訂用帳戶。
如果您最近使用多個沙箱,則終端機可能會顯示多個「指引訂用帳戶」執行個體。 在此情況下,請使用接下來的兩個步驟來將其設定為預設訂用帳戶。
取得訂用帳戶識別碼。 執行下列命令會列出您的訂用帳戶與其識別碼。 尋找
Concierge Subscription
,然後複製第二個資料行的識別碼。 其看起來像aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
。Get-AzSubscription
將您使用中的訂用帳戶變更為「指引訂用帳戶」。 請務必將 {Your subscription ID} 取代為您複製的訂用帳戶。
$context = Get-AzSubscription -SubscriptionId {Your subscription ID} Set-AzContext $context
設定預設資源群組
您可以設定預設資源群組,並省略本練習中其餘的 Azure PowerShell 命令參數。 將此預設值設定為在沙箱環境中為您建立的資源群組。
Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>
使用 Azure PowerShell 將範本部署至 Azure
在 Visual Studio Code 終端機中,透過執行下列 Azure PowerShell 命令,將範本部署到 Azure。 此過程可能需要幾分鐘的時間才能完成,然後就會成功完成部署。
New-AzResourceGroupDeployment -Name main -TemplateFile main.bicep -location westus3
執行部署時,會提示您輸入 sqlServerAdministratorLogin
與 sqlServerAdministratorLoginPassword
參數的值。
提示
輸入安全參數時,您選擇的值必須遵循特定規則:
-
sqlServerAdministratorLogin
不能是輕易猜到的登入名稱,例如admin
或root
。 只能包含英數字元,且開頭必須是字母。 -
sqlServerAdministratorLoginPassword
的長度必須至少為 8 個字元,且必須包含小寫字母、大寫字母、數字及符號。 如需密碼複雜性的詳細資訊,請參閱 SQL Azure 密碼原則。
如果參數值不符合需求,Azure SQL 將不會部署邏輯伺服器。
此外,務必記下您輸入的登入和密碼。 很快就會用到。
因為您尚未指定 environmentName
參數的值,所以使用 Development
預設值。
等待部署完成。 如果您的部署失敗,並顯示位置不接受建立新 Windows Azure SQL Database 伺服器的訊息,請選取不同的區域,例如 eastus
或 eastus2
。
檢查部署
使用 Azure 入口網站檢查您部署的資源,並檢查每個部署的結果。
前往 Azure 入口網站,執行下列動作以確定您在沙箱訂用帳戶中:
a. 在右上方選取您的虛擬人偶。
b. 選取 [切換目錄]。 在清單中,選取 [Microsoft Learn 沙箱] 目錄。在左窗格中,選取 [資源群組]。
選取 [沙箱資源群組名稱]。
在 [概觀] 區段中,您會看到一個部署已成功。 您也可以看到已部署邏輯伺服器和 SQL 資料庫,但未部署用於稽核的儲存體帳戶。
注意
名稱開頭為
cloudshell
的儲存體帳戶與您的部署無關,由 Learn 沙箱所建立。在 [部署] 旁,選取 [1 個成功] 以查看部署詳細資料。
選取名為 main 的部署,並查看已部署的資源,然後選取 [部署詳細資料] 來予以展開。
在此案例中,我們部署一個邏輯伺服器和一個 SQL 資料庫。 請注意,儲存體帳戶和稽核設定不在資源清單中。
將頁面在瀏覽器中保持開啟。 您稍後將再次檢查部署。
重新部署生產環境
在先前的部署中使用了 environmentName
參數的預設值,這表示該參數已設定為 Development
。
現在,您要將參數值明確設定為 Production
。 在進行此變更後,您預期會部署用於稽核的儲存體帳戶,並將在邏輯伺服器上啟用稽核。
部署實際執行環境的範本
在 Visual Studio Code 終端機中,透過執行下列程式碼,將 Bicep 範本部署到 Azure:
az deployment group create --name main --template-file main.bicep --parameters environmentName=Production location=westus3
在 Visual Studio Code 終端機中,執行下列 Azure PowerShell 命令,將範本部署到 Azure:
New-AzResourceGroupDeployment -Name main -TemplateFile main.bicep -environmentName Production -location westus3
警告
請務必使用您先前所用相同的登入和密碼,否則部署將無法成功完成。
一、兩分鐘後,部署應該就會順利完成。
確認重新部署
若要完成此練習,請確認重新部署已順利完成,且已啟用稽核。
返回 Azure 入口網站,然後移至您的資源群組。 如果您已開啟資源群組,請選取 [重新整理]。
您應該會看到已部署額外的儲存體帳戶,以供稽核之用。
選取您的邏輯伺服器 (尋找類型為 SQL Server 的資源)。
在搜尋欄位中,輸入 Auditing。 在 [安全性] 底下,選取 [稽核]。
確認已為此邏輯伺服器啟用稽核。