Todos os produtos
Search
Central de documentação

Elastic Compute Service:Create and use an ECS instance by using an SDK

Última atualização: Jul 03, 2026

O Alibaba Cloud Elastic Compute Service (ECS) oferece diversas APIs e kits de desenvolvimento de software (SDKs) para criar e gerenciar instâncias ECS programaticamente. Isso aumenta a eficiência dos negócios e viabiliza a automação de sistemas. Este tópico descreve como usar o SDK Java V2.0 para criar uma instância ECS, executar um script com o Cloud Assistant e liberar recursos.

Preparativos

  1. Um AccessKey de conta Alibaba Cloud concede permissões totais sobre todos os recursos. O vazamento de um AccessKey representa alto risco de segurança. Recomendamos utilizar o AccessKey de um usuário do Resource Access Management (RAM) com as permissões mínimas necessárias. Para mais informações, consulte Criar um AccessKey.

  2. Conceda ao usuário RAM permissões para gerenciar recursos do Elastic Compute Service (ECS) e da Virtual Private Cloud (VPC). O código de exemplo neste tópico cria recursos como instâncias, VPCs e vSwitches. Conceda as seguintes permissões:

    Produtos Cloud

    Conceder permissões

    Virtual Private Cloud (VPC)

    Este exemplo utiliza a política de sistema: AliyunVPCFullAccess

    Elastic Compute Service (ECS)

    Este exemplo utiliza a política de sistema: AliyunECSFullAccess

  3. O código de exemplo neste tópico lê o AccessKey das variáveis de ambiente do sistema para usá-lo como credencial de acesso aos serviços da Alibaba Cloud. Para mais informações, consulte Configurar variáveis de ambiente no Linux, macOS e Windows.

  4. Obtenha o SDK do ECS e o SDK da VPC. Este tópico descreve como instalar os SDKs adicionando dependências Maven. Para mais informações sobre outros métodos de instalação, consulte Instalar o SDK Java do ECS e Instalar o SDK Java da VPC.

    O código a seguir exemplifica como adicionar dependências 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>

Criar uma instância ECS

