我正在部署基于VHD映像的Azure VM(具有不受管理的磁盘)。用于部署的JSON模板存储在我的Azure订阅中。
有时我需要将计算机重置为原始状态-通过Azure Web门户实现此目标的手动方法是:
我想使用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订阅中的模板来重新部署资源组?
答案 0 :(得分:0)
无论模板文件位于何处,都可以将模板转换/复制到本地的.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
有关更多详细信息,您可以参考此link。
更新:
似乎我们无法在门户网站中找到Template(preview)的uri,我的解决方法是将模板作为.json
文件手动复制到本地,然后上传到Azure Blob存储,然后使用示例以上。
执行以下步骤:
1。在门户中,单击View Template
,您可以复制模板并将其另存为本地的。json
文件。
2。然后转到您的存储帐户的容器,上传.json
文件。
3。单击...
文件中的.json
-> Generate SAS
-> Generate blob SAS token and URL
,复制Blob SAS URL
,它就是{{1} } $templateuri
中的需求。或者,您可以像上面的示例一样使用New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateUri $templateuri
生成它。