このトピックでは、SDK を使用して Cloud Control API を呼び出し、リソースを管理する方法について説明します。このトピックでは、Virtual Private Cloud (VPC) の vSwitch を例として使用し、サンプルコードは Java で記述されています。このチュートリアルでは、SDK のインポート、リソースメタデータのクエリ、リソースの作成、クエリ、更新、削除、および Cloud Control API 操作で非同期操作が有効になっている場合のタスクステータスのクエリの手順について説明します。
前提条件
RAM ユーザー:
RAM ユーザーの AccessKey ペアを作成します。Alibaba Cloud アカウントは、リソースに対するすべての権限を持っています。Alibaba Cloud アカウントの AccessKey ペアが漏洩した場合、リソースは大きなリスクにさらされます。RAM ユーザーの AccessKey ペアを使用することをお勧めします。詳細については、「AccessKey ペアを作成する」をご参照ください。
使用する RAM ユーザーに VPC リソースに必要な権限を付与します。この操作手順には、VPC の vSwitch に対するさまざまな操作が含まれます。システムポリシーとして AliyunVPCFullAccess を選択する必要があります。ビジネス要件に基づいてカスタムポリシーを作成できます。詳細については、「カスタムポリシーを作成する」をご参照ください。
RAM ユーザーの AccessKey ペアは、環境変数に設定されています。詳細については、「Linux、macOS、および Windows で環境変数を設定する」をご参照ください。
VPC
vSwitch が関連付けられている VPC を作成する必要があります。詳細については、「VPC を作成および管理する」をご参照ください。
リソースメタデータ
リソース管理は、リソースメタデータに基づいて実装されます。 リソースメタデータ を理解している必要があります。
同期操作と非同期操作
リソースの作成と削除は、Cloud Control API 操作と同期して実行されません。詳細については、「同期操作と非同期操作」をご参照ください。Cloud Control API で非同期操作が有効になっている場合にタスクステータスをクエリする場合は、「タスクステータスをクエリする」をご参照ください。
Java
Java 8 以降を使用する必要があります。
プロジェクトを初期化する
CloudControlAPI SDK をインストールして、環境変数内の AccessKey を取得します。
SDK をプロジェクトにインポートします。詳細については、「CloudControlAPI SDK をインストールする」をご参照ください。SDK を使用して、Cloud Control API を統合および使用できます。この例では、SDK は次のようにインポートされます。
<dependency> <groupId>com.aliyun</groupId> <artifactId>cloudcontrol20220830</artifactId> <version>1.1.1</version> </dependency>リソース管理を実装する ExampleDemo を作成します。環境変数内の AccessKey ペアを取得し、クライアントを初期化するために、createClient メソッドを ExampleDemo に追加します。サンプルコード:
/** * クライアントを初期化します。 * @return Client */ public static Client createClient() throws Exception { // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用にのみ提供されています。 Config config = new Config() // 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認します。 .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) // 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認します。 .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); # エンドポイントの詳細については、https://api.aliyun.com/product/cloudcontrol をご参照ください。 config.endpoint = "cloudcontrol.aliyuncs.com"; return new Client(config); }
リソースタイプの詳細をクエリする
プロダクトコードとリソースタイプコードに基づいて、リソースタイプの詳細をクエリできます。返されるデータはリソースメタデータです。作成、クエリ、リスト、削除などの後続のリソース管理操作は、リソースメタデータに基づいて実装されます。
GetResourceType 操作を呼び出して、リソースタイプの詳細を取得できます。この例では、VPC の vSwitch を使用します。VPC のプロダクトコードは VPC で、vSwitch のリソースタイプコードは vSwitch です。サンプルコード:
説明プロダクトコードとリソースコードを取得する方法の詳細については、「サービスコードとリソースタイプコードはどこで確認できますか?」をご参照ください。
/** * リソースタイプの詳細をクエリします。 * @param productCode プロダクトコード。この例では「VPC」です。 * @param resourceTypeCode リソースタイプコード。この例では「vSwitch」です。 * @param client クライアント * @return resourceTypeWithOptions レスポンス */ public GetResourceTypeResponse getResourceType(String productCode, String resourceTypeCode, Client client) throws Exception { String requestPath = "/api/v1/providers/Aliyun/products/" + productCode + "/resourceTypes/" + resourceTypeCode; com.aliyun.cloudcontrol20220830.models.GetResourceTypeHeaders getResourceTypeHeaders = new com.aliyun.cloudcontrol20220830.models.GetResourceTypeHeaders() .setXAcsAcceptLanguage("zh_CH"); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); // 必要に応じて、API 操作のレスポンスを表示するための独自のコードを記述します。 GetResourceTypeResponse resourceTypeWithOptions = client.getResourceTypeWithOptions(requestPath, getResourceTypeHeaders, runtime); return resourceTypeWithOptions; }レスポンスボディが vSwitch であるリソースメタデータが返されます。リソースメタデータの解釈方法の詳細については、「GetResourceType - リソースタイプをクエリする」をご参照ください。この操作では、レスポンスのボディは次のとおりです。
リソースを作成する
更新、クエリ、削除などの後続の操作のために vSwitch を作成します。
CreateResource 操作を呼び出し、リソースメタデータに基づいてリクエストパラメータを入力できます。サンプルコード:
/** * リソースを作成します * @param regionId リージョン ID * @param productCode プロダクトコード。この例では「VPC」です。 * @param resourceTypeCode リソースタイプコード。この例では「vSwitch」です。 * @param client RAM ユーザー (クライアント) * @return resourceWithOptions レスポンス */ public CreateResourceResponse createResource(String regionId, String productCode, String resourceTypeCode, Client client) throws Exception { String requestPath = "/api/v1/providers/Aliyun/products/" + productCode + "/resources/" + resourceTypeCode; // レスポンスパラメータ Map body = new HashMap(); body.put("VpcId", "vpc-m5esjf3a6b380olet****"); // VPC の ID body.put("CidrBlock", "172.16.24.0/24"); // vSwitch の CIDR ブロック body.put("ZoneId", "cn-qingdao-b"); // ゾーンの ID CreateResourceRequest createResourceRequest = new CreateResourceRequest() .setRegionId(regionId) .setBody(body); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); Map<String, String> headers = new HashMap<>(); CreateResourceResponse resourceWithOptions = client.createResourceWithOptions(requestPath, createResourceRequest, headers, runtime); return resourceWithOptions; }呼び出しが成功した場合、statusCode=202 が返されます。これは、タスクが非同期操作であることを示します。タスクステータスをさらにクエリする必要があります。詳細については、「タスクをクエリする」をご参照ください。リソースをクエリ、更新、および削除するには、resourceid を記録する必要があります。レスポンスボディは次のとおりです。
リソースをリストする
GetResources 操作を呼び出して、すべての vSwitch リソースをリストできます。サンプルコード:
/** * リソースをリストします * @param regionId リージョン ID * @param productCode プロダクトコード。この例では「VPC」です。 * @param resourceTypeCode リソースタイプコード。この例では「vSwitch」です。 * @param client RAM ユーザー (クライアント) * @return resourceWithOptions レスポンス */ public GetResourcesResponse getResources(String regionId, String productCode, String resourceTypeCode, Client client) throws Exception { String requestPath = "/api/v1/providers/aliyun/products/" + productCode + "/resources/" + resourceTypeCode; GetResourcesRequest getResourcesRequest = new GetResourcesRequest() .setRegionId(regionId); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); Map<String, String> headers = new HashMap<>(); GetResourcesResponse resourcesWithOptions = client.getResourcesWithOptions(requestPath, getResourcesRequest, headers, runtime); return resourcesWithOptions; }呼び出しが成功した場合、次のレスポンスボディが返されます。
リソースを更新する
UpdateResource 操作を呼び出して、指定されたリソースを更新できます。サンプルコード:
重要誤操作によって他のリソースに影響を与えないように、リソースを更新する際は注意してください。
/** * リソースを更新します * @param regionId リージョン ID * @param productCode プロダクトコード。この例では「VPC」です。 * @param productCode プロダクトコード。この例では「vSwitch」です。 * @param resourceId リソースの ID。このパラメータは、この例で作成された vSwitch の ID を指定します。 * @param client RAM ユーザー (クライアント) * @return resourceWithOptions レスポンス */ public UpdateResourceResponse updateResource(String regionId, String productCode, String resourceTypeCode, String resourceId, Client client) throws Exception { String requestPath = "/api/v1/providers/Aliyun/products/" + productCode + "/resources/" + resourceTypeCode + "/" + resourceId; // レスポンスパラメータ Map body = new HashMap(); body.put("Description", "テスト更新"); UpdateResourceRequest updateResourceRequest = new UpdateResourceRequest() .setRegionId(regionId) .setBody(body); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); Map<String, String> headers = new HashMap<>(); UpdateResourceResponse updateResourceResponse = client.updateResourceWithOptions(requestPath, updateResourceRequest, headers, runtime); return updateResourceResponse; }レスポンスコード statusCode=200 は、リクエストが成功したことを示します。次のレスポンスボディが返されます。リソースの詳細をクエリして、リソースが更新されたかどうかを確認できます。詳細については、「リソースをクエリする」をご参照ください。
リソースをクエリする
GetResources 操作を呼び出して、指定されたリソースをクエリできます。サンプルコード:
/** * リソースをクエリします * @param regionId リージョン ID * @param productCode プロダクトコード。この例では「VPC」です。 * @param productCode プロダクトコード。この例では「vSwitch」です。 * @param resourceId リソースの ID。このパラメータは、この例で作成された vSwitch の ID を指定します。 * @param client RAM ユーザー (クライアント) * @return resourceWithOptions レスポンス */ public GetResourcesResponse getResources(String regionId, String productCode, String resourceTypeCode, String resourceId, Client client) throws Exception { String requestPath = "/api/v1/providers/aliyun/products/" + productCode + "/resources/" + resourceTypeCode + "/" + resourceId; Map<String, String> body = new HashMap<>(); GetResourcesRequest getResourcesRequest = new GetResourcesRequest() .setRegionId(regionId); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); Map<String, String> headers = new HashMap<>(); GetResourcesResponse resourcesWithOptions = client.getResourcesWithOptions(requestPath, getResourcesRequest, headers, runtime); return resourcesWithOptions; }リクエストが成功した場合、次のボディが返されます。
リソースを削除する
DeleteResource 操作を呼び出して、指定されたリソースを削除できます。サンプルコード:
重要誤操作によって他のリソースに影響を与えないように、リソースを削除する際は注意してください。
/** * リソースを削除します * @param regionId リージョン ID * @param productCode プロダクトコード。この例では「VPC」です。 * @param productCode プロダクトコード。この例では「vSwitch」です。 * @param resourceId リソースの ID。このパラメータは、この例で作成された vSwitch の ID を指定します。 * @param client RAM ユーザー (クライアント) * @return deleteResourceResponse レスポンス */ public DeleteResourceResponse deleteResource(String regionId, String productCode, String resourceTypeCode, String resourceId, Client client) throws Exception { String requestPath = "/api/v1/providers/Aliyun/products/" + productCode + "/resources/" + resourceTypeCode + "/" + resourceId; DeleteResourceRequest deleteResourceRequest = new DeleteResourceRequest() .setRegionId(regionId); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); Map<String, String> headers = new HashMap<>(); DeleteResourceResponse deleteResourceResponse = client.deleteResourceWithOptions(requestPath, deleteResourceRequest, headers, runtime); return deleteResourceResponse; }呼び出しが成功した場合、statusCode=202 が返されます。これは、タスクが非同期操作であることを示します。タスクステータスをさらにクエリする必要があります。詳細については、「タスクステータスをクエリする」をご参照ください。
タスクステータスをクエリする
指定されたタスクのステータスをクエリします。
GetTask 操作を呼び出して、指定されたタスクのステータスをクエリできます。呼び出し例は、vSwitch が作成されているタスクをクエリすることです。
/** * 非同期タスクをクエリします * @param taskId タスクの ID * @param client RAM ユーザー (クライアント) * @return taskWithOptions レスポンス */ public GetTaskResponse getTask(String taskId, Client client) throws Exception { com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); Map<String, String> headers = new HashMap<>(); GetTaskResponse taskWithOptions = client.getTaskWithOptions(taskId, headers, runtime); return taskWithOptions; }リクエストが成功した場合、ボディの status="Succeeded" が返されます。これは、vSwitch が作成されたことを示します。
完全なサンプルコード
このチュートリアルの完全な ExampleDemo は次のとおりです。