Ao criar uma instância ECS, especifique diversos parâmetros obrigatórios, como ID do vSwitch, grupo de segurança e imagem. Utilize os IDs de recursos existentes ou chame as operações OpenAPI a seguir para criar os recursos.

  1. Crie uma VPC

    Uma Virtual Private Cloud (VPC) é uma rede privada na nuvem que permite configurar e gerenciar uma área de rede logicamente isolada.

    API

    Parâmetro

    Valor de exemplo

    CreateVpc

    RegionId

    Região: cn-hangzhou

    CidrBlock

    Bloco CIDR da VPC: 192.168.0.0/16

  2. Consulte as informações da VPC

    Após chamar CreateVpc, a VPC precisa de tempo para configuração. Chame esta operação OpenAPI para consultar o status da VPC. Não chame operações OpenAPI subsequentes até que o status da VPC mude para Available.

    API

    Parâmetro

    Valor de exemplo

    DescribeVpcs

    RegionId

    Região: cn-hangzhou

    VpcId

    ID da VPC: vpc-bp1aag0sb9s4i92i3****

  3. Crie um vSwitch

    Um vSwitch é um dispositivo de comutação de rede usado em ambientes de virtualização. Ele simula as funções de um switch físico para permitir a comunicação entre máquinas virtuais (VMs) e entre VMs e a rede física.

    API

    Parâmetro

    Valor de exemplo

    RegionId

    Região: cn-hangzhou

    CreateVSwitch

    ZoneId

    Zona: cn-hangzhou-i

    VpcId

    ID da VPC: vpc-bp1aag0sb9s4i92i3****

    CidrBlock

    Bloco CIDR do vSwitch: 192.168.0.0/24

  4. Crie um grupo de segurança

    Um grupo de segurança atua como firewall virtual que controla o tráfego de entrada e saída das instâncias ECS.

    API

    Parâmetro

    Valor de exemplo

    CreateSecurityGroup

    RegionId

    Região: cn-hangzhou

    VpcId

    ID da VPC: vpc-bp1aag0sb9s4i92i3****

  5. Adicione uma regra ao grupo de segurança

    API

    Parâmetro

    Valor de exemplo

    AuthorizeSecurityGroup

    RegionId

    Região: cn-hangzhou

    SecurityGroupId

    ID do grupo de segurança: sg-bp1esyhwfbqeyudt****

    IpProtocol

    Protocolo: tcp

    SourceCidrIp

    Bloco CIDR de origem: 0.0.0.0/0

    PortRange

    Intervalo de portas:

    • Para instância Linux: 22/22

    • Para instância Windows: 3389/3389

  6. Crie um par de chaves SSH

    Um par de chaves SSH da Alibaba Cloud é um método de autenticação de login seguro e conveniente para verificação de identidade e comunicação criptografada no protocolo Secure Shell (SSH). Utilize um par de chaves SSH para fazer login remoto sem senha.

    API

    Parâmetro

    Valor de exemplo

    CreateKeyPair

    RegionId

    Região: cn-hangzhou

    KeyPairName

    Nome do par de chaves: sdk-key-pair

  7. Crie uma instância ECS

    O ECS permite implantar e executar aplicações rapidamente, dimensionar recursos com flexibilidade para atender a mudanças nos negócios e aproveitar computação de alto desempenho, segura e econômica. O ECS é adequado para diversos cenários, como hospedagem de sites, desenvolvimento de aplicações e processamento de dados.

    API

    Parâmetro

    Valor de exemplo

    RunInstances

    RegionId

    Região: cn-hangzhou

    ImageId

    Imagem: Use a imagem Alibaba Cloud Linux aliyun_3_x64_20G_scc_alibase_20220225.vhd.

    InstanceType

    Tipo de instância: ecs.e-c1m2.xlarge.

    SecurityGroupId

    ID do grupo de segurança: sg-bp1esyhwfbqeyudt****

    VSwitchId

    ID do vSwitch: vsw-bp1nzprm8h7mmnl8t****

    InstanceName

    Nome da instância: sdk-test

    InstanceChargeType

    Método de faturamento: A instância é faturada conforme o uso (PostPaid).

    Nota

    Certifique-se de que o saldo da sua conta seja suficiente para o pagamento.

    KeyPairName

    Nome do par de chaves: sdk-key-pair

    SystemDisk.Category

    Tipo de disco do sistema: cloud_essd

  8. Consulte o status da instância ECS

    Após chamar RunInstances, a instância ECS leva algum tempo para iniciar. Operações como conexões remotas e implantações de aplicações só são possíveis depois que a instância entra no estado Running. Chame esta operação OpenAPI para consultar o status da instância ECS.

    API

    Parâmetro

    Valor de exemplo

    DescribeInstanceStatus

    RegionId

    Região: cn-hangzhou

    InstanceId

    IDs das instâncias: ["i-bp17f3kzgtzzj91r****"]

