Microsoft Azure是世界上最大的云平台之一。 尽管我对创建它的公司缺乏同情,但我必须承认,与竞争对手相比,该平台具有许多便利设施。 但美中不足的是没有一桶蜂蜜,而Microsoft Azure中的这把汤匙就是系统组件的名称。 如果只需两次单击即可在AWS中重命名组件,则在Azure中将名称紧密绑定到组件,并且有时不需手鼓跳舞就可以更改它们。 因此,与Azure一起初始创建正确的结构非常重要。

因此,让我们尝试在Microsoft Azure中创建一个名称为server-01和默认设置的虚拟机。 下图清楚地显示了最终的混乱情况。

如果一切都适合您,那么您将无法继续阅读。 好吧,如果您像我一样喜欢管理中的总订单,那么我冒着为过去几年一直在使用的Microsoft Azure组件提出漂亮的命名方案的风险。
此方案使您可以将整个系统带入以下统一形式:
{组件组} __ {元素}{Component}-{Number} __ {Element}-{Number}所以,让我们开始吧...
添加资源组Resource groups >> +Add Resource group name: servers
创建虚拟网络和子网默认情况下,Microsoft Azure将子网扩展到整个虚拟网络。 这不是很方便,因为如果有必要,添加新的子网(例如,VPN子网)将非常困难。 因此,我通常为虚拟网络和子网提供最后两个八位位组(掩码16),最后一个八位位组(掩码24)。
Virtual networks >> +Add Name: servers__network Address space: 10.0.0.0/16 Subnet: Name: default Address range: 10.0.0.0/24 Network interfaces: +Add Name: server-01__ip-private-01 Virtual network: servers__network Subnet: default Private IP address: Static/10.0.0.101
Azure使用子网的前几个地址(10.0.0.01 ... 03)来满足其需要,因此我将工作地址移到了100以上的范围。因此,服务器号将对应IP地址的最后一位:server-01 = 10.0.0.101, server-02 = 10.0.0.102,server-43 = 10.0.0.143,依此类推。
外部地址和安全组如果计划将虚拟机向外部看,则创建一个公共地址和一个安全组。
Public IP addresses: +Add Name: server-01__ip-public-01 IP address assignment: Static Public IP addresses >> server-01__ip-public-01 >> Associate: Resource type >> Network interface: server-01__ip-private-01
在Azure中,可以为一台计算机和整个子网创建一个安全组。 根据变量,名称会有所不同。
Network security groups >> +Add
单个主机的安全组选项:
Name: server-01__security-group Network interfaces >> +Associate: server-01__ip-private-01
子网的安全组:
Name: servers__network-security-group Subnets >> +Associate: Virtual network: servers__network Subnet: default
驱动器不幸的是,Azure不允许您使用任意名称创建磁盘,因此在这里您将需要通过创建虚拟虚拟机来解决该问题,然后将其磁盘用作空白来创建工作机。
创建一个虚拟虚拟机 Virtual machines >> +Add Basics: Name: server-01-raw VM disk type: Premium SSD Username: your-name SSH public key: your-public-key Settings: Availability set: None Network: servers__network Subnet: default Public IP address: None Select public inbound ports: No public inbound ports Monitoring: Disabled
创建虚拟计算机后,可以删除所有标有原始后缀的组件(包括计算机本身),但磁盘除外。
我们删除磁盘快照 Disks >> disk server-01-raw_OsDisk_... >> +Create snapshot Name: server-01-raw-snapshot
根据快照,创建一个新的工作磁盘:
Disks >> +Add Name: server-01__disk-01 Source type: Snapshot Source snapshot: server-01-raw-snapshot
我们在新磁盘的基础上部署工作机 Disks >> server-01__disk-01 >> + Create VM Basics: Name: server-01 Settings: Availability set: None Network: servers__network Subnet: default Public IP address: None Select public inbound ports: No public inbound ports Monitoring: Disabled
网络接口Microsoft的另一个遗漏-从GUI中的磁盘创建虚拟机时,无法将先前创建的网络接口附加到该虚拟机。 因此,我们停止机器,删除网络接口,并将上面创建的接口连接到它。
Virtual machines >> VM server-01 >> Stop Virtual machines >> VM server-01 >> Networking: Attach network interface >> server-01__ip-private-01 Detach network interface >> server-01982
垃圾处理最后的操作是清除操作过程中遗留的碎屑。
删除:
server-01982网络接口,
安全组server-01-nsg,
从虚拟机驱动器:server-01-raw_OsDisk ...
快照服务器01原始快照
结果如下:

命令行界面
您可能已经注意到,将美丽带到Azure是一项相当麻烦的任务。 但是,如果使用命令行(CLI),一切都会大大简化。 Microsoft Azure为其本机PowerShell和Linux控制台提供了CLI。 后面的选项将在下面描述。
登录名:
az login -u AzureUserName
获取可用位置列表
az account list-locations
获取虚拟机大小列表:
az vm list-sizes --location locationName
我们设置网络和虚拟机参数的列表(在所有后续命令中,此数据将通过变量传输):
location="westindia" resource_group="servers" virt_network="servers__network" virt_network_range="10.0.0.0/16" subnet="default" subnet_range="10.0.0.0/24" user="username" ssh_key="ssh-public-key" name="server-01" image="UbuntuLTS" ip="10.0.0.101" interface_suffix="__ip-private-01" disk_suffix="__disk-01" size="Standard_B1s"
创建一个资源组:
az group create --location ${location} --name ${resource_group}
创建一个虚拟网络和子网:
az network vnet create --location ${location} --resource-group ${resource_group} --name ${virt_network} --address-prefixes ${virt_network_range}
az network vnet subnet create --resource-group ${resource_group} --vnet-name ${virt_network} --name ${subnet} --address-prefix ${subnet_range}
创建一个网络接口:
az network nic create --resource-group ${resource_group} --location ${location} --name ${name}${interface_suffix} --subnet ${subnet} --vnet-name ${virt_network} --private-ip-address ${ip}
创建一个虚拟虚拟机:
az vm create --name ${name} --admin-username ${user} --ssh-key-value "${ssh_key}" --resource-group ${resource_group} --location ${location} --image ${image} --size ${size} --nics ${name}${interface_suffix} --storage-sku ${storage_type}
标准化磁盘:
az vm stop --name ${name} --resource-group ${resource_group} disk_old=$(az vm get-instance-view --name ${name} --resource-group ${resource_group} | grep -o "${name}_OsDisk[0-9a-z\_]\{1,\}" | head -1) az disk create --location ${location} --resource-group ${resource_group} --name ${name}${disk_suffix} --source ${disk_old} --sku ${storage_type}
我们删除虚拟机并部署工作机:
az vm delete --name ${name} --resource-group ${resource_group} --yes az vm create --name ${name} --resource-group ${resource_group} --location ${location} --size ${size} --nics ${name}${interface_suffix} --attach-os-disk ${name}${disk_suffix} --os-type Linux ${availability_set_as_option}
删除虚拟磁盘:
az disk delete --resource-group ${resource_group} --name ${disk_old} --yes
自动化技术
为了自动化在Microsoft Azure云中部署虚拟机的过程,我将上述所有命令组合到一个bash脚本azure-create-vm.sh中,该脚本可从
Github中获取 。 在任何文本编辑器中打开脚本,输入数据,然后通过按几个键即可使用漂亮的名称部署虚拟机。