


How to use Alibaba Cloud ECS SDK to create and manage preemptible instances reasonably and quickly
The content of this article is about how to use Alibaba Cloud ECS SDK to create and manage preemptible instances reasonably and quickly. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you. .
Manage preemptible instances
Preparation
##Before performing the operation, you need: Learn about the instance specifications and regions that meet your business requirements. Be familiar with the basic knowledge and calling methods of Alibaba Cloud ECS SDK. For details, please refer to the SDK usage instructions. Note: The preemptible instance code requires ECS SDK version 4.2.0 or above. Taking the Java POM dependency as an example, modify and introduce the pom dependency:<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-ecs</artifactId> <version>4.2.0</version> </dependency>
Query the region and available instance specifications
Use the OpenAPI DescribeZones query to create The region and available instance specifications of preemptible instances. Sample code is shown below.OpenApiCaller.java public class OpenApiCaller { IClientProfile profile; IAcsClient client; public OpenApiCaller() { profile = DefaultProfile.getProfile("cn-hangzhou", AKSUtil.accessKeyId, AKSUtil.accessKeySecret); client = new DefaultAcsClient(profile); } public <T extends AcsResponse> T doAction(AcsRequest<T> var1) { try { return client.getAcsResponse(var1); } catch (Throwable e) { e.printStackTrace(); return null; } } } DescribeZonesSample.java public class DescribeZonesSample { public static void main(String[] args) { OpenApiCaller caller = new OpenApiCaller(); DescribeZonesRequest request = new DescribeZonesRequest(); request.setRegionId("cn-zhangjiakou");//可以通过 DescribeRegionsRequest 获取每个地域的 RegionId request.setSpotStrategy("SpotWithPriceLimit");//对于查询是否可购买抢占式实例此项必填 request.setInstanceChargeType("PostPaid");//后付费模式,抢占式实例必须是后付费模式 DescribeZonesResponse response = caller.doAction(request); System.out.println(JSON.toJSONString(response)); } }
The following is the output result. You can view the available instance specifications, disk types, network types and other information for each region.
{ "requestId": "388D6321-E587-470C-8CFA-8985E2963DAE", "zones": [ { "localName": "华北 3 可用区 A", "zoneId": "cn-zhangjiakou-a", "availableDiskCategories": [ "cloud_ssd", "cloud_efficiency" ], "availableInstanceTypes": [ "ecs.e4.large", "ecs.n4.4xlarge", "ecs.sn2.medium", "ecs.i1.2xlarge", "ecs.se1.2xlarge", "ecs.n4.xlarge", "ecs.se1ne.2xlarge", "ecs.se1.large", "ecs.sn2.xlarge", "ecs.se1ne.xlarge", "ecs.xn4.small", "ecs.sn2ne.4xlarge", "ecs.se1ne.4xlarge", "ecs.sn1.medium", "ecs.n4.8xlarge", "ecs.mn4.large", "ecs.e4.2xlarge", "ecs.mn4.2xlarge", "ecs.mn4.8xlarge", "ecs.n4.2xlarge", "ecs.e4.xlarge", "ecs.sn2ne.large", "ecs.sn2ne.xlarge", "ecs.sn1ne.large", "ecs.n4.large", "ecs.sn1.3xlarge", "ecs.e4.4xlarge", "ecs.sn1ne.2xlarge", "ecs.e4.small", "ecs.i1.4xlarge", "ecs.se1.4xlarge", "ecs.sn2ne.2xlarge", "ecs.sn2.3xlarge", "ecs.i1.xlarge", "ecs.n4.small", "ecs.sn1ne.4xlarge", "ecs.mn4.4xlarge", "ecs.sn1ne.xlarge", "ecs.se1ne.large", "ecs.sn2.large", "ecs.i1-c5d1.4xlarge", "ecs.sn1.xlarge", "ecs.sn1.large", "ecs.mn4.small", "ecs.mn4.xlarge", "ecs.se1.xlarge" ], "availableResourceCreation": [ "VSwitch", "IoOptimized", "Instance", "Disk" ], "availableResources": [ { "dataDiskCategories": [ "cloud_ssd", "cloud_efficiency" ], "instanceGenerations": [ "ecs-3", "ecs-2" ], "instanceTypeFamilies": [ "ecs.mn4", "ecs.sn1", "ecs.sn2", "ecs.sn1ne", "ecs.xn4", "ecs.i1", "ecs.se1", "ecs.e4", "ecs.n4", "ecs.se1ne", "ecs.sn2ne" ], "instanceTypes": [ "ecs.n4.4xlarge", "ecs.sn2.medium", "ecs.i1.2xlarge", "ecs.se1.2xlarge", "ecs.n4.xlarge", "ecs.se1ne.2xlarge", "ecs.se1.large", "ecs.sn2.xlarge", "ecs.se1ne.xlarge", "ecs.xn4.small", "ecs.sn2ne.4xlarge", "ecs.se1ne.4xlarge", "ecs.sn1.medium", "ecs.n4.8xlarge", "ecs.mn4.large", "ecs.mn4.2xlarge", "ecs.mn4.8xlarge", "ecs.n4.2xlarge", "ecs.sn2ne.large", "ecs.sn2ne.xlarge", "ecs.sn1ne.large", "ecs.n4.large", "ecs.sn1.3xlarge", "ecs.sn1ne.2xlarge", "ecs.e4.small", "ecs.i1.4xlarge", "ecs.se1.4xlarge", "ecs.sn2ne.2xlarge", "ecs.sn2.3xlarge", "ecs.i1.xlarge", "ecs.n4.small", "ecs.sn1ne.4xlarge", "ecs.mn4.4xlarge", "ecs.sn1ne.xlarge", "ecs.se1ne.large", "ecs.sn2.large", "ecs.i1-c5d1.4xlarge", "ecs.sn1.xlarge", "ecs.sn1.large", "ecs.mn4.small", "ecs.mn4.xlarge", "ecs.se1.xlarge" ], "ioOptimized": true, "networkTypes": [ "vpc" ], "systemDiskCategories": [ "cloud_ssd", "cloud_efficiency" ] } ], "availableVolumeCategories": [ "san_ssd", "san_efficiency" ] } ] }
Query the historical price of a preemptible instance
Use OpenAPI DescribeSpotPriceHistory to query the price change data of a preemptible instance in the last 30 days. To obtain the region and specification information with the best price/performance ratio, the sample code (DescribeSpotPriceHistorySample.java) is as follows.public class DescribeSpotPriceHistorySample { public static void main(String[] args) { OpenApiCaller caller = new OpenApiCaller(); List<DescribeSpotPriceHistoryResponse.SpotPriceType> result = new ArrayList<DescribeSpotPriceHistoryResponse.SpotPriceType>(); int offset = 0; while (true) { DescribeSpotPriceHistoryRequest request = new DescribeSpotPriceHistoryRequest(); request.setRegionId("cn-hangzhou"); //可以通过 DescribeRegionsRequest 获取可购买的每个地域的 RegionId request.setZoneId("cn-hangzhou-b");//可用区必填 request.setInstanceType("ecs.sn2.medium");//参考 DescribeZones 返回的实例类型,必填 request.setNetworkType("vpc");//参考 DescribeZones 返回的网络类型,必填 // request.setIoOptimized("optimized"); //是否 I/O 优化类型,DescribeZones 返回的 IoOptimized,选填 // request.setStartTime("2017-09-20T08:45:08Z");//价格开始时间,选填,默认 3 天内数据 // request.setEndTime("2017-09-28T08:45:08Z");//价格结束时间,选填 request.setOffset(offset); DescribeSpotPriceHistoryResponse response = caller.doAction(request); if (response != null && response.getSpotPrices() != null) { result.addAll(response.getSpotPrices()); } if (response.getNextOffset() == null || response.getNextOffset() == 0) { break; } else { offset = response.getNextOffset(); } } if (!result.isEmpty()) { for (DescribeSpotPriceHistoryResponse.SpotPriceType spotPriceType : result) { System.out.println(spotPriceType.getTimestamp() + "---> spotPrice:" + spotPriceType.getSpotPrice() + "----> originPrice:" + spotPriceType.getOriginPrice()); } System.out.println(result.size()); } else { } } }
The following are examples of returned results.
2017-09-26T06:28:55Z--->spotPrice:0.24---->originPrice:1.2 2017-09-26T14:00:00Z--->spotPrice:0.36---->originPrice:1.2 2017-09-26T15:00:00Z--->spotPrice:0.24---->originPrice:1.2 2017-09-27T14:00:00Z--->spotPrice:0.36---->originPrice:1.2 2017-09-27T15:00:00Z--->spotPrice:0.24---->originPrice:1.2 2017-09-28T14:00:00Z--->spotPrice:0.36---->originPrice:1.2 2017-09-28T15:00:00Z--->spotPrice:0.24---->originPrice:1.2 2017-09-29T06:28:55Z--->spotPrice:0.24---->originPrice:1.2
Create a preemptible instance
Before creating a preemptible instance, you need to complete the following work:If you use To create a preemptible instance from a custom image, you must have created a custom image. Create a security group in the console, or use OpenAPI CreateSecurityGroup to create a security group and obtain the security group ID (SecurityGroupId). Create a VPC and switch in the console, or use OpenAPI CreateVpc and CreateVSwitch to create it, and get the switch ID (VSwitchId). Use OpenAPI CreateInstance to create a preemptible instance. The sample code (CreateInstaneSample.java) is as follows.public class CreateInstaneSample { public static void main(String[] args) { OpenApiCaller caller = new OpenApiCaller(); CreateInstanceRequest request = new CreateInstanceRequest(); request.setRegionId("cn-hangzhou");//地域 ID request.setZoneId("cn-hangzhou-b"); //可用区ID request.setSecurityGroupId("sg-bp11nhf94ivkdxwb2gd4");//提前创建的安全组 ID request.setImageId("centos_7_03_64_20G_alibase_20170818.vhd"); //建议选择您自己在该地域准备的自定义镜像 request.setVSwitchId("vsw-bp164cyonthfudn9kj5br");//VPC 类型需要交换机 ID request.setInstanceType("ecs.sn2.medium"); //填入您询价后需要购买的规格 request.setIoOptimized("optimized");//参考 DescirbeZones 返回参数 request.setSystemDiskCategory("cloud_ssd"); //参考 DescirbeZones 返回参数,多选一 cloud_ssd, cloud_efficiency, cloud request.setSystemDiskSize(40); request.setInstanceChargeType("PostPaid");//抢占式实例必须后付费 request.setSpotStrategy("SpotWithPriceLimit"); //SpotWithPriceLimit 出价模式,SpotAsPriceGo 不用出价,最高按量付费价格 request.setSpotPriceLimit(0.25F);//SpotWithPriceLimit 出价模式生效,您能接受的最高价格,单位为元每小时,必须高于当前的市场成交价才能成功 CreateInstanceResponse response = caller.doAction(request); System.out.println(response.getInstanceId()); } }
Recycling of preemptible instances
When preemptible instances may be forcibly recycled due to price factors or changes in market supply and demand. At this time, the interrupt of the preemptible instance will be triggered. Before releasing, the preemptible instance will enter the locked state, indicating that the instance will be automatically recycled. You can automate the exit logic for an instance based on its recycling status. Currently, you can obtain the interrupt lock status of a preemptible instance through any of the following methods: Get it through instance metadata. Run the following command:curl 'http://100.100.100.200/latest/meta-data/instance/spot/termination-time'
public class DescribeInstancesSample { public static void main(String[] args) throws InterruptedException { OpenApiCaller caller = new OpenApiCaller(); JSONArray allInstances = new JSONArray(); allInstances.addAll(Arrays.asList("i-bp18hgfai8ekoqwo0y2n", "i-bp1ecbyds24ij63w146c")); while (!allInstances.isEmpty()) { DescribeInstancesRequest request = new DescribeInstancesRequest(); request.setRegionId("cn-hangzhou"); request.setInstanceIds(allInstances.toJSONString());//指定实例 ID,效率最高 DescribeInstancesResponse response = caller.doAction(request); List<DescribeInstancesResponse.Instance> instanceList = response.getInstances(); if (instanceList != null && !instanceList.isEmpty()) { for (DescribeInstancesResponse.Instance instance : instanceList) { System.out.println ("result:instance:" + instance.getInstanceId() + ",az:" + instance.getZoneId()); if (instance.getOperationLocks() != null) { for (DescribeInstancesResponse.Instance.LockReason lockReason : instance.getOperationLocks()) { System.out.println("instance:" + instance.getInstanceId() + "--> lockReason:" + lockReason.getLockReason() + ",vmStatus:" + instance.getStatus()); if ("Recycling".equals(lockReason.getLockReason())) { //do your action System.out.println("spot instance will be recycled immediately, instance id:" + instance.getInstanceId()); allInstances.remove(instance.getInstanceId()); } } } } System.out.print("try describeInstances again later ..."); Thread.sleep(2 * 60 * 1000); } else { break; } } } }
The output result when recycling is triggered is as follows:
instance:i-bp1ecbyds24ij63w146c-->lockReason:Recycling,vmStatus:Stopped spot instance will be recycled immediately, instance id:i-bp1ecbyds24ij63w146c
The above is the detailed content of How to use Alibaba Cloud ECS SDK to create and manage preemptible instances reasonably and quickly. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



DeepSeek is a powerful intelligent search and analysis tool that provides two access methods: web version and official website. The web version is convenient and efficient, and can be used without installation; the official website provides comprehensive product information, download resources and support services. Whether individuals or corporate users, they can easily obtain and analyze massive data through DeepSeek to improve work efficiency, assist decision-making and promote innovation.

There are many ways to install DeepSeek, including: compile from source (for experienced developers) using precompiled packages (for Windows users) using Docker containers (for most convenient, no need to worry about compatibility) No matter which method you choose, Please read the official documents carefully and prepare them fully to avoid unnecessary trouble.

Solution to permission issues when viewing Python version in Linux terminal When you try to view Python version in Linux terminal, enter python...

BITGet is a cryptocurrency exchange that provides a variety of trading services including spot trading, contract trading and derivatives. Founded in 2018, the exchange is headquartered in Singapore and is committed to providing users with a safe and reliable trading platform. BITGet offers a variety of trading pairs, including BTC/USDT, ETH/USDT and XRP/USDT. Additionally, the exchange has a reputation for security and liquidity and offers a variety of features such as premium order types, leveraged trading and 24/7 customer support.

Gate.io is a popular cryptocurrency exchange that users can use by downloading its installation package and installing it on their devices. The steps to obtain the installation package are as follows: Visit the official website of Gate.io, click "Download", select the corresponding operating system (Windows, Mac or Linux), and download the installation package to your computer. It is recommended to temporarily disable antivirus software or firewall during installation to ensure smooth installation. After completion, the user needs to create a Gate.io account to start using it.

Ouyi OKX, the world's leading digital asset exchange, has now launched an official installation package to provide a safe and convenient trading experience. The OKX installation package of Ouyi does not need to be accessed through a browser. It can directly install independent applications on the device, creating a stable and efficient trading platform for users. The installation process is simple and easy to understand. Users only need to download the latest version of the installation package and follow the prompts to complete the installation step by step.

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Ouyi, also known as OKX, is a world-leading cryptocurrency trading platform. The article provides a download portal for Ouyi's official installation package, which facilitates users to install Ouyi client on different devices. This installation package supports Windows, Mac, Android and iOS systems. Users can choose the corresponding version to download according to their device type. After the installation is completed, users can register or log in to the Ouyi account, start trading cryptocurrencies and enjoy other services provided by the platform.