O código a seguir fornece um exemplo completo:

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();
            // Create a VPC.
            vpcId = createVpc(vpcClient);
            System.out.println("VPC create success, vpcId :" + vpcId);
            // Proceed to the next step only after the VPC is in the Available state.
            while (true) {
                String status = describeVpc(vpcId, vpcClient);
                if ("Available".equals(status)) {
                    break;
                }
            }
            // Create a vSwitch.
            vSwitchId = CreateVSwitch(vpcId, vpcClient);
            System.out.println("VSwitch create success, vSwitchId :" + vSwitchId);
            // Create a security group.
            securityGroupId = createSecurityGroup(vpcId, ecsClient);
            System.out.println("SecurityGroup create success, securityGroupId :" + securityGroupId);
            // Add an inbound rule to the security group.
            authorizeSecurityGroup(securityGroupId, ecsClient);
            // Create a key pair. Note: Save the key pair information to log on to the ECS instance.
            CreateKeyPairResponse keyPair = createKeyPair(ecsClient);
            System.out.println("KeyPair create success, keyPairName :" + keyPair.body.keyPairName);
            // Create an instance. The instance is running when its status is Running.
            instanceId = createInstance(ecsClient, vSwitchId, securityGroupId);
            System.out.println("ECS create success, 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) {
            // If some resources are created but others fail, add a proper handling mechanism, such as logging, rollback, or compensation.
            System.out.println(e.getMessage());
        }
    }

    public static class Constants {
        // Name
        public static final String NAME = "sdk-test";
        // Region
        public static final String REGION_ID = "cn-hangzhou";
        // Zone
        public static final String ZONE_ID = "cn-hangzhou-i";
        // The CIDR blocks of the VPC and vSwitch to be created
        public static final String CIDR_BLOCK_VPC = "192.168.0.0/16";
        public static final String CIDR_BLOCK_VSWITCH = "192.168.0.0/24";
        // Image
        public static final String IMAGE_ID = "aliyun_3_x64_20G_scc_alibase_20220225.vhd";
        // Instance type
        public static final String INSTANCE_TYPE = "ecs.e-c1m2.xlarge";
        // Disk type
        public static final String SYSTEM_DISK_CATEGORY = "cloud_essd";

        // Key pair name
        public static final String KEY_PAIR_NAME = "sdk-key-pair";

        // Endpoint
        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";
        }

        // Billing method
        public static final class INSTANCE_CHARGE_TYPE {
            // Subscription
            public static final String PRE_PAID = "PrePaid";
            // Pay-as-you-go
            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);
    }

    /**
     * Creates a virtual private cloud (VPC) network.
     * This method calls the API of the VPC service to create a VPC network and returns the ID of the new VPC.
     *
     * @param vpcClient The VPC client.
     * @return Returns the ID of the new VPC.
     */
    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 failed: " + e.getMessage());
        }
    }

    /**
     * Creates a vSwitch.
     * This method creates a new vSwitch using the Alibaba Cloud VPC client. It configures the required request parameters, such as the region ID, zone ID,
     * CIDR block, VPC ID, and vSwitch name, then sends the request and returns the ID of the new vSwitch.
     *
     * @param vpcId     The ID of the VPC in which to create the vSwitch.
     * @param vpcClient The VPC client.
     * @return Returns the ID of the new vSwitch.
     */
    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 failed: " + e.getMessage());
        }
    }

    /**
     * Creates a security group.
     *
     * @param vpcId     The ID of the VPC.
     * @param ecsClient The ECS client.
     * @return The ID of the created security group.
     */
    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 failed: " + e.getMessage());
        }
    }

    /**
     * Authorizes a security group rule to allow specific inbound traffic.
     * For example, allow access from any IP address (0.0.0.0/0) over TCP on port 22 (SSH).
     *
     * @param securityGroupId The ID of the security group for which to authorize the rule.
     * @param ecsClient       The ECS client.
     */
    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 failed: " + e.getMessage());
        }
    }

    /**
     * Creates an ECS instance.
     *
     * @param ecsClient       The ECS client.
     * @param vSwitchId       The vSwitch ID.
     * @param securityGroupId The security group ID.
     * @return The ID of the new ECS instance.
     */
    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 failed: " + e.getMessage());
        }
    }

    /**
     * Creates a key pair using the specified security group ID.
     *
     * @param ecsClient The ECS client.
     * @return Returns the response object for creating the key pair.
     */
    public static CreateKeyPairResponse createKeyPair(com.aliyun.ecs20140526.Client ecsClient) {
        try {
            // Create a request object to create a key pair, and set the region ID and key pair name.
            CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest()
                    .setRegionId(Constants.REGION_ID)
                    .setKeyPairName(Constants.KEY_PAIR_NAME);
            // Send the request to create the key pair using the ECS client and return the response object.
            return ecsClient.createKeyPair(createKeyPairRequest);
        } catch (Exception e) {
            // If the key pair fails to be created, throw a runtime exception that contains the error message.
            throw new RuntimeException("createKeyPair failed: " + e.getMessage());
        }
    }

    /**
     * Queries the VPC status.
     *
     * @param vpcId     The ID of the VPC.
     * @param vpcClient The VPC client.
     * @return Returns the status of the 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) {
            // If an exception occurs, throw a custom exception.
            throw new RuntimeException("describeVpc failed: " + e.getMessage());
        }
    }

    /**
     * Queries ECS instance information based on a list of instance IDs.
     *
     * @param instanceIds A list of instance IDs.
     * @param ecsClient   The ECS client.
     * @return Returns the response object that contains the instance status information.
     */
    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 failed: " + e.getMessage());
        }
    }
}

