若要以快速一致的方式配置虚拟机 (VM),通常需要某种形式的自动化。 自定义 Windows VM 的一种常用方法是使用适用于 Windows 的自定义脚本扩展。 本教程介绍如何执行下列操作:

  • 使用自定义脚本扩展安装 IIS
  • 创建使用自定义脚本扩展的 VM
  • 在应用扩展后查看正在运行的 IIS 站点

本教程需要 Azure PowerShell 模块 3.6 或更高版本。 运行 Get-Module -ListAvailable AzureRM 即可查找版本。 如果需要升级,请参阅安装 Azure PowerShell 模块。如果在本地运行 PowerShell,则还需运行 Login-AzureRmAccount -EnvironmentName AzureChinaCloud 以创建与 Azure 的连接。

自定义脚本扩展概述

自定义脚本扩展在 Azure VM 上下载和执行脚本。 此扩展适用于部署后配置、软件安装或其他任何配置/管理任务。 可以从 Azure 存储或 GitHub 下载脚本,或者在扩展运行时将脚本提供给 Azure 门户。

自定义脚本扩展与 Azure Resource Manager 模板集成,也可以使用 Azure CLI、PowerShell、Azure 门户或 Azure 虚拟机 REST API 来运行它。

自定义脚本扩展适用于 Windows 和 Linux VM。

创建虚拟机

创建 VM 之前,需使用 New-AzureRmResourceGroup 创建资源组。 以下示例在“ChinaEast”位置创建名为“myResourceGroupAutomate”的资源组:

PowerShell复制
New-AzureRmResourceGroup -ResourceGroupName myResourceGroupAutomate -Location ChinaEast

使用 Get-Credential 设置 VM 的管理员用户名和密码:

PowerShell复制
$cred = Get-Credential

现在,可使用 New-AzureRmVM 创建 VM。 以下示例创建所需的虚拟网络组件、OS 配置,然后创建名为“myVM”的 VM:

PowerShell复制
# Create a subnet configuration
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24 # Create a virtual network
$vnet = New-AzureRmVirtualNetwork `
-ResourceGroupName myResourceGroupAutomate `
-Location ChinaEast `
-Name myVnet `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig # Create a public IP address and specify a DNS name
$publicIP = New-AzureRmPublicIpAddress `
-ResourceGroupName myResourceGroupAutomate `
-Location ChinaEast `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4 `
-Name "myPublicIP" # Create an inbound network security group rule for port 3389
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig `
-Name myNetworkSecurityGroupRuleRDP `
-Protocol Tcp `
-Direction Inbound `
-Priority 1000 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 3389 `
-Access Allow # Create an inbound network security group rule for port 80
$nsgRuleWeb = New-AzureRmNetworkSecurityRuleConfig `
-Name myNetworkSecurityGroupRuleWWW `
-Protocol Tcp `
-Direction Inbound `
-Priority 1001 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 80 `
-Access Allow # Create a network security group
$nsg = New-AzureRmNetworkSecurityGroup `
-ResourceGroupName myResourceGroupAutomate `
-Location ChinaEast `
-Name myNetworkSecurityGroup `
-SecurityRules $nsgRuleRDP,$nsgRuleWeb # Create a virtual network card and associate with public IP address and NSG
$nic = New-AzureRmNetworkInterface `
-Name myNic `
-ResourceGroupName myResourceGroupAutomate `
-Location ChinaEast `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $publicIP.Id `
-NetworkSecurityGroupId $nsg.Id # Create a virtual machine configuration
$vmConfig = New-AzureRmVMConfig -VMName myVM -VMSize Standard_DS2 | `
Set-AzureRmVMOperatingSystem -Windows -ComputerName myVM -Credential $cred | `
Set-AzureRmVMSourceImage -PublisherName MicrosoftWindowsServer `
-Offer WindowsServer -Skus 2016-Datacenter -Version latest | `
Add-AzureRmVMNetworkInterface -Id $nic.Id New-AzureRmVM -ResourceGroupName myResourceGroupAutomate -Location ChinaEast -VM $vmConfig

创建资源和 VM 需要几分钟的时间。

自动安装 IIS

使用 Set-AzureRmVMExtension 安装自定义脚本扩展。 该扩展运行 powershell Add-WindowsFeature Web-Server 以安装 IIS Web 服务器,然后更新 Default.htm 页以显示 VM 的主机名:

PowerShell复制
Set-AzureRmVMExtension -ResourceGroupName myResourceGroupAutomate `
-ExtensionName IIS `
-VMName myVM `
-Publisher Microsoft.Compute `
-ExtensionType CustomScriptExtension `
-TypeHandlerVersion 1.4 `
-SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' `
-Location ChinaEast

测试网站

使用 Get-AzureRmPublicIPAddress 获取负载均衡器的公共 IP 地址。 以下示例获取前面创建的“myPublicIP”的 IP 地址:

PowerShell复制
Get-AzureRmPublicIPAddress `
-ResourceGroupName myResourceGroupAutomate `
-Name myPublicIP | select IpAddress

然后,可将公共 IP 地址输入 Web 浏览器中。 网站随即显示,其中包括负载均衡器将流量分发到的 VM 的主机名,如下例所示:

后续步骤

