Сброс виртуальной машины Azure, развернутой из образа с использованием шаблона JSON - PullRequest
0 голосов
/ 15 мая 2019

Я развертываю виртуальные машины Azure (с неуправляемыми дисками), основанные на образе виртуального жесткого диска.Шаблоны JSON, используемые для развертывания, хранятся в моей подписке Azure.Иногда мне нужно вернуть компьютер в исходное состояние. Ручной способ для достижения этого через веб-портал Azure :

  1. Откройте группу ресурсов, удалите ВМ (сохраняя при этом другие ресурсы).
  2. Переход к учетной записи хранения и удаление виртуального жесткого диска, который служил в качестве диска ОС для компьютера.
  3. Вернитесь в группу ресурсов -> Развертывание -> выберите последнее Развертывание -> Повторное развертывание.

Я хочу сделать это программно с помощью PowerShell. Все шаги довольно простыдостижимо, за исключением последнего - выполнение передислокации.

Это мой код PowerShell:

# Authenticate to Azure Account
Login-AzAccount

$vm =  Get-AzVM | Out-GridView -Title "Select machine to be reset to factory state" -PassThru
$groupName = $vm.ResourceGroupName


#Stop the VM
Stop-AzureRmVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Force

#Delete VM
#Remove-AzureRmVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name

#Getting storage context, blob name and deleting VHD (blob)
$disk = $vm.StorageProfile.OsDisk
$storageAccount = Get-AzStorageAccount -ResourceGroupName "myStorageAccountResourceGroupName" -Name "myStorageAccountName"


#Get storage context
$storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageAccount.ResourceGroupName -Name $storageAccount.StorageAccountName)[0].Value
$context = New-AzStorageContext -StorageAccountName $storageAccount.StorageAccountName -StorageAccountKey $storageKey
$container = Get-AzStorageContainer -Context $context -Name 'vhds'
$blobName = $disk.Name + ".vhd"
$blob = Get-AzStorageBlob -Container $container.Name -Context $context -Blob $blobName

#Delete Blob
$blob | Remove-AzStorageBlob

Теперь для последнего шага - я могу получить последнее развертывание группы ресурсов и настроить новое развертывание с помощью -RollbackToLastDeployment параметр.

#Redeploy Group
$deployments = Get-AzResourceGroupDeployment $groupName
$deployment = $deployments[$deployments.size - 1]

New-AzResourceGroupDeployment -Name $deployment.DeploymentName -ResourceGroupName $groupName  -TemplateFile <Expects template in local storage> -RollbackToLastDeployment

Проблема в том, что команда New-AzResourceGroupDeployment ожидает шаблон JSON, который находится на моем локальном диске, но мои шаблоны хранятся в подписке Azure.

Есть ли способ использовать шаблон, расположенный в подписке Azure, для повторного развертывания группы ресурсов?

1 Ответ

0 голосов
/ 15 мая 2019

Независимо от того, где находится файл шаблона, вы можете преобразовать / скопировать шаблон в локальный файл .json, затем загрузить его в хранилище, после чего вы сможете использовать параметр -TemplateUri для развертывания удаленный шаблон.

Пример:

Set-AzCurrentStorageAccount -ResourceGroupName ManageGroup -Name {your-unique-name}

# get the URI with the SAS token
$templateuri = New-AzStorageBlobSASToken -Container templates -Blob storage.json -Permission r `
  -ExpiryTime (Get-Date).AddHours(2.0) -FullUri

# provide URI with SAS token during deployment
New-AzResourceGroup -Name ExampleGroup -Location "South Central US"
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateUri $templateuri

Для более подробной информации, вы можете обратиться к этой ссылке .

Обновление

Похоже, мы не смогли найти URI шаблона (превью) на портале, мой обходной путь - скопировать шаблон как файл .json в локальный файл вручную, затем загрузить его в хранилище BLOB-объектов Azure и использовать приведенный выше пример.

Выполните следующие действия:

1.На портале нажмите View Template, вы можете скопировать шаблон и сохранить его как файл. json на локальном компьютере.

enter image description here

2. Затем перейдите в контейнер вашей учетной записи хранения, загрузите файл .json.

enter image description here

3.Нажмите ... вашего .json файла -> Generate SAS -> Generate blob SAS token and URL, скопируйте Blob SAS URL, это $templateuri, что вам нужно в New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateUri $templateuri. Или вы можете использовать New-AzStorageBlobSASToken для генерации, как в примере выше.

enter image description here

enter image description here

...