全部产品
Search
文档中心

Elastic Compute Service:Membuat dan mengelola Instance ECS menggunakan SDK

更新时间:Jul 06, 2025

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

  1. 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.

  2. 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

  3. 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.

  4. 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.

    Contoh kode berikut memberikan contoh cara menambahkan dependensi Maven:

    <dependencies>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>ecs20140526</artifactId>
            <version>5.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>vpc20160428</artifactId>
            <version>7.12.0</version>
        </dependency>
    </dependencies>

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.

  1. 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

    CreateVpc

    RegionId

    ID wilayah tempat VPC dibuat. Contoh: cn-hangzhou.

    CidrBlock

    Blok CIDR dari VPC. Contoh: 192.168.0.0/16.

  2. 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

    DescribeVpcs

    RegionId

    ID wilayah VPC. Contoh: cn-hangzhou.

    VpcId

    ID VPC. Contoh: vpc-bp1aag0sb9s4i92i3****.

  3. 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.

    CreateVSwitch

    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.

  4. 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

    CreateSecurityGroup

    RegionId

    ID wilayah tempat grup keamanan dibuat. Contoh: cn-hangzhou.

    VpcId

    ID VPC tempat grup keamanan dibuat. Contoh: vpc-bp1aag0sb9s4i92i3****.

  5. Buat aturan masuk dalam grup keamanan.

    Operasi API

    Parameter

    Deskripsi dan contoh

    AuthorizeSecurityGroup

    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.

  6. 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

    CreateKeyPair

    RegionId

    ID wilayah instance. Contoh: cn-hangzhou.

    KeyPairName

    Nama pasangan kunci SSH. Contoh: sdk-key-pair.

  7. 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

    RunInstances

    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.

    Catatan

    Pastikan saldo akun Anda mencukupi.

    KeyPairName

    Nama pasangan kunci SSH. Contoh: sdk-key-pair.

    SystemDisk.Category

    Kategori disk sistem. Contoh: cloud_essd.

  8. 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

    DescribeInstanceStatus

    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

RunCommand

RegionId

ID wilayah. Contoh: cn-hangzhou.

Type

Jenis bahasa perintah. Contoh: RunShellScript.

CommandContent

Isi perintah. Contoh:

#!/bin/bash
if cat /etc/issue|grep -i Ubuntu ; then
	sudo apt-get update
	sudo apt-get install -y default-jdk
	sudo apt-get install -y tomcat9
else
        yum install -y java
	yum install -y tomcat
fi

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.

Catatan

Panggil operasi API untuk melepaskan sumber daya berdasarkan kebutuhan bisnis Anda. Dalam contoh berikut, semua sumber daya yang dibuat di bagian sebelumnya dilepaskan.

  1. Lepaskan Instance ECS.

    Operasi API

    Parameter

    Deskripsi dan contoh

    DeleteInstances

    RegionId

    ID wilayah Instance ECS. Contoh: cn-hangzhou.

    InstanceId

    ID Instance ECS. Contoh: i-bp17f3kzgtzzj91r****.

  2. Hapus pasangan kunci SSH.

    Operasi API

    Parameter

    Deskripsi dan contoh

    DeleteKeyPairs

    RegionId

    ID wilayah pasangan kunci SSH. Contoh: cn-hangzhou.

    KeyPairNames

    Nama pasangan kunci SSH. Contoh: ["sdk-key-pair"].

  3. Hapus grup keamanan.

    Operasi API

    Parameter

    Deskripsi dan contoh

    DeleteSecurityGroup

    RegionId

    ID wilayah grup keamanan. Contoh: cn-hangzhou.

    SecurityGroupId

    ID grup keamanan. Contoh: sg-bp1esyhwfbqeyudt****.

  4. Hapus vSwitch.

    Operasi API

    Parameter

    Deskripsi dan contoh

    DeleteVSwitch

    RegionId

    ID wilayah vSwitch. Contoh: cn-hangzhou.

    VSwitchId

    ID vSwitch. Contoh: vsw-bp1nzprm8h7mmnl8t****.

  5. Hapus VPC.

    Operasi API

    Parameter

    Deskripsi dan contoh

    DeleteVpc

    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());
        }
    }
}