使用 PowerShell 创建 Azure VM 的自定义映像
自定义映像类似于应用商店映像,不同的是自定义映像的创建者是你自己。 自定义映像可用于启动配置,例如预加载应用程序、应用程序配置和其他 OS 配置。 在本教程中,你将创建自己的 Azure 虚拟机自定义映像。 你将学习如何执行以下操作:
- 使用 Sysprep 通用化 VM
- 创建自定义映像
- 从自定义映像创建 VM
- 列出订阅中的所有映像
- 删除映像
本教程需要 Azure PowerShell 模块 3.6 或更高版本。 运行 Get-Module -ListAvailable AzureRM
即可查找版本。 如果需要升级,请参阅安装 Azure PowerShell 模块。
开始之前
下列步骤详细说明了如何将现有 VM 转换为可重用自定义映像,用于创建新的 VM 实例。
若要完成本教程中的示例,必须现有一个虚拟机。 如果需要,此脚本示例可为你创建一个虚拟机。 按照教程进行操作时,请根据需要替换资源组和 VM 名称。
准备 VM
若要创建虚拟机的映像,需通过以下方式准备 VM:通用化 VM、解除分配,然后在 Azure 中将源 VM 标记为通用化。
使用 Sysprep 通用化 Windows VM
Sysprep 将删除所有个人帐户信息及其他某些数据,并准备好要用作映像的计算机。 有关 Sysprep 的详细信息,请参阅如何使用 Sysprep:简介。
- 连接到虚拟机。
- 以管理员身份打开“命令提示符”窗口。 将目录切换到 %windir%\system32\sysprep,然后运行 sysprep.exe。
- 在“系统准备工具”对话框中,选择“进入系统全新体验(OOBE)”,确保已选中“通用化”复选框。
- 在“关机选项”中选择“关机”,然后单击“确定”。
- Sysprep 在完成运行后会关闭虚拟机。 请勿重启 VM。
解除分配 VM 并将其标记为通用化
若要创建映像,需解除分配 VM,并在 Azure 中将其标记为通用化。
使用 Stop-AzureRmVM 解除分配 VM。
Stop-AzureRmVM -ResourceGroupName myResourceGroup -Name myVM -Force
使用 Set-AzureRmVm 将虚拟机的状态设置为 -Generalized
。
Set-AzureRmVM -ResourceGroupName myResourceGroup -Name myVM -Generalized
创建映像
现在,可以使用 New-AzureRmImageConfig 和 New-AzureRmImage 来创建 VM 的映像。 以下示例从名为 myVM 的 VM 创建名为 myImage 的映像。
获取虚拟机。
$vm = Get-AzureRmVM -Name myVM -ResourceGroupName myResourceGroup
创建映像配置。
$image = New-AzureRmImageConfig -Location ChinaEast -SourceVirtualMachineId $vm.ID
创建映像。
New-AzureRmImage -Image $image -ImageName myImage -ResourceGroupName myResourceGroup
从映像创建 VM
现在,你已有了一个映像,可以从该映像创建一个或多个新 VM。 从自定义映像创建 VM 与使用应用商店映像创建 VM 非常相似。 如果使用应用商店映像,需提供有关映像、映像提供程序、产品/服务、SKU 和版本的信息。 如果使用自定义映像,则仅需提供自定义映像资源的 ID。
在以下脚本中,我们使用 Get-AzureRmImage 创建变量 $image 来存储自定义映像的相关信息,然后使用 Set-AzureRmVMSourceImage 并通过刚创建的 $image 变量指定 ID。
此脚本使用自定义映像在 China North 位置中名为 myResourceGroupFromImage 的新资源组中创建名为 myVMfromImage 的 VM。
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."
New-AzureRmResourceGroup -Name myResourceGroupFromImage -Location ChinaEast
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
$vnet = New-AzureRmVirtualNetwork `
-ResourceGroupName myResourceGroupFromImage `
-Location ChinaEast `
-Name MYvNET `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
$pip = New-AzureRmPublicIpAddress `
-ResourceGroupName myResourceGroupFromImage `
-Location ChinaEast `
-Name "mypublicdns$(Get-Random)" `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig `
-Name myNetworkSecurityGroupRuleRDP `
-Protocol Tcp `
-Direction Inbound `
-Priority 1000 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 3389 `
-Access Allow
$nsg = New-AzureRmNetworkSecurityGroup `
-ResourceGroupName myResourceGroupFromImage `
-Location ChinaEast `
-Name myNetworkSecurityGroup `
-SecurityRules $nsgRuleRDP
$nic = New-AzureRmNetworkInterface `
-Name myNic `
-ResourceGroupName myResourceGroupFromImage `
-Location ChinaEast `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id
$vmConfig = New-AzureRmVMConfig `
-VMName myVMfromImage `
-VMSize Standard_D1 | Set-AzureRmVMOperatingSystem -Windows `
-ComputerName myComputer `
-Credential $cred
# Here is where we create a variable to store information about the image
$image = Get-AzureRmImage `
-ImageName myImage `
-ResourceGroupName myResourceGroup
# Here is where we specify that we want to create the VM from and image and provide the image ID
$vmConfig = Set-AzureRmVMSourceImage -VM $vmConfig -Id $image.Id
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $nic.Id
New-AzureRmVM `
-ResourceGroupName myResourceGroupFromImage `
-Location ChinaEast `
-VM $vmConfig
映像管理
下面提供了一些常见的管理映像任务示例,并说明了如何使用 PowerShell 完成这些任务。
按名称列出所有映像。
$images = Find-AzureRMResource -ResourceType Microsoft.Compute/images
$images.name
删除映像。 此示例将从 myResourceGroup 中删除名为 myOldImage 的映像。
Remove-AzureRmImage `
-ImageName myOldImage `
-ResourceGroupName myResourceGroup
后续步骤
在本教程中,你已创建了一个自定义 VM 映像。 你已学习了如何执行以下操作:
- 使用 Sysprep 通用化 VM
- 创建自定义映像
- 从自定义映像创建 VM
- 列出订阅中的所有映像
- 删除映像
请转到下一教程,了解如何创建高度可用的虚拟机。
立即访问http://market.azure.cn
使用 PowerShell 创建 Azure VM 的自定义映像的更多相关文章
- 使用 CLI 创建 Azure VM 的自定义映像
自定义映像类似于应用商店映像,不同的是自定义映像的创建者是你自己. 自定义映像可用于启动配置,例如预加载应用程序.应用程序配置和其他 OS 配置. 在本教程中,你将创建自己的 Azure 虚拟机自定义 ...
- 在Azure China用自定义镜像创建Azure VM Scale Set
在Azure China用自定义镜像创建Azure VM Scale Set 在此感谢世纪互联的工程师Johnny Lee和Lan,你们给了我很大的帮助.因为Azure China的官网没有给出完整的 ...
- [New Portal]Windows Azure Virtual Machine (16) 使用Azure PowerShell创建Azure Virtual Machine
<Windows Azure Platform 系列文章目录> 注:本章内容和之前的[New Portal]Windows Azure Virtual Machine (12) 在本地制作 ...
- 在 Azure 中创建通用 VM 的托管映像
可以从在存储帐户中存储为托管磁盘或非托管磁盘的通用 VM 中创建托管映像资源. 然后可以使用该映像创建多个 VM. 使用 Sysprep 通用化 Windows VM Sysprep 将删除所有个人帐 ...
- Azure ARM (22) 使用Azure PowerShell创建Azure RM VM
<Windows Azure Platform 系列文章目录> 在Azure China获得VM Image,可以执行下面的脚本. Get-AzureRmVMImagePublisher ...
- 订阅无法在 ARM 模式下创建虚拟机,只能在 ASM 模式下创建 Azure VM 部署
问题描述 资源组所有者可以在新版 portal 创建经典模式的虚拟机,但是无法创建 ARM 模式的虚拟机. 问题现象 环境中有个相对权限比较高的账户,比如 account admin (以下简称为 A ...
- 【Azure Developer】使用Java SDK代码创建Azure VM (包含设置NSG,及添加数据磁盘SSD)
在参考Azure官方文档进行VM创建时,发现其中没有包含如何设置NSG的内容,以及如何在创建时就添加数据磁盘的代码(设置磁盘为SSD类型).本文的内容以"使用 Java 创建和管理 Azur ...
- 使用PowerShell创建Azure Storage的SAS Token访问Azure Blob文件
Azure的存储包含Storage Account.Container.Blob等具体的关系如下: 我们常用的blob存储,存放在Storage Account的Container里面. 目前有三种方 ...
- 使用 Azure CLI 2.0 从自定义磁盘创建 Linux VM
本文说明如何在 Azure 中上传自定义的虚拟硬盘 (VHD) 或复制现有 VHD,并从自定义磁盘创建 Linux 虚拟机 (VM). 可以根据要求安装并配置 Linux 分发版,并使用该 VHD 快 ...
随机推荐
- 全网最详细的大数据集群环境下多个不同版本的Cloudera Hue之间的界面对比(图文详解)
不多说,直接上干货! 为什么要写这么一篇博文呢? 是因为啊,对于Hue不同版本之间,其实,差异还是相对来说有点大的,具体,大家在使用的时候亲身体会就知道了,比如一些提示和界面. 安装Hue后的一些功能 ...
- Wookmark-jQuery-master 瀑布流插件使用介绍,含个人测试DEMO
要求 必备知识 本文要求基本了解 Html/CSS, JavaScript/JQuery. 开发环境 Dreamweaver CS6 / Chrome浏览器 演示地址 演示地址 资料下载 测试预 ...
- spring security的简单应用
本文只包涵spring security配置部分,不是一个完整项目,不过可以任意添加到一个web项目中,不需要对原来的程序做任何修改 部分内容来源于网络,如有雷同,毫无意外 1.xml配置文件 < ...
- HTTPS原理简述
角色: A,B,Server,Client,中间窃听者,数字证书签发机构(CA) 工具:对称加密算法,非对称加密算法,数字签名,数字证书 第一步,爱丽丝给出协议版本号.一个客户端生成的随机数(Cl ...
- 设计模式之单例(GCD)
+(Person *)shareManager { static dispatch_once_t onceQueue; static Person *person=nil; dispatch_once ...
- JUC源码1-原子量
什么是原子量,原子量就是一次操作,要么成功,要么失败.比如java中的i++ 或i-- , 不具备原子性,每次读取的值都是不一样的,探究其原因,x86体系中,他的总线是32位的,i++的操作指令必须是 ...
- Java基础——Servlet(六)分页相关
前面写了Servlet(一)到(五),主要是在网上搜罗的视频.对分页这块还是不太清楚.于是有找到一些视频,重新学习了一下.主要是对分页的认识和设计思路.也是为了方便我以后回忆一下.. 一.分页常识 p ...
- Java基础——网络编程(三)
TCP 网络编程 -- tcp 分为客户端和服务端 -- 客户端对应的对象是 Socket -- 服务端对应的对象是 ServerSocket -- 如果客户端先启动,则出现 connection r ...
- 集合框架(TreeSet原理)
特点: TreeSet是用来排序的,可以指定一个顺序,对象存入之后会按照指定的顺序排列 使用方式: 自然排序(Comparable) TreeSet类的add()方法中会把存入的对象提升为Compar ...
- 二叉搜索树(hdu3791)
二叉搜索树 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...