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

Tetapkan izin untuk identitas terkelola

Tetapkan izin ke identitas terkelola untuk melakukan tugas terkait penyimpanan di Runbook.

  1. 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>
    
  2. 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"
    
  3. Tetapkan peran reader ke identitas terkelola yang ditugaskan sistem untuk mengeksekusi cmdlet Get-AzUserAssignedIdentity.

    $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId
    New-AzRoleAssignment `
        -ObjectId $SAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  4. 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