O&M sem senha

Utilize o Cloud Assistant, ferramenta nativa de O&M automatizada fornecida pelo Elastic Compute Service (ECS), para executar comandos em lote (como Shell, powershell e Batch) sem necessidade de senhas, logins ou servidores de salto. Isso permite realizar tarefas como executar scripts de O&M automatizados, monitorar processos, instalar ou desinstalar software, iniciar ou parar serviços e aplicar patches ou atualizações de segurança. Para mais informações, consulte Visão geral do Cloud Assistant.

Por exemplo, para instalar Java e Tomcat em uma instância ECS, chame a operação RunCommand:

API

Parâmetro

Valor de exemplo

RunCommand

RegionId

Região: cn-hangzhou

Type

Tipo de linguagem do comando de O&M: RunShellScript

CommandContent

Conteúdo do comando:

#!/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

Opcional. Tempo limite para execução do comando. Unidade: segundos. Exemplo: 60

InstanceId

IDs das instâncias ECS: ["i-bp17f3kzgtzzj91r****"]

O código a seguir fornece um exemplo completo:

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 {
        // Region
        public static final String REGION_ID = "cn-hangzhou";

        // Endpoint
        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";
        }

        // Command type
        public static final class COMMAND_TYPE {
            // A shell command for a Linux instance.
            public static final String RUN_SHELL_SCRIPT = "RunShellScript";
            // A batch command for a Windows instance.
            public static final String RUN_BAT_SCRIPT = "RunBatScript";
            // A PowerShell command for a Windows instance.
            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 specifies a shell command for a Linux instance.
            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 failed:" + e);
        }
    }
}

Liberar recursos

Quando não precisar mais dos recursos, chame as operações OpenAPI a seguir para liberá-los.

Nota

Chame as operações OpenAPI apropriadas para liberar recursos conforme necessário. Este exemplo libera todos os recursos criados nas etapas anteriores.

  1. Libere a instância ECS

    API

    Parâmetro

    Valor de exemplo

    DeleteInstances

    RegionId

    Região: cn-hangzhou

    InstanceId

    ID da instância: i-bp17f3kzgtzzj91r****

  2. Exclua o par de chaves SSH

    API

    Parâmetro

    Valor de exemplo

    DeleteKeyPairs

    RegionId

    Região: cn-hangzhou

    KeyPairNames

    Nome do par de chaves SSH: ["sdk-key-pair"]

  3. Exclua o grupo de segurança

    API

    Parâmetro

    Valor de exemplo

    DeleteSecurityGroup

    RegionId

    Região: cn-hangzhou

    SecurityGroupId

    ID do grupo de segurança: sg-bp1esyhwfbqeyudt****

  4. Exclua o vSwitch

    API

    Parâmetro

    Valor de exemplo

    DeleteVSwitch

    RegionId

    Região: cn-hangzhou

    VSwitchId

    ID do vSwitch: vsw-bp1nzprm8h7mmnl8t****

  5. Exclua a VPC

    API

    Parâmetro

    Valor de exemplo

    DeleteVpc

    RegionId

    Região: cn-hangzhou

    VpcId

    ID da VPC: vpc-bp1aag0sb9s4i92i3****

