在自動化 PowerShell Runbook 中部署 Azure Resource Manager 範本
您可以使用 Azure Resource Manager 範本,來撰寫可部署 Azure 資源的自動化 PowerShell Runbook。 範本可讓您使用 Azure 自動化來自動部署 Azure 資源。 您可以在一個中央安全位置 (例如 Azure 儲存體) 維護 Resource Manager 範本。
在此文章中,我們會建立使用儲存在 Azure 儲存體中 Resource Manager 範本的 PowerShell Runbook,來部署新的 Azure 儲存體帳戶。
如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
必要條件
Azure 自動化帳戶至少會有一個使用者指派的受控識別。 如需詳細資訊,請參閱針對 Azure 自動化帳戶使用使用者指派的受控識別。
Az 模組:
Az.Accounts
、Az.ManagedServiceIdentity
、Az.Resources
和Az.Storage
。 匯入自動化帳戶。 如需詳細資訊,請參閱匯入 Az 模組。用來儲存 Resource Manager 範本的 Azure 儲存體帳戶。
本機電腦上安裝的 Azure PowerShell。 如需如何取得 Azure PowerShell 的詳細資訊,請參閱安裝 Azure PowerShell 模組。 您也需要模組 Az.ManagedServiceIdentity。
Az.ManagedServiceIdentity
是預覽模組,且未安裝為 Az 模組的一部分。 若要進行安裝,請執行Install-Module -Name Az.ManagedServiceIdentity
將權限指派給受控識別
將權限指派給受控識別,以在 Runbook 中執行儲存體相關工作。
使用 Connect-AzAccount cmdlet 以互動方式登入 Azure 並遵循指示。
# Sign in to your Azure subscription $sub = Get-AzSubscription -ErrorAction SilentlyContinue if(-not($sub)) { Connect-AzAccount } # If you have multiple subscriptions, set the one to use # Select-AzSubscription -SubscriptionId <SUBSCRIPTIONID>
為下列變數提供適當的值,然後執行指令碼。
$resourceGroup = "resourceGroup" $automationAccount = "automationAccount" $storageAccount = "storageAccount" $userAssignedManagedIdentity = "userAssignedManagedIdentity" $storageTemplate = "path\storageTemplate.json" $runbookScript = "path\runbookScript.ps1"
將角色
reader
指派給系統指派的受控識別,以執行 CmdletGet-AzUserAssignedIdentity
。$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
針對儲存體帳戶的動作,將角色
Storage Account Contributor
指派給使用者指派的受控識別。$UAMI_ID = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI_ID ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Storage Account Contributor"
建立 Resource Manager 範本
在此範例中,您會使用可部署新 Azure 儲存體帳戶的 Resource Manager 範本。 建立名為 storageTemplate.json
的本機檔案,然後貼上以下程式碼:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_ZRS",
"Premium_LRS"
],
"metadata": {
"description": "Storage Account type"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
}
},
"variables": {
"storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageAccountName')]",
"apiVersion": "2018-02-01",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "Storage",
"properties": {
}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('storageAccountName')]"
}
}
}
在 Azure 檔案儲存體中儲存 Resource Manager 範本
使用 PowerShell 來建立 Azure 檔案共用,並上傳 storageTemplate.json
。 如需如何在 Azure 入口網站建立檔案共用並上傳檔案的指示,請參閱在 Windows 上開始使用 Azure 檔案儲存體。
執行下列命令來建立檔案共用,並將 Resource Manager 範本上傳至該檔案共用。
# Get the access key for your storage account
$key = Get-AzStorageAccountKey -ResourceGroupName $resourceGroup -Name $storageAccount
# Create an Azure Storage context using the first access key
$context = New-AzStorageContext -StorageAccountName $storageAccount -StorageAccountKey $key[0].value
# Create a file share named 'resource-templates' in your Azure Storage account
$fileShare = New-AzStorageShare -Name 'resource-templates' -Context $context
# Add the storageTemplate.json file to the new file share
Set-AzStorageFileContent -ShareName $fileShare.Name -Context $context -Source $storageTemplate
建立 PowerShell Runbook 指令碼
建立 PowerShell 指令碼,其會從 Azure 儲存體取得 storageTemplate.json
檔案,並部署範本來建立新的 Azure 儲存體帳戶。 建立名為 runbookScript.ps1
的本機檔案,然後貼上以下程式碼:
param (
[Parameter(Mandatory=$true)]
[string]
$resourceGroup,
[Parameter(Mandatory=$true)]
[string]
$storageAccount,
[Parameter(Mandatory=$true)]
[string]
$storageAccountKey,
[Parameter(Mandatory=$true)]
[string]
$storageFileName,
[Parameter(Mandatory=$true)]
[string]
$userAssignedManagedIdentity
)
# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process
# Connect to Azure with user-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context
$identity = Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup `
-Name $userAssignedManagedIdentity `
-DefaultProfile $AzureContext
$AzureContext = (Connect-AzAccount -Identity -AccountId $identity.ClientId).context
# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription `
-DefaultProfile $AzureContext
#Set the parameter values for the Resource Manager template
$Parameters = @{
"storageAccountType"="Standard_LRS"
}
# Create a new context
$Context = New-AzStorageContext -StorageAccountName $storageAccount -StorageAccountKey $storageAccountKey
Get-AzStorageFileContent `
-ShareName 'resource-templates' `
-Context $Context `
-path 'storageTemplate.json' `
-Destination 'C:\Temp' -Force
$TemplateFile = Join-Path -Path 'C:\Temp' -ChildPath $storageFileName
# Deploy the storage account
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroup `
-TemplateFile $TemplateFile `
-TemplateParameterObject $Parameters
將 Runbook 匯入您的 Azure 自動化帳戶並加以發佈
使用 PowerShell 將 Runbook 匯入您的自動化帳戶,然後發佈 Runbook。 若要了解如何在 Azure 入口網站匯入並發佈 Runbook,請參閱在 Azure 自動化中管理 Runbook。
若要將 runbookScript.ps1
匯入您的自動化帳戶中作為 PowerShell Runbook,請執行下列 PowerShell 命令:
$importParams = @{
Path = $runbookScript
ResourceGroupName = $resourceGroup
AutomationAccountName = $automationAccount
Type = "PowerShell"
}
Import-AzAutomationRunbook @importParams
# Publish the runbook
$publishParams = @{
ResourceGroupName = $resourceGroup
AutomationAccountName = $automationAccount
Name = "runbookScript"
}
Publish-AzAutomationRunbook @publishParams
啟動 Runbook
現在,我們呼叫 Start-AzAutomationRunbook Cmdlet 來啟動 Runbook。 如需關於如何在 Azure 入口網站中啟動 Runbook 的資訊,請參閱在 Azure 自動化中啟動 Runbook。
在 PowerShell 主控台中執行下列命令:
# Set up the parameters for the runbook
$runbookParams = @{
resourceGroup = $resourceGroup
storageAccount = $storageAccount
storageAccountKey = $key[0].Value # We got this key earlier
storageFileName = "storageTemplate.json"
userAssignedManagedIdentity = $userAssignedManagedIdentity
}
# Set up parameters for the Start-AzAutomationRunbook cmdlet
$startParams = @{
resourceGroup = $resourceGroup
AutomationAccountName = $automationAccount
Name = "runbookScript"
Parameters = $runbookParams
}
# Start the runbook
$job = Start-AzAutomationRunbook @startParams
Runbook 執行之後,您可以擷取工作物件 $job.Status
的屬性值來檢查其狀態。
Runbook 會取得 Resource Manager 範本,並使用它來部署新的 Azure 儲存體帳戶。 您可以執行下列命令,以查看新建立的儲存體帳戶:
Get-AzStorageAccount
下一步
- 若要深入了解 Resource Manager 範本,請參閱 Azure Resource Manager 概觀。
- 若要開始使用 Azure 儲存體,請參閱 Azure 儲存體簡介。
- 若要尋找其他實用的 Azure 自動化 Runbook,請參閱在 Azure 自動化使用 Runbook 和模組。