我正在部署基于 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 订阅中的模板来重新部署资源组?
无论模板文件位于何处,您都可以将模板转换/复制到.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] 删除。
我来说两句