Tous les produits
Search
Centre de documentation

Elastic Compute Service:Créer et utiliser une instance ECS à l'aide d'un SDK

Dernière mise à jour :Aug 07, 2026

Alibaba Cloud Elastic Compute Service (ECS) met à votre disposition diverses API et kits de développement logiciel (SDK) pour créer et gérer des instances ECS par programmation. Cette approche améliore l'efficacité opérationnelle et permet d'automatiser vos systèmes. Cette rubrique explique comment utiliser le SDK Java V2.0 pour créer une instance ECS, exécuter un script via Cloud Assistant, puis libérer les ressources associées.

Prérequis

  1. Une clé AccessKey associée à un compte Alibaba Cloud dispose de toutes les autorisations sur l'ensemble des ressources. La divulgation d'une telle clé expose votre environnement à des risques de sécurité majeurs. Nous vous recommandons d'utiliser la clé AccessKey d'un utilisateur Resource Access Management (RAM) disposant uniquement des autorisations minimales requises. Pour plus d'informations, consultez la rubrique Créer une clé AccessKey.

  2. Accordez à l'utilisateur RAM les autorisations nécessaires pour gérer les ressources Elastic Compute Service (ECS) et Virtual Private Cloud (VPC). L'exemple de code présenté dans cette rubrique crée des ressources telles que des instances, des VPC et des vSwitches. Attribuez les politiques suivantes :

    Produits cloud

    Autorisations à accorder

    Virtual Private Cloud (VPC)

    Cet exemple utilise la politique système : AliyunVPCFullAccess

    Elastic Compute Service (ECS)

    Cet exemple utilise la politique système : AliyunECSFullAccess

  3. L'exemple de code de cette rubrique récupère la clé AccessKey depuis les variables d'environnement du système pour s'authentifier auprès des services Alibaba Cloud. Pour en savoir plus, consultez la section Configurer les variables d'environnement sous Linux, macOS et Windows.

  4. Téléchargez les SDK ECS et VPC. Cette rubrique détaille l'installation des SDK via l'ajout de dépendances Maven. Pour découvrir d'autres méthodes d'installation, reportez-vous aux guides Installer le SDK Java ECS et Installer le SDK Java VPC.

    L'extrait suivant illustre l'ajout des dépendances 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>

Créer une instance ECS

La création d'une instance ECS exige la définition de nombreux paramètres obligatoires, tels que l'ID du vSwitch, le groupe de sécurité ou l'image système. Vous pouvez soit réutiliser les identifiants de ressources existantes, soit invoquer les opérations OpenAPI suivantes pour provisionner ces éléments.

  1. Créer un VPC

    Un Virtual Private Cloud (VPC) constitue un réseau privé isolé logiquement dans le cloud, vous permettant de configurer et de gérer votre propre espace réseau.

    API

    Paramètre

    Valeur d'exemple

    CreateVpc

    RegionId

    Région : cn-hangzhou

    CidrBlock

    Plage CIDR du VPC : 192.168.0.0/16

  2. Interroger les informations du VPC

    Après l'appel à l'opération CreateVpc, le VPC nécessite un délai de configuration. Utilisez cette opération OpenAPI pour vérifier l'état du VPC. N'invoquez les opérations suivantes qu'une fois que le statut du VPC est passé à Available.

    API

    Paramètre

    Valeur d'exemple

    DescribeVpcs

    RegionId

    Région : cn-hangzhou

    VpcId

    ID du VPC : vpc-bp1aag0sb9s4i92i3****

  3. Créer un vSwitch

    Un vSwitch agit comme un commutateur réseau au sein d'un environnement virtualisé. Il émule les fonctions d'un switch physique afin d'établir la connectivité entre les machines virtuelles (VM) ainsi qu'entre les VM et le réseau physique.

    API

    Paramètre

    Valeur d'exemple

    RegionId

    Région : cn-hangzhou

    CreateVSwitch

    ZoneId

    Zone : cn-hangzhou-i

    VpcId

    ID du VPC : vpc-bp1aag0sb9s4i92i3****

    CidrBlock

    Plage CIDR du vSwitch : 192.168.0.0/24

  4. Créer un groupe de sécurité

    Un groupe de sécurité fonctionne comme un pare-feu virtuel régulant le trafic entrant et sortant des instances ECS.

    API

    Paramètre

    Valeur d'exemple

    CreateSecurityGroup

    RegionId

    Région : cn-hangzhou

    VpcId

    ID du VPC : vpc-bp1aag0sb9s4i92i3****

  5. Ajouter une règle au groupe de sécurité

    API

    Paramètre

    Valeur d'exemple

    AuthorizeSecurityGroup

    RegionId

    Région : cn-hangzhou

    SecurityGroupId

    ID du groupe de sécurité : sg-bp1esyhwfbqeyudt****

    IpProtocol

    Protocole : tcp

    SourceCidrIp

    Plage CIDR source : 0.0.0.0/0

    PortRange

    Plage de ports :

    • Pour une instance Linux : 22/22

    • Pour une instance Windows : 3389/3389

  6. Créer une paire de clés SSH

    Une paire de clés SSH Alibaba Cloud offre une méthode d'authentification sécurisée et pratique pour les connexions via le protocole Secure Shell (SSH). Elle assure à la fois la vérification d'identité et le chiffrement des communications, permettant une connexion distante sans mot de passe.

    API

    Paramètre

    Valeur d'exemple

    CreateKeyPair

    RegionId

    Région : cn-hangzhou

    KeyPairName

    Nom de la paire de clés : sdk-key-pair

  7. Créer une instance ECS

    ECS vous permet de déployer et d'exécuter rapidement des applications, d'ajuster les ressources avec flexibilité selon l'évolution de vos besoins métier, tout en bénéficiant d'une infrastructure informatique performante, sécurisée et économique. Ce service s'adapte à divers scénarios, notamment l'hébergement web, le développement d'applications ou le traitement de données.

    API

    Paramètre

    Valeur d'exemple

    RunInstances

    RegionId

    Région : cn-hangzhou

    ImageId

    Image : utilisez l'image Alibaba Cloud Linux aliyun_3_x64_20G_scc_alibase_20220225.vhd.

    InstanceType

    Type d'instance : ecs.e-c1m2.xlarge.

    SecurityGroupId

    ID du groupe de sécurité : sg-bp1esyhwfbqeyudt****

    VSwitchId

    ID du vSwitch : vsw-bp1nzprm8h7mmnl8t****

    InstanceName

    Nom de l'instance : sdk-test

    InstanceChargeType

    Mode de facturation : l'instance est facturée en mode paiement à l'utilisation (PostPaid).

    Remarque

    Assurez-vous que le solde de votre compte est suffisant pour couvrir les frais.

    KeyPairName

    Nom de la paire de clés : sdk-key-pair

    SystemDisk.Category

    Type de disque système : cloud_essd

  8. Interroger l'état de l'instance ECS

    Suite à l'appel de l'opération RunInstances, l'instance ECS met un certain temps à démarrer. Vous ne pourrez effectuer des actions telles que les connexions à distance ou les déploiements d'applications qu'une fois l'instance passée à l'état Running. Utilisez cette opération OpenAPI pour suivre le statut de l'instance.

    API

    Paramètre

    Valeur d'exemple

    DescribeInstanceStatus

    RegionId

    Région : cn-hangzhou

    InstanceId

    ID des instances : ["i-bp17f3kzgtzzj91r****"]

