すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:SDKを使用したECSインスタンスの作成と管理

最終更新日:Nov 05, 2024

Alibaba Cloudは、Elastic Compute Service (ECS) インスタンスをプログラムで作成および管理できるさまざまなAPIとSDKを提供し、ビジネス効率を向上させ、システムの自動化を実装します。 このトピックでは、ECS SDK 2.0 for Javaを使用してECSインスタンスを作成し、Cloud Assistant APIを呼び出してECSインスタンスでコマンドを実行し、リソースをリリースする方法について説明します。

準備

  1. Resource Access Management (RAM) ユーザーのAccessKeyペアを作成します。 Alibaba Cloudアカウントには、リソースに対するすべての権限があります。 Alibaba CloudアカウントのAccessKeyペアが漏洩した場合、リソースは大きなリスクにさらされます。 RAM ユーザーの AccessKey ペアを使用することを推奨します。 RAMユーザーのAccessKeyペアを作成する方法については、「AccessKeyペアの作成」をご参照ください。

  2. 使用するRAMユーザーに、ECSおよびVirtual Private Cloud (VPC) リソースに必要な権限を付与します。 このトピックで提供されるサンプルコードは、ECSインスタンス、VPC、vSwitchなどのリソースを作成します。 サンプルコードの実行に必要な権限を付与するには、次の表に示すポリシーをRAMユーザーにアタッチすることを推奨します。

    Alibaba Cloudサービス

    ポリシー

    VPC

    AliyunVPCFullAccess

    ECS

    AliyunECSFullAccess

  3. 環境変数で使用するRAMユーザーのAccessKeyペアを設定します。 このトピックで提供されるサンプルコードは、環境変数からAccessKeyペアを読み取り、Alibaba Cloudサービスにアクセスするための資格情報としてAccessKeyペアを使用します。 環境変数でAccessKeyペアを設定する方法については、「Linux、macOS、およびWindowsで環境変数を設定する」をご参照ください。

  4. Java用ECS SDK 2.0とJava用VPC SDK 2.0を取得します。 このトピックでは、Java用ECS SDK 2.0とJava用VPC SDK 2.0は、Maven依存関係を追加してインストールされます。 その他のインストール方法については、

    ECS SDK for JavaのインストールVPC SDK for Javaをインストールします

    次のサンプルコードは、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>

ECS インスタンスの作成

