Automation PowerShell Runbook에 Azure Resource Manager 템플릿 배포
Azure Resource Manager 템플릿을 사용하여 Azure 리소스를 배포하는 Automation PowerShell Runbook을 작성할 수 있습니다. 템플릿을 사용하면 Azure Automation을 사용하여 Azure 리소스 배포를 자동화할 수 있습니다. Azure Storage와 같은 안전한 중앙 위치에서 Resource Manager 템플릿을 유지 관리할 수 있습니다.
이 문서에서는 Azure Storage에 저장된 Resource Manager 템플릿을 사용하여 새 Azure Storage 계정을 배포하는 PowerShell Runbook을 만듭니다.
Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
사전 요구 사항
사용자 할당 관리 ID가 하나 이상 있는 Azure Automation 계정. 자세한 내용은 Azure Automation 계정에 대해 사용자 할당 관리 ID 사용을 참조하세요.
Az 모듈:
Az.Accounts
,Az.ManagedServiceIdentity
,Az.Resources
및Az.Storage
. Automation 계정으로 가져왔습니다. 자세한 내용은 Az 모듈 가져오기를 참조하세요.Azure Storage 계정. Resource Manager 템플릿을 저장하는 위치입니다.
로컬 머신에 설치된 Azure PowerShell. Azure PowerShell을 가져오는 방법에 대한 자세한 내용은 Azure PowerShell 모듈 설치를 참조하세요. Az.ManagedServiceIdentity 모듈도 필요합니다.
Az.ManagedServiceIdentity
는 미리 보기 모듈이며 Az 모듈의 일부로 설치되지 않습니다. 설치하려면Install-Module -Name Az.ManagedServiceIdentity
를 실행합니다.
관리 ID에 사용 권한 할당
Runbook에서 스토리지 관련 작업을 수행하기 위해 관리 ID에 권한을 할당합니다.
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
역할을 시스템 할당 관리 ID에 할당하여Get-AzUserAssignedIdentity
cmdlet을 실행합니다.$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
스토리지 계정에 대한 작업을 위해 사용자가 할당한 관리 ID에
Storage Account Contributor
역할을 할당합니다.$UAMI_ID = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI_ID ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Storage Account Contributor"
리소스 관리자 템플릿 만들기
이 예에서는 새 Azure Storage 계정을 배포하는 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 Files에 Resource Manager 템플릿 저장
PowerShell을 사용하여 Azure 파일 공유를 만들고 storageTemplate.json
을 업로드합니다. Azure Portal에서 파일 공유를 만들고 파일을 업로드하는 방법에 관한 지침은 Windows에서 Azure File 시작을 참조하세요.
다음 명령을 실행하여 파일 공유를 만들고 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 스크립트 만들기
Azure Storage에서 storageTemplate.json
파일을 가져오고 템플릿을 배포하여 새 Azure Storage 계정을 만드는 PowerShell 스크립트를 만듭니다. 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
Azure Automation 계정으로 Runbook 가져오기 및 게시
PowerShell을 사용하여 Runbook을 Automation 계정으로 가져온 다음 Runbook을 게시합니다. Azure Portal에서 Runbook 가져오기 및 게시에 대한 자세한 내용은 Azure Automation에서 Runbook 관리를 참조하세요.
runbookScript.ps1
을 PowerShell Runbook으로 Automation 계정에 가져오려면 다음 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 Portal에서 Runbook을 시작하는 방법에 대한 자세한 내용은 Azure Automation에서 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 Storage 계정을 배포하는 데 사용합니다. 다음 명령을 실행하여 새 스토리지 계정이 만들어진 것을 확인할 수 있습니다.
Get-AzStorageAccount
다음 단계
- Resource Manager 템플릿에 대한 자세한 내용은 Azure Resource Manager 개요를 참조하세요.
- Azure Storage를 시작하려면 Azure Storage 소개를 참조하세요.
- 다른 유용한 Azure Automation Runbook을 찾으려면 Azure Automation에서 Runbook 및 모듈 사용을 참조하세요.