Alibaba Cloudは、Elastic Compute Service (ECS) インスタンスをプログラムで作成および管理できるさまざまなAPIとSDKを提供し、ビジネス効率を向上させ、システムの自動化を実装します。 このトピックでは、ECS SDK 2.0 for Javaを使用してECSインスタンスを作成し、Cloud Assistant APIを呼び出してECSインスタンスでコマンドを実行し、リソースをリリースする方法について説明します。
準備
Resource Access Management (RAM) ユーザーのAccessKeyペアを作成します。 Alibaba Cloudアカウントには、リソースに対するすべての権限があります。 Alibaba CloudアカウントのAccessKeyペアが漏洩した場合、リソースは大きなリスクにさらされます。 RAM ユーザーの AccessKey ペアを使用することを推奨します。 RAMユーザーのAccessKeyペアを作成する方法については、「AccessKeyペアの作成」をご参照ください。
使用するRAMユーザーに、ECSおよびVirtual Private Cloud (VPC) リソースに必要な権限を付与します。 このトピックで提供されるサンプルコードは、ECSインスタンス、VPC、vSwitchなどのリソースを作成します。 サンプルコードの実行に必要な権限を付与するには、次の表に示すポリシーをRAMユーザーにアタッチすることを推奨します。
Alibaba Cloudサービス
ポリシー
VPC
AliyunVPCFullAccess
ECS
AliyunECSFullAccess
環境変数で使用するRAMユーザーのAccessKeyペアを設定します。 このトピックで提供されるサンプルコードは、環境変数からAccessKeyペアを読み取り、Alibaba Cloudサービスにアクセスするための資格情報としてAccessKeyペアを使用します。 環境変数でAccessKeyペアを設定する方法については、「Linux、macOS、およびWindowsで環境変数を設定する」をご参照ください。
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をインストールします。
ECS インスタンスの作成
ECSインスタンスを作成するには、vSwitch ID、セキュリティグループID、イメージIDなどの複数のパラメーターが必要です。 既存のリソースのIDを渡すか、API操作を呼び出して新しいリソースを作成できます。
VPCの作成
VPCは、クラウド内の専用プライベートネットワークです。 VPCをパブリッククラウドで論理的に分離されたネットワークとして設定および管理できます。
API 操作
パラメーター
説明と例
RegionId
VPCを作成するリージョンのID。 例: cn-hangzhou
CidrBlock
VPC の CIDR ブロックです。 例: 192.168.0.0/16
VPCの詳細を照会します。
CreateVpc操作を呼び出してVPCを作成した後、API操作を呼び出してVPCのステータスを照会できます。 VPCが [使用可能] 状態の場合は、API操作を呼び出して以降の手順を実行します。
API 操作
パラメーター
説明と例
RegionId
VPC のリージョン ID です。 例: cn-hangzhou
VpcId
VPC の ID です。 例: vpc-bp1aag0sb9s4i92i3 ****
vSwitchの作成
vSwitchは、物理スイッチの機能をサポートするVPC内のネットワークスイッチングデバイスです。 仮想マシン (VM) 間、およびVMと物理ネットワーク間の通信を可能にします。
API 操作
パラメーター
説明と例
RegionId
vSwitchを作成するリージョンのID。 例: cn-hangzhou
ZoneId
vSwitchを作成するゾーンのID。 例: cn-hangzhou-i
VpcId
vSwitchを作成するVPCのID。 例: vpc-bp1aag0sb9s4i92i3 ****
CidrBlock
VSwitch の CIDR ブロックです。 例: 192.168.0.0/24
セキュリティグループを作成します。
セキュリティグループは、ECSインスタンスのインバウンドトラフィックとアウトバウンドトラフィックを制御する仮想ファイアウォールとして機能します。
API 操作
パラメーター
説明と例
RegionId
セキュリティグループを作成するリージョンのID。 例: cn-hangzhou
VpcId
セキュリティグループを作成するVPCのID。 例: vpc-bp1aag0sb9s4i92i3 ****
セキュリティグループにインバウンドルールを作成します。
API 操作
パラメーター
説明と例
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
SSH キーペアを作成します。
Alibaba Cloudは、ECSインスタンスにログインするための安全で便利なSSHキーペアベースの認証方法を提供します。 キーペアは、SSHプロトコルを介した認証および暗号化通信に使用されます。 SSHキーペアを使用すると、パスワードなしでECSインスタンスにリモートでログインできます。
API 操作
パラメーター
説明と例
RegionId
インスタンスのリージョン ID です。 例: cn-hangzhou
KeyPairName
SSH キーペアの名前。 例: sdk-key-pair
ECSインスタンスを作成します。
ECSは、高性能で安全で低コストのコンピューティング容量を提供し、Webサイトホスティング、アプリケーション開発、データ処理などのさまざまなシナリオに適しています。 ECSを使用すると、アプリケーションを迅速にデプロイして実行し、ビジネスの変化に応じてリソースを柔軟に調整できます。
API 操作
パラメーター
説明と例
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
ECSインスタンスのステータスを照会します。
RunInstancesを呼び出してECSインスタンスを作成した後、ECSインスタンスの初期化に約10秒かかります。 インスタンスが [実行中] 状態の場合にのみ、接続方法を使用してECSインスタンスにログインし、操作を実行してアプリケーションをデプロイできます。 次の表に示すAPI操作を呼び出して、ECSインスタンスのステータスを照会できます。
API 操作
パラメーター
説明と例
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 操作 | パラメーター | 説明と例 |
RegionId | リージョンの ID です。 例: cn-hangzhou | |
タイプ | コマンドの言語タイプ。 例: RunShellScript | |
CommandContent | コマンドの内容。 例:
| |
タイムアウト | 必要に応じて、 コマンド実行のタイムアウト時間。 単位は秒です。 例: 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操作を呼び出して、ビジネス要件に基づいてリソースをリリースします。 次の例では、前のセクションで作成されたすべてのリソースがリリースされます。
ECSインスタンスをリリースします。
API 操作
パラメーター
説明と例
RegionId
ECSインスタンスのリージョンID。 例: cn-hangzhou
InstanceId
ECSインスタンスのID。 例: i-bp17f3kzgtzzj91r ****
SSHキーペアを削除します。
API 操作
パラメーター
説明と例
RegionId
SSHキーペアのリージョンID。 例: cn-hangzhou
KeyPairNames
SSH キーペアの名前。 例: ["sdk-key-pair"]
セキュリティグループを削除します。
API 操作
パラメーター
説明と例
RegionId
セキュリティグループのリージョン ID です。 例: cn-hangzhou
SecurityGroupId
セキュリティグループの ID です。 例: sg-bp1esyhwfbqeyudt ****
vSwitchを削除します。
API 操作
パラメーター
説明と例
RegionId
vSwitchのリージョンID。 例: cn-hangzhou
VSwitchId
VSwitch の ID です。 例: vsw-bp1nzprm8h7mmnl8t ****
VPC を削除します。
API 操作
パラメーター
説明と例
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());
}
}
}