Alibaba Cloud menyediakan berbagai API dan SDK yang memungkinkan Anda membuat serta mengelola Elastic Compute Service (ECS) instance secara terprogram. Hal ini meningkatkan efisiensi bisnis dan mendukung otomatisasi sistem. Topik ini menjelaskan cara menggunakan ECS SDK 2.0 untuk Java untuk membuat Instance ECS, menjalankan perintah pada Instance ECS melalui operasi API Cloud Assistant, dan melepaskan sumber daya.
Persiapan
Buat pasangan AccessKey untuk Pengguna Resource Access Management (RAM). Akun Alibaba Cloud memiliki semua izin pada sumber daya. Jika pasangan AccessKey akun Alibaba Cloud Anda bocor, sumber daya Anda akan terpapar risiko besar. Kami menyarankan Anda menggunakan pasangan AccessKey dari pengguna RAM. Untuk informasi tentang cara membuat pasangan AccessKey untuk pengguna RAM, lihat Buat pasangan AccessKey.
Berikan izin yang diperlukan pada sumber daya ECS dan Virtual Private Cloud (VPC) kepada pengguna RAM yang ingin Anda gunakan. Contoh kode yang disediakan dalam topik ini membuat sumber daya seperti Instance ECS, VPC, dan vSwitch. Untuk memberikan izin yang diperlukan agar contoh kode dapat dijalankan, kami menyarankan Anda melampirkan kebijakan yang dijelaskan dalam tabel berikut kepada pengguna RAM.
Layanan Alibaba Cloud
Kebijakan
VPC
AliyunVPCFullAccess
ECS
AliyunECSFullAccess
Konfigurasikan pasangan AccessKey dari pengguna RAM yang ingin Anda gunakan dalam variabel lingkungan. Contoh kode yang disediakan dalam topik ini membaca pasangan AccessKey dari variabel lingkungan dan menggunakan pasangan AccessKey tersebut sebagai kredensial untuk mengakses layanan Alibaba Cloud. Untuk informasi tentang cara mengonfigurasi pasangan AccessKey dalam variabel lingkungan, lihat Konfigurasikan variabel lingkungan di Linux, macOS, dan Windows.
Dapatkan ECS SDK 2.0 untuk Java dan VPC SDK 2.0 untuk Java. Dalam topik ini, ECS SDK 2.0 untuk Java dan VPC SDK 2.0 untuk Java diinstal dengan menambahkan dependensi Maven. Untuk informasi tentang metode instalasi lainnya, lihat Install ECS SDK for Java dan Install VPC SDK for Java.
Buat Instance ECS
Beberapa parameter, seperti ID vSwitch, ID grup keamanan, dan ID gambar, diperlukan untuk membuat Instance ECS. Anda dapat memasukkan ID sumber daya yang ada atau memanggil operasi API untuk membuat sumber daya baru.
Buat VPC
VPC adalah jaringan pribadi khusus di cloud. Anda dapat mengonfigurasi dan mengelola VPC sebagai jaringan yang diisolasi secara logis di cloud publik.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah tempat VPC dibuat. Contoh: cn-hangzhou.
CidrBlock
Blok CIDR dari VPC. Contoh: 192.168.0.0/16.
Kueri detail VPC.
Setelah Anda memanggil operasi CreateVpc untuk membuat VPC, Anda dapat memanggil operasi API untuk menanyakan status VPC. Jika VPC berada dalam keadaan Tersedia, panggil operasi API untuk melakukan langkah-langkah selanjutnya.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah VPC. Contoh: cn-hangzhou.
VpcId
ID VPC. Contoh: vpc-bp1aag0sb9s4i92i3****.
Buat vSwitch
vSwitch adalah perangkat switching jaringan dalam VPC, yang mendukung fungsi switch fisik. Ini berfungsi untuk memungkinkan komunikasi antara mesin virtual (VM) dan antara VM dan jaringan fisik.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah tempat vSwitch dibuat. Contoh: cn-hangzhou.
ZoneId
ID zona tempat vSwitch dibuat. Contoh: cn-hangzhou-i.
VpcId
ID VPC tempat Anda ingin membuat vSwitch. Contoh: vpc-bp1aag0sb9s4i92i3****.
CidrBlock
Blok CIDR dari vSwitch. Contoh: 192.168.0.0/24.
Buat grup keamanan.
Grup keamanan bertindak sebagai firewall virtual yang mengontrol lalu lintas masuk dan keluar untuk Instance ECS.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah tempat grup keamanan dibuat. Contoh: cn-hangzhou.
VpcId
ID VPC tempat grup keamanan dibuat. Contoh: vpc-bp1aag0sb9s4i92i3****.
Buat aturan masuk dalam grup keamanan.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah grup keamanan. Contoh: cn-hangzhou.
SecurityGroupId
ID grup keamanan. Contoh: sg-bp1esyhwfbqeyudt****.
IpProtocol
Protokol. Contoh: tcp.
SourceCidrIp
Blok IPv4 CIDR sumber. Contoh: 0.0.0.0/0.
PortRange
Rentang port. Contoh:
Instance Linux: 22/22.
Instance Windows: 3389/3389.
Buat pasangan kunci SSH.
Alibaba Cloud menyediakan metode autentikasi berbasis pasangan kunci SSH yang aman dan nyaman untuk login ke Instance ECS. Pasangan kunci digunakan untuk autentikasi dan komunikasi terenkripsi melalui protokol SSH. Pasangan kunci SSH memungkinkan Anda login jarak jauh ke Instance ECS tanpa kata sandi.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah instance. Contoh: cn-hangzhou.
KeyPairName
Nama pasangan kunci SSH. Contoh: sdk-key-pair.
Buat Instance ECS.
ECS menyediakan kapasitas komputasi berperforma tinggi, aman, dan hemat biaya serta cocok untuk berbagai skenario seperti hosting situs web, pengembangan aplikasi, dan pemrosesan data. Dengan ECS, Anda dapat dengan cepat menerapkan dan menjalankan aplikasi serta menyesuaikan sumber daya secara fleksibel sesuai dengan perubahan bisnis.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah tempat Instance ECS dibuat. Contoh: cn-hangzhou.
ImageId
ID gambar. Kami menyarankan Anda memilih gambar Alibaba Cloud Linux dengan ID aliyun_3_x64_20G_scc_alibase_20220225.vhd.
InstanceType
Jenis instance. Contoh: ecs.e-c1m2.xlarge.
SecurityGroupId
ID grup keamanan. Contoh: sg-bp1esyhwfbqeyudt****.
VSwitchId
ID vSwitch. Contoh: vsw-bp1nzprm8h7mmnl8t****.
InstanceName
Nama Instance ECS. Contoh: sdk-test.
InstanceChargeType
Metode penagihan Instance ECS. Untuk membuat instance bayar sesuai pemakaian, atur parameter ini ke PostPaid.
CatatanPastikan saldo akun Anda mencukupi.
KeyPairName
Nama pasangan kunci SSH. Contoh: sdk-key-pair.
SystemDisk.Category
Kategori disk sistem. Contoh: cloud_essd.
Kueri status Instance ECS.
Setelah Anda memanggil operasi RunInstances untuk membuat Instance ECS, Instance ECS membutuhkan waktu sekitar 10 detik untuk menginisialisasi. Anda hanya dapat login ke Instance ECS menggunakan metode koneksi untuk melakukan operasi dan menerapkan aplikasi ketika instance berada dalam keadaan Berjalan. Anda dapat memanggil operasi API yang dijelaskan dalam tabel berikut untuk menanyakan status Instance ECS.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah Instance ECS. Contoh: cn-hangzhou.
InstanceId
ID Instance ECS. Contoh: ["i-bp17f3kzgtzzj91r****"].
Kode contoh lengkap:
import com.aliyun.ecs20140526.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.vpc20160428.models.CreateVSwitchRequest;
import com.aliyun.vpc20160428.models.CreateVSwitchResponse;
import com.aliyun.vpc20160428.models.CreateVpcRequest;
import com.aliyun.vpc20160428.models.CreateVpcResponse;
import com.aliyun.vpc20160428.models.DescribeVpcsRequest;
import java.util.ArrayList;
import java.util.List;
public class EcsDemo {
public static void main(String[] args) {
String vpcId = null;
String vSwitchId = null;
String securityGroupId = null;
String instanceId = null;
com.aliyun.vpc20160428.Client vpcClient = null;
com.aliyun.ecs20140526.Client ecsClient = null;
try {
vpcClient = createVpcClient();
ecsClient = createEcsClient();
// Buat VPC.
vpcId = createVpc(vpcClient);
System.out.println("VPC berhasil dibuat, vpcId :" + vpcId);
// Lakukan langkah-langkah berikutnya hanya jika VPC dalam keadaan Tersedia.
while (true) {
String status = describeVpc(vpcId, vpcClient);
if ("Available".equals(status)) {
break;
}
}
// Buat vSwitch.
vSwitchId = CreateVSwitch(vpcId, vpcClient);
System.out.println("vSwitch berhasil dibuat, vSwitchId :" + vSwitchId);
// Buat grup keamanan.
securityGroupId = createSecurityGroup(vpcId, ecsClient);
System.out.println("Grup Keamanan berhasil dibuat, securityGroupId :" + securityGroupId);
// Buat aturan masuk dalam grup keamanan.
authorizeSecurityGroup(securityGroupId, ecsClient);
// Buat pasangan kunci SSH. Anda harus menyimpan pasangan kunci SSH untuk login nanti ke Instance ECS.
CreateKeyPairResponse keyPair = createKeyPair(ecsClient);
System.out.println("Pasangan Kunci berhasil dibuat, keyPairName :" + keyPair.body.keyPairName);
// Buat Instance ECS. Jika Instance ECS dalam keadaan Berjalan, instance tersebut sedang berjalan.
instanceId = createInstance(ecsClient, vSwitchId, securityGroupId);
System.out.println("ECS berhasil dibuat, instanceId :" + instanceId);
while (true) {
List<String> instanceIds = new ArrayList<>();
instanceIds.add(instanceId);
DescribeInstanceStatusResponse describeInstanceStatus = describeInstanceStatus(instanceIds, ecsClient);
List<DescribeInstanceStatusResponseBody.DescribeInstanceStatusResponseBodyInstanceStatusesInstanceStatus> instanceStatusList = describeInstanceStatus.body.instanceStatuses.instanceStatus;
if (instanceStatusList != null && !instanceStatusList.isEmpty()) {
String status = instanceStatusList.get(0).status;
if ("Running".equals(status)) {
break;
}
}
}
} catch (Exception e) {
// Jika beberapa sumber daya dibuat tetapi sumber daya lain gagal dibuat, Anda harus menambahkan mekanisme seperti logging, rollback, dan kompensasi untuk menangani masalah dengan benar.
System.out.println(e.getMessage());
}
}
public static class Constants {
// Nama.
public static final String NAME = "sdk-test";
// Wilayah.
public static final String REGION_ID = "cn-hangzhou";
// Zona.
public static final String ZONE_ID = "cn-hangzhou-i";
// VPC dan vSwitch yang Anda buat.
public static final String CIDR_BLOCK_VPC = "192.168.0.0/16";
public static final String CIDR_BLOCK_VSWITCH = "192.168.0.0/24";
// Gambar.
public static final String IMAGE_ID = "aliyun_3_x64_20G_scc_alibase_20220225.vhd";
// Jenis instance.
public static final String INSTANCE_TYPE = "ecs.e-c1m2.xlarge";
// Kategori disk.
public static final String SYSTEM_DISK_CATEGORY = "cloud_essd";
// Nama pasangan kunci SSH.
public static final String KEY_PAIR_NAME = "sdk-key-pair";
// Titik akhir layanan.
public static final class ENDPOINT {
public static final String VPC = "vpc.cn-hangzhou.aliyuncs.com";
public static final String ECS = "ecs.cn-hangzhou.aliyuncs.com";
}
// Metode penagihan instance.
public static final class INSTANCE_CHARGE_TYPE {
// Langganan
public static final String PRE_PAID = "PrePaid";
// Bayar sesuai pemakaian
public static final String POST_PAID = "PostPaid";
}
}
public static com.aliyun.vpc20160428.Client createVpcClient() throws Exception {
Config config = new Config();
config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = Constants.ENDPOINT.VPC;
return new com.aliyun.vpc20160428.Client(config);
}
public static com.aliyun.ecs20140526.Client createEcsClient() throws Exception {
Config config = new Config();
config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = Constants.ENDPOINT.ECS;
return new com.aliyun.ecs20140526.Client(config);
}
/**
* Buat VPC.
* Metode ini memanggil operasi API VPC Alibaba Cloud untuk membuat VPC dan mengembalikan ID VPC baru.
*
* @param vpcClient Klien VPC.
* @return ID VPC baru.
*/
public static String createVpc(com.aliyun.vpc20160428.Client vpcClient) {
try {
CreateVpcRequest createVpcRequest = new CreateVpcRequest()
.setRegionId(Constants.REGION_ID)
.setCidrBlock(Constants.CIDR_BLOCK_VPC)
.setVpcName(Constants.NAME);
CreateVpcResponse vpc = vpcClient.createVpc(createVpcRequest);
return vpc.body.vpcId;
} catch (Exception e) {
throw new RuntimeException("createVpc gagal: " + e.getMessage());
}
}
/**
* Buat vSwitch.
* Metode ini memanggil klien VPC Alibaba Cloud untuk membuat vSwitch. Metode ini mengirim permintaan yang mencakup parameter yang diperlukan dari vSwitch, seperti ID wilayah, ID zona,
* blok CIDR, ID VPC, dan nama vSwitch, serta mengembalikan ID vSwitch baru.
*
* @param vpcId ID VPC tempat Anda ingin membuat vSwitch.
* @param vpcClient Klien VPC.
* @return ID vSwitch baru.
*/
public static String CreateVSwitch(String vpcId, com.aliyun.vpc20160428.Client vpcClient) {
try {
CreateVSwitchRequest createVSwitchRequest = new CreateVSwitchRequest()
.setRegionId(Constants.REGION_ID)
.setZoneId(Constants.ZONE_ID)
.setCidrBlock(Constants.CIDR_BLOCK_VSWITCH)
.setVpcId(vpcId)
.setVSwitchName(Constants.NAME);
CreateVSwitchResponse vSwitch = vpcClient.createVSwitch(createVSwitchRequest);
return vSwitch.body.vSwitchId;
} catch (Exception e) {
throw new RuntimeException("CreateVSwitch gagal: " + e.getMessage());
}
}
/**
* Buat grup keamanan.
*
* @param vpcId ID VPC tempat Anda ingin membuat grup keamanan.
* @param ecsClient Klien ECS.
* @return ID grup keamanan baru.
*/
public static String createSecurityGroup(String vpcId, com.aliyun.ecs20140526.Client ecsClient) {
try {
CreateSecurityGroupRequest createSecurityGroupRequest = new CreateSecurityGroupRequest()
.setRegionId(Constants.REGION_ID)
.setVpcId(vpcId)
.setSecurityGroupName(Constants.NAME);
CreateSecurityGroupResponse securityGroup = ecsClient.createSecurityGroup(createSecurityGroupRequest);
return securityGroup.body.securityGroupId;
} catch (Exception e) {
throw new RuntimeException("createSecurityGroup gagal: " + e.getMessage());
}
}
/**
* Buat aturan masuk dalam grup keamanan.
* Sebagai contoh, buat aturan masuk yang mengizinkan akses TCP pada port SSH 22 dari mana saja (0.0.0.0/0).
*
* @param securityGroupId ID grup keamanan tempat Anda ingin membuat aturan masuk.
* @param ecsClient Klien ECS.
*/
public static void authorizeSecurityGroup(String securityGroupId, com.aliyun.ecs20140526.Client ecsClient) {
try {
AuthorizeSecurityGroupRequest.AuthorizeSecurityGroupRequestPermissions permission = new AuthorizeSecurityGroupRequest.AuthorizeSecurityGroupRequestPermissions()
.setIpProtocol("tcp")
.setPortRange("22/22")
.setSourceCidrIp("0.0.0.0/0");
List<AuthorizeSecurityGroupRequest.AuthorizeSecurityGroupRequestPermissions> permissions = new ArrayList<>();
permissions.add(permission);
AuthorizeSecurityGroupRequest authorizeSecurityGroupRequest = new AuthorizeSecurityGroupRequest()
.setRegionId(Constants.REGION_ID)
.setSecurityGroupId(securityGroupId)
.setPermissions(permissions);
ecsClient.authorizeSecurityGroup(authorizeSecurityGroupRequest);
} catch (Exception e) {
throw new RuntimeException("authorizeSecurityGroup gagal: " + e.getMessage());
}
}
/**
* Buat Instance ECS.
*
* @param ecsClient Klien ECS.
* @param vSwitchId ID vSwitch.
* @param securityGroupId ID grup keamanan.
* @return ID Instance ECS baru.
*/
public static String createInstance(com.aliyun.ecs20140526.Client ecsClient, String vSwitchId, String securityGroupId) {
try {
RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk()
.setCategory(Constants.SYSTEM_DISK_CATEGORY);
RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
.setRegionId(Constants.REGION_ID)
.setImageId(Constants.IMAGE_ID)
.setInstanceType(Constants.INSTANCE_TYPE)
.setSecurityGroupId(securityGroupId)
.setVSwitchId(vSwitchId)
.setInstanceChargeType(Constants.INSTANCE_CHARGE_TYPE.POST_PAID)
.setInstanceName(Constants.NAME)
.setInternetMaxBandwidthOut(1)
.setSystemDisk(systemDisk)
.setKeyPairName(Constants.KEY_PAIR_NAME);
RunInstancesResponse resp = ecsClient.runInstances(runInstancesRequest);
return resp.body.getInstanceIdSets().getInstanceIdSet().get(0);
} catch (Exception e) {
throw new RuntimeException("createInstance gagal: " + e.getMessage());
}
}
/**
* Buat pasangan kunci SSH.
*
* @param ecsClient Klien ECS.
* @return Objek respons untuk membuat pasangan kunci SSH.
*/
public static CreateKeyPairResponse createKeyPair(com.aliyun.ecs20140526.Client ecsClient) {
try {
// Buat objek permintaan untuk membuat pasangan kunci SSH dan tentukan ID wilayah, nama pasangan kunci, dan ID grup sumber daya dalam objek permintaan.
CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest()
.setRegionId(Constants.REGION_ID)
.setKeyPairName(Constants.KEY_PAIR_NAME);
// Gunakan klien ECS untuk mengirim permintaan untuk membuat pasangan kunci SSH dan kembalikan objek respons.
return ecsClient.createKeyPair(createKeyPairRequest);
} catch (Exception e) {
// Lempar pengecualian runtime yang mencakup pesan kesalahan jika pembuatan pasangan kunci SSH gagal.
throw new RuntimeException("createKeyPair gagal: " + e.getMessage());
}
}
/**
* Kueri status VPC.
*
* @param vpcId ID VPC.
* @param vpcClient Klien VPC.
* @return Status VPC.
*/
public static String describeVpc(String vpcId, com.aliyun.vpc20160428.Client vpcClient) {
try {
DescribeVpcsRequest request = new DescribeVpcsRequest()
.setRegionId(Constants.REGION_ID)
.setVpcId(vpcId);
return vpcClient.describeVpcs(request).body.vpcs.getVpc().get(0).status;
} catch (Exception e) {
// Lempar pengecualian kustom jika terjadi pengecualian.
throw new RuntimeException("describeVpc gagal: " + e.getMessage());
}
}
/**
* Kueri status Instance ECS.
*
* @param instanceIds ID Instance ECS.
* @param ecsClient Klien ECS.
* @return Objek respons untuk menanyakan status Instance ECS.
*/
public static DescribeInstanceStatusResponse describeInstanceStatus(List<String> instanceIds, com.aliyun.ecs20140526.Client ecsClient) {
try {
DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest()
.setRegionId(Constants.REGION_ID)
.setInstanceId(instanceIds);
return ecsClient.describeInstanceStatus(request);
} catch (Exception e) {
throw new RuntimeException("describeInstanceStatus gagal: " + e.getMessage());
}
}
}
Lakukan O&M tanpa perlu login ke Instance ECS
Cloud Assistant adalah alat O&M otomatis asli yang dikembangkan untuk ECS. Cloud Assistant memungkinkan Anda menjalankan perintah secara batch, seperti shell, PowerShell, dan perintah batch, untuk melaksanakan berbagai tugas pada Instance ECS secara bebas kata sandi tanpa perlu login ke instance atau menggunakan server lompat. Anda dapat menggunakan Cloud Assistant untuk menjalankan skrip O&M otomatis, polling proses, instalasi atau penghapusan perangkat lunak, memulai atau menghentikan layanan, serta menginstal patch atau pembaruan keamanan. Untuk informasi lebih lanjut, lihat Ikhtisar.
Sebagai contoh, Anda dapat memanggil operasi RunCommand untuk menginstal Java dan Tomcat pada Instance ECS dengan menjalankan perintah Cloud Assistant.
Operasi API | Parameter | Deskripsi dan contoh |
RegionId | ID wilayah. Contoh: cn-hangzhou. | |
Type | Jenis bahasa perintah. Contoh: RunShellScript. | |
CommandContent | Isi perintah. Contoh: | |
Timeout | Opsional. Periode waktu habis untuk eksekusi perintah. Unit: detik. Contoh: 60. | |
InstanceId | ID Instance ECS. Contoh: ["i-bp17f3kzgtzzj91r****"]. |
Kode contoh lengkap:
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.RunCommandRequest;
import com.aliyun.ecs20140526.models.RunCommandResponse;
import com.aliyun.teaopenapi.models.Config;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
public class CloudAssistant {
public static void main(String[] args) throws Exception {
Client ecsClient = createEcsClient();
List<String> instanceIds = new ArrayList<>();
instanceIds.add("i-bp17f3kzgtzzj91r****");
String commandContent = "#!/bin/bash\n" +
"if cat /etc/issue|grep -i Ubuntu ; then\n" +
"\tsudo apt-get update\n" +
"\tsudo apt-get install -y default-jdk\n" +
"\tsudo apt-get install -y tomcat9\n" +
"else\n" +
" yum install -y java\n" +
"\tyum install -y tomcat\n" +
"fi";
System.out.println("commandContent: " + commandContent);
runCommand(commandContent, instanceIds, ecsClient);
}
public static class Constants {
// Wilayah.
public static final String REGION_ID = "cn-hangzhou";
// Titik akhir layanan.
public static final class ENDPOINT {
public static final String VPC = "vpc.cn-hangzhou.aliyuncs.com";
public static final String ECS = "ecs.cn-hangzhou.aliyuncs.com";
}
// Jenis perintah.
public static final class COMMAND_TYPE {
// Perintah shell, berlaku untuk instance Linux.
public static final String RUN_SHELL_SCRIPT = "RunShellScript";
// Perintah batch, berlaku untuk instance Windows.
public static final String RUN_BAT_SCRIPT = "RunBatScript";
// Perintah PowerShell, berlaku untuk instance Windows.
public static final String RUN_POWERSHELL_SCRIPT = "RunPowerShellScript";
}
}
public static com.aliyun.ecs20140526.Client createEcsClient() throws Exception {
Config config = new Config();
config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = Constants.ENDPOINT.ECS;
return new com.aliyun.ecs20140526.Client(config);
}
public static void runCommand(String commandContent, List<String> instanceIds, com.aliyun.ecs20140526.Client ecsClient) {
try {
RunCommandRequest request = new RunCommandRequest();
request.setRegionId(Constants.REGION_ID);
// RunShellScript: perintah shell, berlaku untuk instance Linux.
request.setType(Constants.COMMAND_TYPE.RUN_SHELL_SCRIPT);
request.setCommandContent(commandContent);
request.setInstanceId(instanceIds);
request.setTimeout(60L);
RunCommandResponse runCommandResponse = ecsClient.runCommand(request);
System.out.println(new Gson().toJson(runCommandResponse));
} catch (Exception e) {
throw new RuntimeException("runCommand gagal:" + e);
}
}
}
Lepaskan sumber daya
Jika Anda tidak lagi memerlukan sumber daya yang telah Anda buat, panggil operasi API untuk melepaskan sumber daya tersebut.
Panggil operasi API untuk melepaskan sumber daya berdasarkan kebutuhan bisnis Anda. Dalam contoh berikut, semua sumber daya yang dibuat di bagian sebelumnya dilepaskan.
Lepaskan Instance ECS.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah Instance ECS. Contoh: cn-hangzhou.
InstanceId
ID Instance ECS. Contoh: i-bp17f3kzgtzzj91r****.
Hapus pasangan kunci SSH.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah pasangan kunci SSH. Contoh: cn-hangzhou.
KeyPairNames
Nama pasangan kunci SSH. Contoh: ["sdk-key-pair"].
Hapus grup keamanan.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah grup keamanan. Contoh: cn-hangzhou.
SecurityGroupId
ID grup keamanan. Contoh: sg-bp1esyhwfbqeyudt****.
Hapus vSwitch.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah vSwitch. Contoh: cn-hangzhou.
VSwitchId
ID vSwitch. Contoh: vsw-bp1nzprm8h7mmnl8t****.
Hapus VPC.
Operasi API
Parameter
Deskripsi dan contoh
RegionId
ID wilayah VPC. Contoh: cn-hangzhou.
VpcId
ID VPC. Contoh: vpc-bp1aag0sb9s4i92i3****.
Kode contoh:
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.vpc20160428.models.DeleteVSwitchRequest;
import com.aliyun.vpc20160428.models.DeleteVpcRequest;
import com.google.gson.Gson;
import java.util.Collections;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class DeleteResources {
public static void main(String[] args) {
String vpcId = "vpc-bp1aag0sb9s4i92i3****";
String vSwitchId = "vsw-bp1nzprm8h7mmnl8t****";
String securityGroupId = "sg-bp1esyhwfbqeyudt****";
String instanceId = "i-bp17f3kzgtzzj91r****";
String keyPairName = "sdk-key-pair";
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
try {
com.aliyun.ecs20140526.Client ecsClient = createEcsClient();
com.aliyun.vpc20160428.Client vpcClient = createVpcClient();
// Hapus Instance ECS.
executorService.schedule(() -> deleteInstance(instanceId, ecsClient), 1, TimeUnit.SECONDS);
// Hapus pasangan kunci SSH.
executorService.schedule(() -> deleteKeyPairs(keyPairName, ecsClient), 1, TimeUnit.SECONDS);
// Hapus grup keamanan.
executorService.schedule(() -> deleteSecurityGroup(securityGroupId, ecsClient), 60, TimeUnit.SECONDS);
// Hapus vSwitch.
executorService.schedule(() -> deleteVSwitch(vSwitchId, vpcClient), 60, TimeUnit.SECONDS);
// Hapus VPC.
executorService.schedule(() -> deleteVpc(vpcId, vpcClient), 65, TimeUnit.SECONDS);
} catch (Exception e) {
System.err.println("Terjadi kesalahan: " + e.getMessage());
// Tangani pengecualian. Beberapa sumber daya mungkin gagal dihapus. Tambahkan mekanisme untuk menangani kegagalan penghapusan dengan benar.
} finally {
executorService.shutdown();
}
}
public static class Constants {
// Titik akhir layanan.
public static final class ENDPOINT {
public static final String VPC = "vpc.cn-hangzhou.aliyuncs.com";
public static final String ECS = "ecs.cn-hangzhou.aliyuncs.com";
}
// Wilayah.
public static final String REGION_ID = "cn-hangzhou";
}
public static com.aliyun.vpc20160428.Client createVpcClient() throws Exception {
Config config = new Config();
config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = Constants.ENDPOINT.VPC;
return new com.aliyun.vpc20160428.Client(config);
}
public static com.aliyun.ecs20140526.Client createEcsClient() throws Exception {
Config config = new Config();
config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = Constants.ENDPOINT.ECS;
return new com.aliyun.ecs20140526.Client(config);
}
/**
* Hapus VPC.
*
* @param vpcId ID VPC yang ingin Anda hapus.
* @param vpcClient Klien VPC.
*/
public static void deleteVpc(String vpcId, com.aliyun.vpc20160428.Client vpcClient) {
try {
System.out.println("VPC sedang dihapus, harap tunggu...");
DeleteVpcRequest deleteVpcRequest = new DeleteVpcRequest()
.setRegionId(Constants.REGION_ID)
.setVpcId(vpcId);
vpcClient.deleteVpc(deleteVpcRequest);
} catch (Exception e) {
throw new RuntimeException("Hapus VPC gagal: " + e.getMessage());
}
}
/**
* Hapus vSwitch.
*
* @param vSwitchId ID vSwitch.
* @param vpcClient Klien VPC.
*/
public static void deleteVSwitch(String vSwitchId, com.aliyun.vpc20160428.Client vpcClient) {
System.out.println("vSwitch sedang dihapus, harap tunggu...");
try {
DeleteVSwitchRequest deleteVSwitchRequest = new DeleteVSwitchRequest()
.setRegionId(Constants.REGION_ID)
.setVSwitchId(vSwitchId);
vpcClient.deleteVSwitch(deleteVSwitchRequest);
} catch (Exception e) {
throw new RuntimeException("Hapus vSwitch gagal: " + e.getMessage());
}
}
/**
* Hapus grup keamanan.
*
* @param securityGroupId ID grup keamanan yang ingin Anda hapus.
* @param ecsClient Klien ECS.
*/
public static void deleteSecurityGroup(String securityGroupId, Client ecsClient) {
System.out.println("Grup Keamanan sedang dihapus, harap tunggu...");
try {
DeleteSecurityGroupRequest deleteSecurityGroupRequest = new DeleteSecurityGroupRequest()
.setRegionId(Constants.REGION_ID)
.setSecurityGroupId(securityGroupId);
ecsClient.deleteSecurityGroup(deleteSecurityGroupRequest);
} catch (Exception e) {
throw new RuntimeException("Hapus Grup Keamanan gagal: " + e.getMessage());
}
}
/**
* Hapus Instance ECS.
*
* @param instanceId ID Instance ECS yang ingin Anda hapus.
* @param ecsClient Klien ECS.
*/
public static void deleteInstance(String instanceId, Client ecsClient) {
System.out.println("Instance ECS sedang dihapus, harap tunggu...");
try {
DeleteInstanceRequest request = new DeleteInstanceRequest()
.setForce(true)
.setInstanceId(instanceId);
ecsClient.deleteInstance(request);
} catch (Exception e) {
throw new RuntimeException("Hapus Instance gagal: " + e.getMessage());
}
}
/**
* Hapus pasangan kunci SSH.
*
* @param keyPairName Nama pasangan kunci SSH.
* @param ecsClient Klien ECS.
*/
public static void deleteKeyPairs(String keyPairName, Client ecsClient) {
System.out.println("Pasangan Kunci sedang dihapus, harap tunggu...");
try {
// Buat permintaan untuk menghapus pasangan kunci SSH dan tentukan ID wilayah serta nama pasangan kunci SSH dalam permintaan.
DeleteKeyPairsRequest deleteKeyPairsRequest = new DeleteKeyPairsRequest()
.setRegionId(Constants.REGION_ID)
.setKeyPairNames(new Gson().toJson(Collections.singletonList(keyPairName)));
ecsClient.deleteKeyPairs(deleteKeyPairsRequest);
} catch (Exception e) {
// Lempar pengecualian yang mencakup pesan kesalahan jika pasangan kunci SSH gagal dihapus.
throw new RuntimeException("Hapus Pasangan Kunci gagal: " + e.getMessage());
}
}
}