Azure 基础:使用 powershell 创建虚拟机
在进行与 azure 相关的自动化过程中,创建虚拟主机是避不开的操作。由于系统本身的复杂性,很难用一两条简单的命令完成虚拟主机的创建。所以专门写一篇文章来记录使用 PowerShell 在 azure 上创建虚拟主机(Ubuntu 服务器)。
虚拟主机虚拟主机需要与其他的一些基础性组件关联在一起才能提供可用的服务,这些组件包括:网卡、public IP 地址、虚拟网络、网络安全组、存储等。下图包含了新建一个虚机所需要的其他组件:

也就是说在我们创建虚机的同时也要把这些组件一一的创建出来。
定义变量
我们希望今后可以重用这个脚本,所以把用到的变量全都放在一起便于修改或使用脚本的参数进行初始化:
$rgName = "vmpool"
$rgLocation = "East Asia"
$subnetConfigName = $rgName + "subnet"
$vnetName = $rgName + "vnet"
$vmName = "vmxman"
$pipName = $vmName + "pip"
$nsgRule22Name = "nsgRule22"
$nsgName = $rgName + "nsg"
$interfaceName = $vmName + "nic"
$storageName = $rgName + "storage"
$storageType = "Standard_GRS"
$oSDiskName = $vmName + "OSDisk"
$vmSize = "Standard_D1"
$vmVersion = "16.04-LTS"
$userName = "nick"
$userPassword = ""
希望没有吓到你。没错!就是需要这么多的变量,这里先不解释,在后面用到一个说一个。
创建登录虚机的凭据
通过这个脚本创建的虚机默认会创建一个用户,你需要指定用户的名称和登录密码(我们的创建的用户通过公钥认证登录,这个密码并不真正使用)。通过用户名和密码创建凭据对象:
$securePassword = ConvertTo-SecureString $userPassword -AsPlainText -Force
$userCred = New-Object System.Management.Automation.PSCredential ($userName, $securePassword)
创建 Resource Group
创建一个新的 Resource Group,这个虚机及其所有相关的组件都归属于同一个 Resource Group:
New-AzureRmResourceGroup -Name $rgName -Location $rgLocation
在参数 Location 中指定 Resource Group 的位置为东亚(访问速度比较快)。
创建虚拟网络
接下来创建与虚拟网络。先创建一个子网的配置:
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name $subnetConfigName -AddressPrefix 192.168.1.0/24
然后创建具有一个子网的虚拟网络:
$vnet = New-AzureRmVirtualNetwork -ResourceGroupName $rgName -Location $rgLocation `
-Name $vnetName -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig
最后为主机创建一个可以外网访问的 public IP:
$pip = New-AzureRmPublicIpAddress -ResourceGroupName $rgName -Location $rgLocation `
-AllocationMethod Static -IdleTimeoutInMinutes 4 `
-Name $pipName
创建网络安全组
需要先配置一个允许访问 22 端口的规则:
$nsgRule22 = New-AzureRmNetworkSecurityRuleConfig -Name $nsgRule22Name -Protocol Tcp `
-Direction Inbound -Priority 200 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 22 -Access Allow
然后创建网络安全组:
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $rgName -Location $rgLocation `
-Name $nsgName -SecurityRules $nsgRule22
创建网络接口
主机还缺一张网卡,所以为主机创建一个虚拟网卡:
$nic = New-AzureRmNetworkInterface -Name $interfaceName -ResourceGroupName $rgName -Location $rgLocation `
-SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
创建 Storage Account
虚机的磁盘文件是以 blob 的形式存放在 azure 的存储中的,所以我们需要创建一个 StorageAccount 来存储磁盘文件:
$storageAccount = New-AzureRmStorageAccount -ResourceGroupName $rgName -Name $storageName -Type $storageType -Location $rgLocation
下面定义磁盘文件的存放位置和名称:
$oSDiskUri = $storageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $oSDiskName + ".vhd"
创建虚机
下面创建虚机相关的配置:
$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize | `
Set-AzureRmVMOperatingSystem -Linux -ComputerName $vmName -Credential $userCred -DisablePasswordAuthentication | `
Set-AzureRmVMSourceImage -PublisherName Canonical -Offer UbuntuServer -Skus $vmVersion -Version latest | `
Add-AzureRmVMNetworkInterface -Id $nic.Id | `
Set-AzureRmVMOSDisk -VhdUri $oSDiskUri -CreateOption FromImage
我们创建的虚机操作系统为 Ubuntu Server 16.04-LTS,禁止使用用户名密码的方式登录。要让用户能够通过公钥的方式登录必须提供用户的公钥:
$sshPublicKey = "nick's ssh public key"
下面的命令会把你提供的公钥写入到用户的 authorized_keys 文件中:
Add-AzureRmVMSshPublicKey -VM $vmconfig -KeyData $sshPublicKey -Path "/home/$userName/.ssh/authorized_keys"
下面的命令真正的在 azure 上创建虚机:
New-AzureRmVM -ResourceGroupName $rgName -Location $rgLocation -VM $vmConfig
访问权限问题
在 azure 上执行操作需要用户先进行登录,那么在 PowerShell 脚本中该如何做呢?
笔者在《Azure 基础:用 PowerShell 自动登录》一文中有详细的介绍,有兴趣的朋友可以参考。
Azure 基础:使用 powershell 创建虚拟机的更多相关文章
- 在Azure上通过Powershell创建多Interface的Cisco CSR路由器
前面通过Json的Template在Azure上创建了Cisco的CSR路由器.但那个Json的template只支持1块网卡.如果需要多网卡的Cisco CSR路由器,可以改上篇文章中提到的Json ...
- Azure China (8) 使用Azure PowerShell创建虚拟机,并设置固定Virtual IP Address和Private IP
<Windows Azure Platform 系列文章目录> 本文介绍的是由世纪互联运维的Windows Azure China. 相比于Global Azure (http://www ...
- Azure PowerShell 创建虚拟机
# 指定订阅名称$subscriptionName="订阅名称"# 指定云服务名称$serviceName="云服务名称"# 指定用来保存虚拟机VHD的存储$s ...
- Azure PowerShell (5) 使用Azure PowerShell创建简单的Azure虚拟机和Linux虚拟机
<Windows Azure Platform 系列文章目录> 本文介绍的是国外的Azure Global.如果是国内由世纪互联运维的Azure China,请参考这篇文档: Azure ...
- Azure 基础:使用 powershell 创建虚拟网络
什么是虚拟网络 虚拟网络是您的网络在 Azure 云上的表示形式.您可以完全控制虚拟网络的 IP 地址.DNS 的设置.安全策略和路由表.您还可以更进一步,把虚拟网络划分为多个子网.然后用它们连接您的 ...
- Windows Azure系列公开课 - 第三课:创建虚拟机 (基础篇)
Windows Azure微软智能云平台主要提供四大类服务:计算服务(Compute),数据服务 (Data Services) ,应用服务 (App Services) ,网络服务(Network) ...
- ARM 环境下使用azure powershell 从远程blob中拉去vhd 并创建虚拟机
最近需要从指定公共访问的blob中复制vhd到自己的订阅存储账户,并使用vhd创建AZURE ARM虚拟机(非经典版),而且在portal.azure.cn中无法实现虚拟机映像创建等功能,于是自己使用 ...
- Azure Powershell blob中指定的vhd创建虚拟机
#此脚本用于 Azure 存储账户中已有 vhd 镜像文件创建虚拟机,一般用于做好镜像测试 #----------------------------------------------------- ...
- Azure PowerShell 在ARM环境下使用指定 vhd(本地化后的磁盘) 来创建虚拟机
#此脚本用于 Azure 存储账户中已有 vhd 镜像文件创建虚拟机,一般用于做好镜像测试 #----------------------------------------------------- ...
随机推荐
- 数据结构与算法->树->2-3-4树的查找,添加,删除(Java)
代码: 兵马未动,粮草先行 作者: 传说中的汽水枪 如有错误,请留言指正,欢迎一起探讨. 转载请注明出处. 目录 一. 2-3-4树的定义 二. 2-3-4树数据结构定义 三. 2-3-4树的可以得到 ...
- Vue-cli创建项目从单页面到多页面
vue-cli创建项目从单页面到多页面 对于某些项目来说,单页面不能很好的满足需求,所以需要将vue-cli创建的单页面项目改为多页面项目. 需要修改以下几个文件: 1.下载依赖glob $npm i ...
- 作为一个新人,怎样学习嵌入式Linux
作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下. 在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会). C语言要学 ...
- linux文件权限解析(摘)
用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念 - 所有者 - 所在组 - 其它组 - 改变用户所在的组 所有者 一般为文件的创建 ...
- C++中const用于函数重载
C++中const用于函数重载 常成员函数和非常成员函数之间的重载 首先先回忆一下常成员函数 声明:<类型标志符>函数名(参数表)const: 说明: (1)const是函数类型的一部分, ...
- 翻译连载 | 第 10 章:异步的函数式(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
- Java中的对象和引用
<Java编程思想>中有一段关于对象的说法: "按照通俗的说法,每个对象都是某个类(class)的一个实例(instance),这里,'类'就是'类型'的同义词." 简 ...
- java学习——java中的反射学习笔记
Java--reflect 一.Class类的使用 什么是Class类? 1:在面向对象的世界中,万事万物皆对象. java语言中,静态的成员,普通数据类型类是不是对象呢? 是,对象!是类的对象! 类 ...
- HADOOP源码分析之RPC(1)
源码位于Hadoop-common ipc包下 abstract class Server 构造Server protected Server(String bindAddress, int port ...
- 基于java生成二维码
二维码 二维码的概念 ...