Wdrażanie szablonu usługi Azure Resource Manager w elemecie Runbook programu PowerShell usługi Automation

Możesz napisać element Runbook programu PowerShell usługi Automation, który wdraża zasób platformy Azure przy użyciu szablonu usługi Azure Resource Manager. Szablony umożliwiają używanie usługi Azure Automation do automatyzacji wdrażania zasobów platformy Azure. Szablony usługi Resource Manager można przechowywać w centralnej, bezpiecznej lokalizacji, takiej jak usługa Azure Storage.

W tym artykule utworzymy element Runbook programu PowerShell, który używa szablonu usługi Resource Manager przechowywanego w usłudze Azure Storage w celu wdrożenia nowego konta usługi Azure Storage .

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Wymagania wstępne

Przypisywanie uprawnień do tożsamości zarządzanych

Przypisz uprawnienia do tożsamości zarządzanych, aby wykonywać zadania związane z magazynem w elemecie Runbook.

  1. Zaloguj się interaktywnie na platformie Azure przy użyciu polecenia cmdlet Połączenie-AzAccount i postępuj zgodnie z instrukcjami.

    # 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. Podaj odpowiednią wartość dla poniższych zmiennych, a następnie wykonaj skrypt.

    $resourceGroup = "resourceGroup"
    $automationAccount = "automationAccount"
    $storageAccount = "storageAccount"
    $userAssignedManagedIdentity = "userAssignedManagedIdentity"
    $storageTemplate = "path\storageTemplate.json"
    $runbookScript = "path\runbookScript.ps1"
    
  3. Przypisz rolę reader do przypisanej przez system tożsamości zarządzanej, aby wykonać polecenie cmdlet Get-AzUserAssignedIdentity.

    $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId
    New-AzRoleAssignment `
        -ObjectId $SAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  4. Przypisz rolę Storage Account Contributor do tożsamości zarządzanej przypisanej przez użytkownika w celu wykonania akcji względem konta magazynu.

    $UAMI_ID = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId
    New-AzRoleAssignment `
        -ObjectId $UAMI_ID `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Storage Account Contributor"
    

Tworzenie szablonu usługi Resource Manager

W tym przykładzie użyjesz szablonu usługi Resource Manager, który wdraża nowe konto usługi Azure Storage. Utwórz plik lokalny o nazwie storageTemplate.json , a następnie wklej następujący kod:

{
  "$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')]"
      }
  }
}

Zapisz szablon usługi Resource Manager w usłudze Azure Files

Użyj programu PowerShell, aby utworzyć udział plików platformy Azure i przekazać plik storageTemplate.json. Aby uzyskać instrukcje dotyczące tworzenia udziału plików i przekazywania pliku w witrynie Azure Portal, zobacz Rozpoczynanie pracy z usługą Azure Files w systemie Windows.

Uruchom następujące polecenia, aby utworzyć udział plików i przekazać szablon usługi Resource Manager do tego udziału plików.

# 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

Utwórz skrypt elementu Runbook programu PowerShell

Utwórz skrypt programu PowerShell, który pobiera storageTemplate.json plik z usługi Azure Storage i wdraża szablon w celu utworzenia nowego konta usługi Azure Storage. Utwórz plik lokalny o nazwie runbookScript.ps1 , a następnie wklej następujący kod:

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 

Importuj i publikuj element Runbook na swoim koncie usługi Azure Automation

Za pomocą programu PowerShell zaimportuj element Runbook do konta usługi Automation, a następnie opublikuj element Runbook. Aby uzyskać informacje na temat importowania i publikowania elementów Runbook w witrynie Azure Portal, zobacz Zarządzanie elementami Runbook w usłudze Azure Automation.

Aby zaimportować runbookScript.ps1 do konta usługi Automation jako element Runbook programu PowerShell, uruchom następujące polecenia programu 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

Uruchamianie elementu runbook

Teraz uruchomimy element Runbook, wywołując polecenie cmdlet Start-AzAutomationRunbook . Aby uzyskać informacje na temat uruchamiania elementu Runbook w witrynie Azure Portal, zobacz Uruchamianie elementu Runbook w usłudze Azure Automation.

Uruchom następujące polecenia w konsoli programu 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

Po uruchomieniu elementu Runbook możesz sprawdzić jego stan, pobierając wartość właściwości obiektu $job.Statuszadania .

Element Runbook pobiera szablon usługi Resource Manager i używa go do wdrożenia nowego konta usługi Azure Storage. Nowe konto magazynu zostało utworzone, uruchamiając następujące polecenie:

Get-AzStorageAccount

Następne kroki