O código a seguir fornece um exemplo:

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();
            // Delete the ECS instance.
            executorService.schedule(() -> deleteInstance(instanceId, ecsClient), 1, TimeUnit.SECONDS);
            // Delete the key pair.
            executorService.schedule(() -> deleteKeyPairs(keyPairName, ecsClient), 1, TimeUnit.SECONDS);
            // Delete the security group.
            executorService.schedule(() -> deleteSecurityGroup(securityGroupId, ecsClient), 60, TimeUnit.SECONDS);
            // Delete the vSwitch.
            executorService.schedule(() -> deleteVSwitch(vSwitchId, vpcClient), 60, TimeUnit.SECONDS);
            // Delete the VPC.
            executorService.schedule(() -> deleteVpc(vpcId, vpcClient), 65, TimeUnit.SECONDS);
        } catch (Exception e) {
            System.err.println("An error occurred: " + e.getMessage());
            // Handle exceptions. Releasing an instance takes time. Some resources may be deleted while others are not. Add a proper mechanism to handle data for failed deletions.
        } finally {
            executorService.shutdown();
        }
    }

    public static class Constants {
        // Endpoint
        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";
        }

        // Region
        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);
    }

    /**
     * Deletes the specified virtual private cloud (VPC) resource.
     *
     * @param vpcId     The ID of the VPC to delete.
     * @param vpcClient The VPC client.
     */
    public static void deleteVpc(String vpcId, com.aliyun.vpc20160428.Client vpcClient) {
        try {
            System.out.println("VPC is deleting, please wait...");
            DeleteVpcRequest deleteVpcRequest = new DeleteVpcRequest()
                    .setRegionId(Constants.REGION_ID)
                    .setVpcId(vpcId);
            vpcClient.deleteVpc(deleteVpcRequest);
        } catch (Exception e) {
            throw new RuntimeException("DeleteVpc failed: " + e.getMessage());
        }
    }

    /**
     * Deletes the specified vSwitch.
     *
     * @param vSwitchId The ID of the vSwitch.
     * @param vpcClient The VPC client.
     */
    public static void deleteVSwitch(String vSwitchId, com.aliyun.vpc20160428.Client vpcClient) {
        System.out.println("VSwitch is deleting, please wait...");
        try {
            DeleteVSwitchRequest deleteVSwitchRequest = new DeleteVSwitchRequest()
                    .setRegionId(Constants.REGION_ID)
                    .setVSwitchId(vSwitchId);
            vpcClient.deleteVSwitch(deleteVSwitchRequest);
        } catch (Exception e) {
            throw new RuntimeException("DeleteVSwitch failed: " + e.getMessage());
        }
    }

    /**
     * Deletes the specified security group.
     *
     * @param securityGroupId The ID of the security group to delete.
     * @param ecsClient       The ECS client.
     */
    public static void deleteSecurityGroup(String securityGroupId, Client ecsClient) {
        System.out.println("SecurityGroup is deleting, please wait...");
        try {
            DeleteSecurityGroupRequest deleteSecurityGroupRequest = new DeleteSecurityGroupRequest()
                    .setRegionId(Constants.REGION_ID)
                    .setSecurityGroupId(securityGroupId);
            ecsClient.deleteSecurityGroup(deleteSecurityGroupRequest);
        } catch (Exception e) {
            throw new RuntimeException("DeleteSecurityGroup failed: " + e.getMessage());
        }
    }

    /**
     * Deletes the ECS instance.
     *
     * @param instanceId The ID of the ECS instance to delete.
     * @param ecsClient  The ECS client.
     */
    public static void deleteInstance(String instanceId, Client ecsClient) {
        System.out.println("ECS instance is deleting, please wait...");
        try {
            DeleteInstanceRequest request = new DeleteInstanceRequest()
                    .setForce(true)
                    .setInstanceId(instanceId);
            ecsClient.deleteInstance(request);
        } catch (Exception e) {
            throw new RuntimeException("DeleteInstance failed: " + e.getMessage());
        }
    }

    /**
     * Deletes the key pair using the specified ECS client.
     *
     * @param keyPairName The key pair name.
     * @param ecsClient   The ECS client.
     */
    public static void deleteKeyPairs(String keyPairName, Client ecsClient) {
        System.out.println("KeyPair is deleting, please wait...");
        try {
            // Create a request to delete the key pair, and set the region ID and key pair name.
            DeleteKeyPairsRequest deleteKeyPairsRequest = new DeleteKeyPairsRequest()
                    .setRegionId(Constants.REGION_ID)
                    .setKeyPairNames(new Gson().toJson(Collections.singletonList(keyPairName)));
            ecsClient.deleteKeyPairs(deleteKeyPairsRequest);
        } catch (Exception e) {
            // If the key pair fails to be deleted, throw a runtime exception that contains the error message.
            throw new RuntimeException("DeleteKeyPairs failed: " + e.getMessage());
        }
    }
}