一、概念
1、订阅
可以使用订阅为组织内的团队提供访问开发环境(即测试、生产、开发、临时部署等)和项目的权限。针对每个应用程序环境创建不同的订阅,并为每个订阅分配不同的服务管理员帐户,这是保护每个环境安全的一个好方法。订阅可以与任意数目的服务相关联,而帐户所有者则能在其帐户中创建订阅,并能为每个订阅分配服务管理员帐户。
2、资源组
一个容器,用于保存 Azure 解决方案的相关资源。 资源组包括你想要作为一个组进行管理的那些资源。 根据对组织有利的原则,决定如何将资源分配到资源组。
3、Compute(计算)
虚拟机,仅包含CPU与内存。
4、网络接口
网络接口 (NIC) 是 VM 与虚拟网络 (VNet) 之间互相连接的桥梁。 VM 必须至少有一个 NIC,但可以根据所创建 VM 的大小包含多个 NIC。 了解 Windows 或 Linux 的每个 VM 大小支持的 NIC 数。
5、IP 地址
可将以下类型的 IP 地址分配到 Azure 中的 NIC:
公共 IP 地址:用来与 Internet 以及未连接到 VNet 的其他 Azure 资源进行入站和出站通信(不提供网络地址转换 (NAT))。 向 NIC 分配公共 IP 地址是可选操作。 公共 IP 地址会产生少许费用,并且每个订阅可使用的最大公共 IP 地址数目有限制。
专用 IP 地址:用于在 VNet、本地网络和 Internet 中通信(提供 NAT)。 必须至少将一个专用 IP 地址分配给 VM。 若要详细了解 Azure 中的 NAT,请阅读了解 Azure 中的出站连接。
可将公共 IP 地址分配到 VM 或面向 Internet 的负载均衡器。 可将专用 IP 地址分配到 VM 和内部负载均衡器。 可以使用网络接口将 IP 地址分配给 VM。
6、虚拟网络和子网
子网是 VNet 中的一系列 IP 地址。 可将一个 VNet 划分为多个子网,以便于组织和提高安全性。 VM 中的每个 NIC 连接到一个 VNet 中的一个子网。 连接到 VNet 中的子网(不管是相同的子网还是不同的子网)的 NIC 可以互相通信,不需任何额外的配置。
设置 VNet 时,需指定拓扑,包括可用的地址空间和子网。 如果 VNet 要连接到其他 VNet 或本地网络,则必须选择不重叠的地址范围。 这些 IP 地址是专用的,无法从 Internet 访问,这种限制在过去只适用于不可路由的 IP 地址,例如 10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16。 现在,Azure 将所有地址范围都视为只能在 VNet 内部、互连 VNet 内部以及从本地位置访问的专用 VNet IP 地址空间的一部分。
二、虚拟机创建方式
门户、PowerShell、Azure CLI、REST API 或客户端 SDK
三、创建虚拟流程
1、注册账号
2、登录AZURE
3、创建订阅
4、创建资源组
5、创建虚拟机
附:登录Azure CLI
附:门户
四、Java SDK
有关使用用于 Java 的 Azure 库进行开发的模式和最佳做法
1、Maven依赖
<dependency><groupId>com.microsoft.azure</groupId><artifactId>azure</artifactId><version>1.3.0</version>
</dependency>
2、AZURE会话
- subscription:使用 Azure CLI 2.0 中源自
az account show
的 id 值。 - client:使用从服务主体(创建用来运行应用程序)获取的输出中的 appId 值。 如果没有用于应用的服务主体,请使用 Azure CLI 2.0 创建一个。
- key:使用服务主体 create CLI 输出中的 password 值
- tenant:使用服务主体 create CLI 输出中的 tenant 值
public static Azure getAzure(){String clientId = "your appId";String tenant = "your tenant";String password = "your password";String subscription = "your subscription";ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(clientId,
tenant, password, AzureEnvironment.AZURE);return Azure.configure().withLogLevel(LogLevel.NONE).authenticate(credentials).withSubscription(subscription);}
3、创建虚拟机
VirtualMachine linuxVM = azure.virtualMachines().define("testLinuxVM").withRegion(Region.CHINA_NORTH).withNewResourceGroup("sampleVmResourceGroup").withNewPrimaryNetwork("10.0.0.0/24").withPrimaryPrivateIpAddressDynamic().withoutPrimaryPublicIpAddress().withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS).withRootUsername(userName).withSsh(sshKey).withUnmanagedDisks().withSize(VirtualMachineSizeTypes.Standard_A1).create();
4、创建虚拟机(挂载系统磁盘,静态公网IP,数据盘)
public static void main(String[] args){String usename = "zhangsan";String password = "AZa1234567890@";String osDiskName = "first-os-disk";String dataDiskName = "first-data-disk";String region = "westus";String resourceGroup = "first-resource-group";String vhdImage = "https://XXimage.blob.core.windows.net/images/CentOS_7.3_64.vhd";String vmName = "first-vm" ;String ipName = "first-ip";String networkName = "first-network";String subNet = "first-subnet";String vmType = "Standard_A0";int osDiskSize = 30;int dataDiskSize =500;//普通盘//DiskSkuTypes osSkuTypes = DiskSkuTypes.fromStorageAccountType(StorageAccountTypes.STANDARD_LRS);//StorageAccountTypes osDiskType = StorageAccountTypes.STANDARD_LRS;Azure azure = getAzure();//根据VHD创建系统盘/*Disk osDisk = azure.disks().define(osDiskName).withRegion(region).withExistingResourceGroup(resourceGroup).withLinuxFromVhd(vhdImage).withSizeInGB(osDiskSize).withSku(osSkuTypes).create();*///静态公网IP延迟创建Creatable<PublicIPAddress> publicIPAddressCreatable = azure.publicIPAddresses().define(ipName).withRegion(region).withExistingResourceGroup(resourceGroup).withStaticIP();//数据盘DiskSkuTypes diskSkuTypes = DiskSkuTypes.fromStorageAccountType(StorageAccountTypes.STANDARD_LRS);Creatable<Disk> dataDiskCreatable = azure.disks().define(dataDiskName).withRegion(region).withExistingResourceGroup(resourceGroup).withData().withSizeInGB(dataDiskSize).withSku(diskSkuTypes);//存在网络//Network network = azure.networks().getByResourceGroup(resourceGroup,networkName);VirtualMachine vm = azure.virtualMachines().define(vmName).withRegion(region)//.withNewResourceGroup(resourceGroup).withExistingResourceGroup(resourceGroup).withNewPrimaryNetwork("10.0.6.0/24")//.withExistingPrimaryNetwork(network)//.withSubnet(subNet).withPrimaryPrivateIPAddressDynamic().withNewPrimaryPublicIPAddress(publicIPAddressCreatable)//.withoutPrimaryPublicIPAddress().withPopularLinuxImage(KnownLinuxVirtualMachineImage.CENTOS_7_2)//.withSpecializedOSDisk(osDisk, OperatingSystemTypes.LINUX).withNewDataDisk(diskCreatable)//.withOSDiskStorageAccountType(osDiskType)//.withOSDiskName(osDiskName)//.withOSDiskSizeInGB(osDiskSize).withRootUsername(usename).withRootPassword(password).withNewDataDisk(dataDiskCreatable).withSize(vmType).create();}
5、删除虚拟机(虚拟删除不会删除关联的资源)
String resourceGroup = "first-resource-group";String vmName = "first-vm" ;String vmId = "xxxx";VirtualMachine vm = azure.virtualMachines()//.getByResourceGroup(resourceGroup,vmName).getById(vmId);vm.deallocate();//停机,释放资源azure.virtualMachines().deleteById(vm.vmId());azure.disks().deleteById(vm.osDiskId());for(VirtualMachineDataDisk disk: vm.dataDisks().values()){azure.disks().deleteById(disk.id());}azure.networkInterfaces().deleteById(vm.getPrimaryNetworkInterface().id());azure.publicIPAddresses().deleteById(vm.getPrimaryPublicIPAddressId());
6、查询虚拟机
虚拟机信息
//单一查询
VirtualMachine vm = azure.virtualMachines().getById(id);
//批量查询
PagedList<VirtualMachine> vms = azure.virtualMachines().list();
for (VirtualMachine vm : vms) {System.out.println("Found virtual machine with ID " + vm.id());
}
查询状态
VirtualMachine vm = azure.virtualMachines().getById(id);
PowerState powerState = vm.powerState();
boolean isRun = powerState == PowerState.RUNNING;
boolean isStoped = powerState == PowerState.STOPPED;
boolean isStoping = powerState == PowerState.STOPPING;
boolean isStarting = powerState == PowerState.STARTING;
查询磁盘
public static void get (){String id = "xxx";Azure azure = getAzure();VirtualMachine vm = azure.virtualMachines().getById(id);//系统盘Disk osDisk = azure.disks().getById(vm.osDiskId());//数据盘List<VirtualMachineDataDisk> dataDisk = vm.dataDisks().values().stream().collect(Collectors.toList());}
7、虚拟机操作
VirtualMachine vm = azure.virtualMachines().getById(id);
vm.start();//启动
vm.powerOff();//停止
vm.restart();//重启
8、更新虚拟信息
VirtualMachine vm = azure.virtualMachines().getById(id);
NetworkInterface networkInterface = vm.getPrimaryNetworkInterface();
//设置私有ip为静态
networkInterface .update().withPrimaryPrivateIPAddressStatic(net.primaryPrivateIP()).apply();
//设置系统盘大小以及设置机型vm.update().withOSDiskSizeInGB(50).withSize("Standard_D2_v2").apply();
五、REST API
Azure REST API参考
OAuth 2.0 代码授权
虚拟机API