Alibaba Cloud ECS SDK를 사용하여 선점형 인스턴스를 합리적이고 빠르게 생성하고 관리하는 방법
이 기사의 내용은 Alibaba Cloud ECS SDK를 사용하여 선점형 인스턴스를 합리적이고 빠르게 생성하고 관리하는 방법에 대한 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다. . 돕다.
선점형 인스턴스 관리
준비
작업을 수행하기 전에 필요 사항:
비즈니스 요구 사항을 충족할 수 있는 인스턴스 사양과 지역을 이해하세요.
Alibaba Cloud ECS SDK의 기본 지식과 호출 방법을 숙지하세요. 자세한 내용은 SDK 사용 지침을 참조하세요.
참고:
선점형 인스턴스 코드에는 ECS SDK 버전 4.2.0 이상이 필요합니다. Java POM 종속성을 예로 들어 pom 종속성을 수정하고 도입합니다.
<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>
지역 및 사용 가능한 인스턴스 사양 쿼리#🎜 🎜##🎜 🎜#OpenAPI 설명 영역을 사용하여 선점형 인스턴스를 생성할 수 있는 지역과 사용 가능한 인스턴스 사양을 쿼리합니다. 샘플 코드는 아래와 같습니다.
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)); } }
{
"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"
]
}
]
}
선점형 인스턴스의 과거 가격 쿼리쿼리하려면 OpenAPI explainSpotPriceHistory 사용 선점형 인스턴스 지난 30일 동안의 인스턴스 가격 변동 데이터를 이용하여 가격 대비 성능이 가장 좋은 지역 및 사양 정보를 가져옵니다. 샘플 코드(DescribeSpotPriceHistorySample.java)는 다음과 같습니다.
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 { } } }
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
참고:
평균 가격과 최고 가격을 사용하여 선점형 인스턴스 구매를 수락할 수 있는지 여부를 결정하거나 보다 합리적인 데이터 모델을 사용하여 다음을 수행할 수 있습니다. 과거 가격 데이터를 분석하고, 생성된 리소스의 사양과 가용성 영역을 언제든지 조정하여 최고의 비용 효율성을 달성합니다.
선점형 인스턴스 생성 선점형 인스턴스를 생성하기 전에 다음을 완료해야 합니다. # 🎜🎜#
선점형 인스턴스를 생성하기 위해 커스텀 이미지를 사용하는 경우 커스텀 이미지를 생성했어야 합니다. 콘솔에서 보안 그룹을 생성하거나 OpenAPI CreateSecurityGroup을 사용하여 보안 그룹을 생성하고 보안 그룹 ID(SecurityGroupId)를 가져옵니다. VPC를 생성하고 콘솔에서 전환하거나 OpenAPI CreateVpc 및 CreateVSwitch를 사용하여 VPC를 생성하고 스위치 ID(VSwitchId)를 가져옵니다. OpenAPI CreateInstance를 사용하여 선점형 인스턴스를 만듭니다. 샘플 코드(CreateInstaneSample.java)는 다음과 같습니다.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()); } }
선점형 인스턴스가 가격 요인이나 시장 변화의 영향을 받을 수 있는 경우 수요와 공급으로 인해 재활용이 불가피해졌습니다. 이때 선점형 인스턴스의 인터럽트가 트리거됩니다. 해제하기 전에 선점형 인스턴스는 잠금 상태로 전환되어 인스턴스가 자동으로 재활용됨을 나타냅니다. 재활용 상태에 따라 인스턴스의 종료 로직을 자동화할 수 있습니다.
현재 다음 방법 중 하나를 통해 선점형 인스턴스의 인터럽트 잠금 상태를 얻을 수 있습니다. 인스턴스 메타데이터를 통해 가져옵니다. 다음 명령을 실행합니다.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; } } } }
재활용이 트리거될 때의 출력 결과는 다음과 같습니다.
instance:i-bp1ecbyds24ij63w146c-->lockReason:Recycling,vmStatus:Stopped spot instance will be recycled immediately, instance id:i-bp1ecbyds24ij63w146c
위 내용은 Alibaba Cloud ECS SDK를 사용하여 선점형 인스턴스를 합리적이고 빠르게 생성하고 관리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Apache를 시작하는 단계는 다음과 같습니다. Apache 설치 (명령 : Sudo apt-get Apache2를 설치하거나 공식 웹 사이트에서 다운로드) 시작 apache (linux : sudo systemctl start : windes (선택 사항, Linux : Sudo SystemCtl

Apache 80 포트가 점유되면 솔루션은 다음과 같습니다. 포트를 차지하고 닫는 프로세스를 찾으십시오. 방화벽 설정을 확인하여 Apache가 차단되지 않았는지 확인하십시오. 위의 방법이 작동하지 않으면 Apache를 재구성하여 다른 포트를 사용하십시오. Apache 서비스를 다시 시작하십시오.

Apache 서버를 다시 시작하려면 다음 단계를 따르십시오. Linux/MacOS : Sudo SystemCTL 실행 Apache2를 다시 시작하십시오. Windows : Net Stop Apache2.4를 실행 한 다음 Net Start Apache2.4를 시작하십시오. Netstat -A |를 실행하십시오 서버 상태를 확인하려면 Findstr 80.

다음과 같은 이유로 Apache가 시작할 수 없습니다. 구성 파일 구문 오류. 다른 응용 프로그램 포트와 충돌합니다. 권한 문제. 기억이 없습니다. 프로세스 교착 상태. 데몬 실패. Selinux 권한 문제. 방화벽 문제. 소프트웨어 충돌.

인터넷은 단일 운영 체제에 의존하지 않지만 Linux는 이에 중요한 역할을합니다. Linux는 서버 및 네트워크 장치에서 널리 사용되며 안정성, 보안 및 확장 성으로 인기가 있습니다.

Apache 취약점을 수정하는 단계는 다음과 같습니다. 1. 영향을받는 버전을 결정합니다. 2. 보안 업데이트를 적용합니다. 3. Apache를 다시 시작하십시오. 4. 수정을 확인하십시오. 5. 보안 기능을 활성화합니다.

Linux에서 Nginx를 시작하는 단계 : Nginx가 설치되어 있는지 확인하십시오. systemctl start nginx를 사용하여 nginx 서비스를 시작하십시오. SystemCTL을 사용하여 NGINX를 사용하여 시스템 시작시 NGINX의 자동 시작을 활성화하십시오. SystemCTL 상태 nginx를 사용하여 시작이 성공했는지 확인하십시오. 기본 환영 페이지를 보려면 웹 브라우저의 http : // localhost를 방문하십시오.

Nginx 서버를 시작하려면 다른 운영 체제에 따라 다른 단계가 필요합니다. Linux/Unix System : Nginx 패키지 설치 (예 : APT-Get 또는 Yum 사용). SystemCTL을 사용하여 nginx 서비스를 시작하십시오 (예 : Sudo SystemCtl start nginx). Windows 시스템 : Windows 바이너리 파일을 다운로드하여 설치합니다. nginx.exe 실행 파일을 사용하여 nginx를 시작하십시오 (예 : nginx.exe -c conf \ nginx.conf). 어떤 운영 체제를 사용하든 서버 IP에 액세스 할 수 있습니다.
