使用 JSON 模板重置从映像部署的 Azure VM

卡德利诺比特

我正在部署基于 VHD 映像的 Azure VM(带有非托管磁盘)。用于部署的 JSON 模板存储在我的 Azure 订阅中。有时我需要将机器重置为原始状态 -通过 Azure Web 门户实现此目的手动方法是:

  1. 打开资源组,删除VM(同时保留其他资源)。
  2. 转到存储帐户并删除用作计算机操作系统磁盘的 VHD。
  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 订阅中的模板来重新部署资源组?

王悦 |

无论模板文件位于何处,您都可以将模板转换/复制到.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手动将模板复制为本地文件,然后上传到azure blob存储,然后使用上面的示例。

按照步骤:

1.在门户中,单击View Template,您可以复制模板并将其另存为 . json本地文件。

在此处输入图片说明

2.然后转到您的存储帐户的容器,上传.json文件。

在此处输入图片说明

3.点击...你的.json文件的 -> Generate SAS-> Generate blob SAS token and URL,复制Blob SAS URL,它就是$templateuri你需要的New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateUri $templateuri. 或者您可以New-AzStorageBlobSASToken像上面的示例一样使用生成它。

在此处输入图片说明

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Azure:从通用映像部署 VM 时出错(映像不可部署)

来自分类Dev

使用ARM模板和JSON在Azure中创建VM时出现“ DiskImageNotReady”错误

来自分类Dev

如何在输出中使用 ARM 模板在部署后列出 Azure VM 或 HDI 集群的 IP

来自分类Dev

使用Rest API从Azure平台映像创建VM

来自分类Dev

无法在Azure中使用机密计算VM部署服务

来自分类Dev

无法捕获Azure VM的映像

来自分类Dev

在 Azure 中通过 ARM 模板部署 Windows 和 Linux VM

来自分类Dev

从Azure VM使用SQL AZure复制

来自分类Dev

如何使用azure-sdk-for-python使用自定义映像创建VM?

来自分类Dev

从Azure VM中访问JSON中的变量?

来自分类Dev

Azure ARM JSON 模板部署逻辑说明

来自分类Dev

不同Azure机器上的相同VM映像

来自分类Dev

无法从映像旋转 Azure 中的 VM

来自分类Dev

使用 Terraform 部署期间在 Azure VM 上安装 DSC 扩展的问题

来自分类Dev

使用发布管道将 Asp.net 核心 Web 应用程序部署到 azure vm

来自分类Dev

部署到新的D系列Azure VM

来自分类Dev

部署到新的D系列Azure VM

来自分类Dev

VSTS:部署到基于 Azure 的 VM

来自分类Dev

使用SDK获取Azure VM的IP

来自分类Dev

您的凭据无法使用Azure VM

来自分类Dev

使用Powershell在Azure中创建VM

来自分类Dev

Azure:如何使用PowerShell从MarketPlace创建VM

来自分类Dev

使用PowerShell更改Azure VM的密码

来自分类Dev

在VM中使用Azure CLI命令

来自分类Dev

使用Azure AD凭据SQL VM

来自分类Dev

使用AzureDevops在Azure Kubernetes服务(AKS)中部署容器映像

来自分类Dev

如何使用Azure SDK创建Azure Spot VM

来自分类Dev

Azure:使用Azure AD帐户(WAAD)连接到VM

来自分类Dev

使用Azure Devops部署Azure策略ARM模板失败

Related 相关文章

热门标签

归档