你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
可以使用 Azure 资源管理器模板编写部署 Azure 资源的自动化 PowerShell Runbook。 借助模板可以通过 Azure 自动化来自动部署 Azure 资源。 可以在一个安全的中心位置(例如 Azure 存储)维护资源管理器模板。
在本文中,我们将创建一个 PowerShell Runbook,该 Runbook 使用存储在 Azure 存储 中的资源管理器模板来部署新的 Azure 存储帐户。
如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
先决条件
至少具有一个用户分配的托管标识的 Azure 自动化帐户。 有关详细信息,请参阅 为 Azure 自动化帐户使用用户分配的托管标识。
Az 模块:
Az.Accounts、Az.ManagedServiceIdentity、Az.Resources和Az.Storage。 导入到自动化帐户中。 有关详细信息,请参阅导入 Az 模块。要在其中存储资源管理器模板的 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"
创建资源管理器模板
在此示例中,使用部署新 Azure 存储帐户的资源管理器模板。 创建名为 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 文件中保存资源管理器模板
使用 PowerShell 创建 Azure 文件共享并上传 storageTemplate.json。 有关如何在 Azure 门户中创建文件共享和上传文件的说明,请参阅 Windows 上的 Azure 文件入门。
运行以下命令以创建文件共享并将资源管理器模板上传到该文件共享。
# 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 存储获取 storageTemplate.json 文件的 PowerShell 脚本,并部署模板以创建新的 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
将运行手册导入并发布到您的 Azure 自动化帐户中
使用 PowerShell 将运行手册导入到自动化帐户中,然后发布运行手册。 有关在 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 获取资源管理器模板,并使用它来部署新的 Azure 存储帐户。 可以通过运行以下命令来查看新存储帐户是否已创建:
Get-AzStorageAccount
后续步骤
- 若要了解有关资源管理器模板的详细信息,请参阅 Azure 资源管理器概述。
- 若要开始使用 Azure 存储,请参阅 Azure 存储简介。
- 若要查找其他有用的 Azure 自动化运行手册,请参阅 在 Azure 自动化中使用运行手册和模块。