ECSインスタンスを作成するには、vSwitch ID、セキュリティグループID、イメージIDなどの複数のパラメーターが必要です。 既存のリソースのIDを渡すか、API操作を呼び出して新しいリソースを作成できます。

  1. VPCの作成

    VPCは、クラウド内の専用プライベートネットワークです。 VPCをパブリッククラウドで論理的に分離されたネットワークとして設定および管理できます。

    API 操作

    パラメーター

    説明と例

    CreateVpc

    RegionId

    VPCを作成するリージョンのID。 例: cn-hangzhou

    CidrBlock

    VPC の CIDR ブロックです。 例: 192.168.0.0/16

  2. VPCの詳細を照会します。

    CreateVpc操作を呼び出してVPCを作成した後、API操作を呼び出してVPCのステータスを照会できます。 VPCが [使用可能] 状態の場合は、API操作を呼び出して以降の手順を実行します。

    API 操作

    パラメーター

    説明と例

    DescribeVpcs

    RegionId

    VPC のリージョン ID です。 例: cn-hangzhou

    VpcId

    VPC の ID です。 例: vpc-bp1aag0sb9s4i92i3 ****

  3. vSwitchの作成

    vSwitchは、物理スイッチの機能をサポートするVPC内のネットワークスイッチングデバイスです。 仮想マシン (VM) 間、およびVMと物理ネットワーク間の通信を可能にします。

    API 操作

    パラメーター

    説明と例

    RegionId

    vSwitchを作成するリージョンのID。 例: cn-hangzhou

    CreateVSwitch

    ZoneId

    vSwitchを作成するゾーンのID。 例: cn-hangzhou-i

    VpcId

    vSwitchを作成するVPCのID。 例: vpc-bp1aag0sb9s4i92i3 ****

    CidrBlock

    VSwitch の CIDR ブロックです。 例: 192.168.0.0/24

  4. セキュリティグループを作成します。

    セキュリティグループは、ECSインスタンスのインバウンドトラフィックとアウトバウンドトラフィックを制御する仮想ファイアウォールとして機能します。

    API 操作

    パラメーター

    説明と例

    CreateSecurityGroup

    RegionId

    セキュリティグループを作成するリージョンのID。 例: cn-hangzhou

    VpcId

    セキュリティグループを作成するVPCのID。 例: vpc-bp1aag0sb9s4i92i3 ****

  5. セキュリティグループにインバウンドルールを作成します。

    API 操作

    パラメーター

    説明と例

    AuthorizeSecurityGroup

    RegionId

    セキュリティグループのリージョン ID です。 例: cn-hangzhou

    SecurityGroupId

    セキュリティグループの ID です。 例: sg-bp1esyhwfbqeyudt ****

    IpProtocol

    プロトコル。 例: tcp

    SourceCidrIp

    ソースIPv4 CIDRブロック。 例: 0.0.0.0/0

    PortRange

    ポート範囲。 例:

    • Linuxインスタンス: 22/22

    • Windowsインスタンス: 3389/3389

  6. SSH キーペアを作成します。

    Alibaba Cloudは、ECSインスタンスにログインするための安全で便利なSSHキーペアベースの認証方法を提供します。 キーペアは、SSHプロトコルを介した認証および暗号化通信に使用されます。 SSHキーペアを使用すると、パスワードなしでECSインスタンスにリモートでログインできます。

    API 操作

    パラメーター

    説明と例

    CreateKeyPair

    RegionId

    インスタンスのリージョン ID です。 例: cn-hangzhou

    KeyPairName

    SSH キーペアの名前。 例: sdk-key-pair

  7. ECSインスタンスを作成します。

    ECSは、高性能で安全で低コストのコンピューティング容量を提供し、Webサイトホスティング、アプリケーション開発、データ処理などのさまざまなシナリオに適しています。 ECSを使用すると、アプリケーションを迅速にデプロイして実行し、ビジネスの変化に応じてリソースを柔軟に調整できます。

    API 操作

    パラメーター

    説明と例

    RunInstances

    RegionId

    ECSインスタンスを作成するリージョンのID。 例: cn-hangzhou

    ImageId

    イメージの ID です。 IDがaliyun_3_x64_20G_scc_alibase_20220225.vhdのAlibaba Cloud Linuxイメージを選択することを推奨します。

    InstanceType

    インスタンスタイプを示します。 例: ecs.e-c1m2.xlarge

    SecurityGroupId

    セキュリティグループの ID です。 例: sg-bp1esyhwfbqeyudt ****

    VSwitchId

    VSwitch の ID です。 例: vsw-bp1nzprm8h7mmnl8t ****

    InstanceName

    ECSインスタンス名。 例: sdk-test

    InstanceChargeType

    ECSインスタンスの課金方法。 従量課金インスタンスを作成するには、このパラメーターをPostPaidに設定します。

    説明

    アカウントの残高が十分であることをご確認ください。

    KeyPairName

    SSH キーペアの名前。 例: sdk-key-pair

    SystemDisk.Category

    システムディスクのディスクカテゴリ。 例: cloud_essd

  8. ECSインスタンスのステータスを照会します。

    RunInstancesを呼び出してECSインスタンスを作成した後、ECSインスタンスの初期化に約10秒かかります。 インスタンスが [実行中] 状態の場合にのみ、接続方法を使用してECSインスタンスにログインし、操作を実行してアプリケーションをデプロイできます。 次の表に示すAPI操作を呼び出して、ECSインスタンスのステータスを照会できます。

    API 操作

    パラメーター

    説明と例

    DescribeInstanceStatus

    RegionId

    ECSインスタンスのリージョンID。 例: cn-hangzhou

    InstanceId

    ECSインスタンスのID。 例: ["i-bp17f3kzgtzzj91r ****"]

