Menyebarkan templat Azure Resource Manager di runbook Azure Automation PowerShell
Anda dapat menulis runbook Azure Automation PowerShell yang menyebarkan sumber daya Azure menggunakan templat Azure Resource Manager. Templat ini memungkinkan Anda menggunakan Azure Automation untuk mengotomatiskan penyebaran sumber daya Azure Anda. Anda dapat mempertahankan templat Resource Manager di lokasi terpusat dan aman, seperti Azure Storage.
Dalam artikel ini, kami membuat runbook PowerShell yang menggunakan templat Resource Manager yang disimpan di Azure Storage untuk menyebarkan akun Azure Storage baru.
Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
Prasyarat
Akun Azure Automation dengan setidaknya satu identitas terkelola yang ditetapkan pengguna. Untuk informasi selengkapnya, lihat Menggunakan identitas terkelola yang ditetapkan pengguna untuk akun Azure Automation.
Modul Az:
Az.Accounts
,Az.ManagedServiceIdentity
,Az.Resources
, danAz.Storage
. diimpor ke akun Azure Automation. Untuk informasi selengkapnya, lihat Impor modul Az.Akun Azure Storage tempat menyimpan templat Resource Manager.
Azure PowerShell diinstal pada komputer lokal. Lihat Menginstal Modul Azure PowerShell untuk informasi tentang cara mendapatkan Azure PowerShell. Anda juga memerlukan modul Az.ManagedServiceIdentity.
Az.ManagedServiceIdentity
adalah modul pratinjau dan tidak dipasang sebagai bagian dari modul Az. Untuk memasangnya, jalankanInstall-Module -Name Az.ManagedServiceIdentity
Tetapkan izin untuk identitas terkelola
Tetapkan izin ke identitas terkelola untuk melakukan tugas terkait penyimpanan di Runbook.
Masuk ke Azure secara interaktif menggunakan cmdlet Connect-AzAccount dan ikuti instruksinya.
# 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>
Berikan nilai yang sesuai untuk variabel di bawah ini dan kemudian jalankan skrip.
$resourceGroup = "resourceGroup" $automationAccount = "automationAccount" $storageAccount = "storageAccount" $userAssignedManagedIdentity = "userAssignedManagedIdentity" $storageTemplate = "path\storageTemplate.json" $runbookScript = "path\runbookScript.ps1"
Tetapkan peran
reader
ke identitas terkelola yang ditugaskan sistem untuk mengeksekusi cmdletGet-AzUserAssignedIdentity
.$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Tetapkan peran
Storage Account Contributor
ke identitas terkelola yang ditetapkan pengguna untuk tindakan terhadap akun penyimpanan.$UAMI_ID = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI_ID ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Storage Account Contributor"
Buat templat Resource Manager
Dalam contoh ini, kami menggunakan templat Azure Resource Manager yang menyebarkan akun Azure Storage baru. Buat file lokal bernama storageTemplate.json
dan tempelkan kode berikut:
{
"$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')]"
}
}
}
Simpan templat Resource Manager di Azure Files
Gunakan PowerShell untuk membuat berbagi file Azure dan unggah storageTemplate.json
. Untuk instruksi tentang cara membuat berbagi file dan mengunggah file di portal Microsoft Azure, lihat Mulai dengan Azure Files di Windows.
Jalankan perintah berikut untuk membuat berbagi file dan mengunggah template Resource Manager ke berbagi file tersebut.
# 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
Membuat skrip runbook PowerShell
Buat skrip PowerShell yang terdapat file storageTemplate.json
dari Azure Storage dan sebarkan templat untuk membuat akun Azure Storage baru. Buat file lokal bernama runbookScript.ps1
dan tempelkan kode berikut:
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
Mengimpor dan menerbitkan runbook ke akun Azure Automation Anda
Gunakan PowerShell untuk mengimpor runbook ke akun Automation Anda, lalu terbitkan runbook. Untuk informasi tentang mengimpor dan menerbitkan runbook di portal Microsoft Azure, lihat Mengelola runbook di Azure Automation.
Untuk mengimpor runbookScript.ps1
ke akun Azure Automation Anda sebagai runbook PowerShell, jalankan perintah PowerShell berikut:
$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
Memulai runbook
Sekarang kita mulai runbook dengan memanggil cmdlet start-AzAutomationRunbook. Untuk informasi tentang cara memulai runbook di portal Azure, lihat Memulai runbook di Azure Automation.
Jalankan perintah berikut ini di konsol 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
Begitu runbook berjalan, Anda dapat memeriksa statusnya dengan mengambil nilai properti dari objek pekerjaan $job.Status
.
Runbook mendapatkan templat Resource Manager dan menggunakannya untuk menyebarkan akun Azure Storage baru. Anda dapat melihat akun penyimpanan baru dibuat dengan menjalankan perintah berikut:
Get-AzStorageAccount
Langkah berikutnya
- Untuk mempelajari selengkapnya tentang templat Resource Manager, lihat Gambaran umum Azure Resource Manager.
- Untuk mulai menggunakan Azure Storage, lihat Pengenalan Azure Storage.
- Untuk menemukan runbook Azure Automation lainnya yang berguna, lihat Menggunakan runbook dan modul di Azure Automation.