Voici un exemple complet illustrant ces étapes :

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

Maintenance sans mot de passe

Cloud Assistant, outil natif d'automatisation des opérations fourni par Elastic Compute Service (ECS), permet d'exécuter des commandes par lots (Shell, PowerShell, Batch, etc.) sans nécessiter de mots de passe, de connexions manuelles ou de serveurs de rebond. Cette solution facilite l'exécution de scripts automatisés, la surveillance de processus, l'installation ou la désinstallation de logiciels, le démarrage ou l'arrêt de services, ainsi que l'application de correctifs ou de mises à jour de sécurité. Pour approfondir le sujet, consultez la rubrique Présentation de Cloud Assistant.

Par exemple, pour installer Java et Tomcat sur une instance ECS, invoquez l'opération RunCommand :

API

Paramètre

Valeur d'exemple

RunCommand

RegionId

Région : cn-hangzhou

Type

Type de langage de la commande O&M : RunShellScript

CommandContent

Contenu de la commande :

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

Facultatif. Délai d'expiration pour l'exécution de la commande, exprimé en secondes. Exemple : 60

InstanceId

ID des instances ECS : ["i-bp17f3kzgtzzj91r****"]

L'extrait suivant propose une implémentation complète :

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

Libérer les ressources

Lorsque vous n'avez plus besoin des ressources provisionnées, utilisez les opérations OpenAPI suivantes pour les supprimer.

Remarque

Invoquez les opérations appropriées selon vos besoins. Cet exemple supprime l'intégralité des ressources créées lors des étapes précédentes.

  1. Supprimer l'instance ECS

    API

    Paramètre

    Valeur d'exemple

    DeleteInstances

    RegionId

    Région : cn-hangzhou

    InstanceId

    ID de l'instance : i-bp17f3kzgtzzj91r****

  2. Supprimer la paire de clés SSH

    API

    Paramètre

    Valeur d'exemple

    DeleteKeyPairs

    RegionId

    Région : cn-hangzhou

    KeyPairNames

    Nom de la paire de clés SSH : ["sdk-key-pair"]

  3. Supprimer le groupe de sécurité

    API

    Paramètre

    Valeur d'exemple

    DeleteSecurityGroup

    RegionId

    Région : cn-hangzhou

    SecurityGroupId

    ID du groupe de sécurité : sg-bp1esyhwfbqeyudt****

  4. Supprimer le vSwitch

    API

    Paramètre

    Valeur d'exemple

    DeleteVSwitch

    RegionId

    Région : cn-hangzhou

    VSwitchId

    ID du vSwitch : vsw-bp1nzprm8h7mmnl8t****

  5. Supprimer le VPC

    API

    Paramètre

    Valeur d'exemple

    DeleteVpc

    RegionId

    Région : cn-hangzhou

    VpcId

    ID du VPC : vpc-bp1aag0sb9s4i92i3****

Voici un exemple de code illustrant cette procédure :

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