完全なサンプルコード:

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);
            // Perform subsequent steps only when 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);
            // Create an inbound rule in the security group.
            authorizeSecurityGroup(securityGroupId, ecsClient);
            // Create an SSH key pair. You must store the SSH key pair for later logon to the ECS instance.
            CreateKeyPairResponse keyPair = createKeyPair(ecsClient);
            System.out.println("KeyPair create success, keyPairName :" + keyPair.body.keyPairName);
            // Create an ECS instance. If the ECS instance is in the Running state, the instance 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 other resources fail to be created, you must add mechanisms, such logging, rollback mechanisms, and compensation mechanisms, to properly address the issue. 
            System.out.println(e.getMessage());
        }
    }

    public static class Constants {
        // The name.
        public static final String NAME = "sdk-test";
        // The region.
        public static final String REGION_ID = "cn-hangzhou";
        // The zone.
        public static final String ZONE_ID = "cn-hangzhou-i";
        // The VPC and vSwitch that you 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";
        // The image.
        public static final String IMAGE_ID = "aliyun_3_x64_20G_scc_alibase_20220225.vhd";
        // The instance type.
        public static final String INSTANCE_TYPE = "ecs.e-c1m2.xlarge";
        // The disk category.
        public static final String SYSTEM_DISK_CATEGORY = "cloud_essd";

        // The name of the SSH key pair.
        public static final String KEY_PAIR_NAME = "sdk-key-pair";

        // The endpoints of the services.
        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";
        }

        // The billing method of the instance.
        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);
    }

    /**
     * Create a VPC.
     * This method calls an Alibaba Cloud VPC API operation to create a VPC and returns the ID of the new VPC.
     *
     * @param vpcClient The VPC client.
     * @return 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());
        }
    }

    /**
     * Create a vSwitch.
     * This method calls an Alibaba Cloud VPC client to create a vSwitch. The method sends a request that includes the required parameters of the vSwitch, such as the region ID, zone ID, 
     * CIDR block, VPC ID, and vSwitch name, and returns the ID of the new vSwitch.
     *
     * @param vpcId     The ID of the VPC in which you want to create the vSwitch.
     * @param vpcClient The VPC client.
     * @return 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());
        }
    }

    /**
     * Create a security group.
     *
     * @param vpcId     The ID of the VPC in which you want to create the security group.
     * @param ecsClient The ECS client.
     * @return The ID of the new 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());
        }
    }

    /**
     * Create an inbound rule in the security group.
     * For example, create an inbound rule that allows TCP access on SSH port 22 from anywhere (0.0.0.0/0). 
     *
     * @param securityGroupId The ID of the security group in which you want to create an inbound 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());
        }
    }

    /**
     * Create an ECS instance.
     *
     * @param ecsClient       The ECS client.
     * @param vSwitchId       The ID of the vSwitch.
     * @param securityGroupId The ID of the security group.
     * @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());
        }
    }

    /**
     * Create an SSH key pair.
     *
     * @param ecsClient The ECS client.
     * @return The response object for creating an SSH key pair.
     */
    public static CreateKeyPairResponse createKeyPair(com.aliyun.ecs20140526.Client ecsClient) {
        try {
            // Create a request object for creating an SSH key pair and specify a region ID, a key pair name, and a resource group ID in the request object.
            CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest()
                    .setRegionId(Constants.REGION_ID)
                    .setKeyPairName(Constants.KEY_PAIR_NAME);
            // Use the ECS client to send the request to create an SSH key pair and return a response object.
            return ecsClient.createKeyPair(createKeyPairRequest);
        } catch (Exception e) {
            // Throw a runtime exception that includes an error message if the SSH key pair fails to be created.
            throw new RuntimeException("createKeyPair failed: " + e.getMessage());
        }
    }

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

    /**
     * Query the status of ECS instances.
     *
     * @param instanceIds The IDs of ECS instances.
     * @param ecsClient   The ECS client.
     * @return The response object for querying the status of ECS instances.
     */
    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());
        }
    }
}

ECSインスタンスにログインせずにO&Mを実行する

Cloud Assistantは、ECS用に開発されたネイティブの自動O&Mツールです。 Cloud Assistantを使用すると、シェル、PowerShell、バッチコマンドなどのコマンドをバッチ実行して、インスタンスにログインしたり、ジャンプサーバーを使用したりすることなく、パスワードなしでECSインスタンス上でさまざまなタスクを実行できます。 Cloud Assistantを使用して、自動化されたO&Mスクリプトの実行、ポーリングプロセス、ソフトウェアのインストールまたはアンインストール、サービスの開始または停止、パッチまたはセキュリティアップデートのインストールを行うことができます。 詳細については、「概要」をご参照ください。

たとえば、RunCommand操作を呼び出して、Cloud Assistantコマンドを実行してECSインスタンスにJavaおよびTomcatをインストールできます。

API 操作

パラメーター

説明と例

RunCommand

RegionId

リージョンの ID です。 例: cn-hangzhou

タイプ

コマンドの言語タイプ。 例: RunShellScript

CommandContent

コマンドの内容。 例:

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

タイムアウト

必要に応じて、 コマンド実行のタイムアウト時間。 単位は秒です。 例: 60

InstanceId

ECSインスタンスのID。 例: ["i-bp17f3kzgtzzj91r ****"]