在本教程中,你在 VM 上自动执行了 IIS 安装。 你已了解如何:

  • 使用自定义脚本扩展安装 IIS
  • 创建使用自定义脚本扩展的 VM
  • 在应用扩展后查看正在运行的 IIS 站点

转到下一教程,了解如何创建自定义 VM 映像。

立即访问http://market.azure.cn

如何在 Azure 中自定义 Windows 虚拟机的更多相关文章

  1. 如何在 Azure 中均衡 Windows 虚拟机负载以创建具有高可用性的应用程序

    负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性. 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性. 你将学习如何执行以下操作: 创建 Azure 负载 ...

  2. 如何在 Azure 中标记 Windows 虚拟机

    本文介绍在 Azure 中通过 Azure 资源管理器标记 Windows 虚拟机的不同方式.标记是用户定义的键/值对,可直接放置在资源或资源组中.针对每个资源和资源组,Azure 当前支持最多 15 ...

  3. 如何使用 Packer 在 Azure 中创建 Windows 虚拟机映像

    Azure 中的每个虚拟机 (VM) 都是基于定义 Windows 分发和操作系统版本的映像创建的. 映像可以包括预安装的应用程序和配置. Azure 应用商店为最常见的操作系统和应用程序环境提供了许 ...

  4. Azure 中的 Windows 虚拟机概述

    Azure 虚拟机 (VM) 是 Azure 提供的多种可缩放按需分配计算资源之一. 通常情况下,如果需要以更大的力度(相对于其他控制选项)控制计算环境,则应选择 VM. 本文介绍创建 VM 之前的注 ...

  5. 在 Azure 中管理 Windows 虚拟机的可用性

    了解如何设置和管理多个虚拟机,以确保 Azure 中 Windows 应用程序的高可用性. 也可以管理 Linux 虚拟机的可用性. Note Azure 具有用于创建和处理资源的两个不同的部署模型: ...

  6. 如何在 Azure 中均衡 Linux 虚拟机负载以创建高可用性应用程序

    负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性. 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性. 你将学习如何执行以下操作: 创建 Azure 负载 ...

  7. 在 Azure 中的 Windows 虚拟机上使用 SSL 证书保护 IIS Web 服务器

    若要保护 Web 服务器,可以使用安全套接字层 (SSL) 证书来加密 Web 流量. 这些 SSL 证书可存储在 Azure Key Vault 中,并可安全部署到 Azure 中的 Windows ...

  8. 排查在 Azure 中新建 Windows VM 时遇到的部署问题

    尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. 当由于准备步骤不当,或者在从门户捕获映像期间选择了错误的设置而导致 OS 映像无法加载时,将发生预配失败. 当群集 ...

  9. 6.1 如何在spring中自定义xml标签

    dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个简单的例子. 一 编写模型类 package ...

随机推荐

  1. TCP保活的必要性

    TCP的长连接理论上只要连接建立后,就会一直保持着.但有时有一些防火墙之类的软件会自动检查主机的网络连接状况,比如说如果发现某个连接在几分钟之内都没有数据通讯,则会关闭这个连接.有时客户端与服务器需要 ...

  2. solr(四) : springboot 整合 solr

    前言: solr服务器搭起来, 数据导入之后, 就该应用到项目中去了. 那在项目中, 该怎么整合和应用solr呢? 接下来, 就来整合和应用solr 一. 整合 1. 引入jar包 <prope ...

  3. MVC返回文件

    上一篇 介绍了Action 返回View, 顺便也看到了返回Json的处理, 这一篇并不看文件返回的源码, 此篇是为了应用. 1. Response返回文件 在MVC的项目中, 还是能看到很多同事, ...

  4. ActiveMQ——activemq的报错见解javax.jms.JMSException: Software caused connection abort: recv failed

    activeMQ出现javax.jms.JMSException: Software caused connection abort: recv failed的问题解决 一直找不到原因,原来是在本地的 ...

  5. logstash-input-jdbc同时同步多个表

    同步一个表,可以参考我的上一篇 logstash-jdbc-input与mysql数据库同步 同步多个表的做法,跟一个表类似,唯一不同的是 .conf 文件中的配置 在这里我加了一个脚本文件jdbc- ...

  6. Double与BigDecimal 精度问题

    转自:http://superivan.iteye.com/blog/963628 [1] 精确的浮点运算: 在Java里面,有时候为了保证数值的准确性需要精确的数据,先提供一个例子就可以发现问题了: ...

  7. Spring学习之路-从入门到放弃

    后台框架是真难入门啊!!!IDE的使用,环境的搭建,框架下载,上手,每一步都恶心人. 花了整整两天,才学会用idea,并且初步了解了maven(TM就是一个npm),然后跟着下载了对应的jar包,搭建 ...

  8. .Net Core使用Socket与树莓派进行通信

    前言 去年买的树莓派一直放在抽屉里吃灰,前些阵子Debian 9发布,也不出意外的支持了树莓派. 于是重新拿出读卡器又重新了装上了Debian桌面版系统. 介绍 现在这个东西目前的程度只是了解一下Py ...

  9. Jquery操作属性

    1.attr(name,value):修改单个属性! name :属性名称 value:属性的值 <script> $(function(){ //给div添加一个alt=hello的属性 ...

  10. Git(二)_基本命令

    0. 开始查看所有配置:git config --listgit config --global user.name "runoob"git config --global use ...