完全なサンプルコード:

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

        // The endpoints of the services.
        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";
        }

        // The type of the command.
        public static final class COMMAND_TYPE {
            // Shell command, applicable to Windows instances. 
            public static final String RUN_SHELL_SCRIPT = "RunShellScript";
            // Batch command, applicable to Windows instances. 
            public static final String RUN_BAT_SCRIPT = "RunBatScript";
            // PowerShell command, applicable to Windows instances. 
            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: shell command, applicable to Linux instances. 
            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);
        }
    }
}

リソースのリリース

作成したリソースが不要になった場合は、API操作を呼び出してリソースを解放します。

説明

API操作を呼び出して、ビジネス要件に基づいてリソースをリリースします。 次の例では、前のセクションで作成されたすべてのリソースがリリースされます。

  1. ECSインスタンスをリリースします。

    API 操作

    パラメーター

    説明と例

    DeleteInstances

    RegionId

    ECSインスタンスのリージョンID。 例: cn-hangzhou

    InstanceId

    ECSインスタンスのID。 例: i-bp17f3kzgtzzj91r ****

  2. SSHキーペアを削除します。

    API 操作

    パラメーター

    説明と例

    DeleteKeyPairs

    RegionId

    SSHキーペアのリージョンID。 例: cn-hangzhou

    KeyPairNames

    SSH キーペアの名前。 例: ["sdk-key-pair"]

  3. セキュリティグループを削除します。

    API 操作

    パラメーター

    説明と例

    DeleteSecurityGroup

    RegionId

    セキュリティグループのリージョン ID です。 例: cn-hangzhou

    SecurityGroupId

    セキュリティグループの ID です。 例: sg-bp1esyhwfbqeyudt ****

  4. vSwitchを削除します。

    API 操作

    パラメーター

    説明と例

    DeleteVSwitch

    RegionId

    vSwitchのリージョンID。 例: cn-hangzhou

    VSwitchId

    VSwitch の ID です。 例: vsw-bp1nzprm8h7mmnl8t ****

  5. VPC を削除します。

    API 操作

    パラメーター

    説明と例

    DeleteVpc

    RegionId

    VPC のリージョン ID です。 例: cn-hangzhou

    VpcId

    VPC の ID です。 例: vpc-bp1aag0sb9s4i92i3 ****

サンプルコード:

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 an ECS instance.
            executorService.schedule(() -> deleteInstance(instanceId, ecsClient), 1, TimeUnit.SECONDS);
            // Delete an SSH key pair.
            executorService.schedule(() -> deleteKeyPairs(keyPairName, ecsClient), 1, TimeUnit.SECONDS);
            // Delete a security group.
            executorService.schedule(() -> deleteSecurityGroup(securityGroupId, ecsClient), 60, TimeUnit.SECONDS);
            // Delete a vSwitch.
            executorService.schedule(() -> deleteVSwitch(vSwitchId, vpcClient), 60, TimeUnit.SECONDS);
            // Delete a VPC.
            executorService.schedule(() -> deleteVpc(vpcId, vpcClient), 65, TimeUnit.SECONDS);
        } catch (Exception e) {
            System.err.println("An error occurred: " + e.getMessage());
            // Handle exceptions. Some resources may fail to be deleted. Add mechanisms to properly handle the deletion failures. 
        } finally {
            executorService.shutdown();
        }
    }

    public static class Constants {
        // The endpoints of the services.
        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";
        }

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

    /**
     * Delete a VPC.
     *
     * @param vpcId     The ID of the VPC that you want 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());
        }
    }

    /**
     * Delete a 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());
        }
    }

    /**
     * Delete a security group.
     *
     * @param securityGroupId The ID of the security group that you want 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());
        }
    }

    /**
     * Delete an ECS instance.
     *
     * @param instanceId The ID of the ECS instance that you want 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());
        }
    }

    /**
     * Delete an SSH key pair.
     *
     * @param keyPairName The name of the SSH key pair.
     * @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 an SSH key pair and specify the region ID and the name of the SSH key pair in the request.
            DeleteKeyPairsRequest deleteKeyPairsRequest = new DeleteKeyPairsRequest()
                    .setRegionId(Constants.REGION_ID)
                    .setKeyPairNames(new Gson().toJson(Collections.singletonList(keyPairName)));
            ecsClient.deleteKeyPairs(deleteKeyPairsRequest);
        } catch (Exception e) {
            // Throw an exception that includes an error message if the SSH key pair fails to be deleted.
            throw new RuntimeException("DeleteKeyPairs failed: " + e.getMessage());
        }
    }
}