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

Cloud Control API:SDK を使用してリソースを管理する

最終更新日:Mar 14, 2025

このトピックでは、SDK を使用して Cloud Control API を呼び出し、リソースを管理する方法について説明します。このトピックでは、Virtual Private Cloud (VPC) の vSwitch を例として使用し、サンプルコードは Java で記述されています。このチュートリアルでは、SDK のインポート、リソースメタデータのクエリ、リソースの作成、クエリ、更新、削除、および Cloud Control API 操作で非同期操作が有効になっている場合のタスクステータスのクエリの手順について説明します。

前提条件

  1. RAM ユーザー:

    • RAM ユーザーの AccessKey ペアを作成します。Alibaba Cloud アカウントは、リソースに対するすべての権限を持っています。Alibaba Cloud アカウントの AccessKey ペアが漏洩した場合、リソースは大きなリスクにさらされます。RAM ユーザーの AccessKey ペアを使用することをお勧めします。詳細については、「AccessKey ペアを作成する」をご参照ください。

    • 使用する RAM ユーザーに VPC リソースに必要な権限を付与します。この操作手順には、VPC の vSwitch に対するさまざまな操作が含まれます。システムポリシーとして AliyunVPCFullAccess を選択する必要があります。ビジネス要件に基づいてカスタムポリシーを作成できます。詳細については、「カスタムポリシーを作成する」をご参照ください。

    • RAM ユーザーの AccessKey ペアは、環境変数に設定されています。詳細については、「Linux、macOS、および Windows で環境変数を設定する」をご参照ください。

  2. VPC

    vSwitch が関連付けられている VPC を作成する必要があります。詳細については、「VPC を作成および管理する」をご参照ください。

  3. リソースメタデータ

    リソース管理は、リソースメタデータに基づいて実装されます。 リソースメタデータ を理解している必要があります。

  4. 同期操作と非同期操作

    リソースの作成と削除は、Cloud Control API 操作と同期して実行されません。詳細については、「同期操作と非同期操作」をご参照ください。Cloud Control API で非同期操作が有効になっている場合にタスクステータスをクエリする場合は、「タスクステータスをクエリする」をご参照ください。

  5. Java

    Java 8 以降を使用する必要があります。

プロジェクトを初期化する

CloudControlAPI SDK をインストールして、環境変数内の AccessKey を取得します。

  1. SDK をプロジェクトにインポートします。詳細については、「CloudControlAPI SDK をインストールする」をご参照ください。SDK を使用して、Cloud Control API を統合および使用できます。この例では、SDK は次のようにインポートされます。

    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>cloudcontrol20220830</artifactId>
        <version>1.1.1</version>
    </dependency>
  2. リソース管理を実装する 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);
    }

リソースタイプの詳細をクエリする

プロダクトコードとリソースタイプコードに基づいて、リソースタイプの詳細をクエリできます。返されるデータはリソースメタデータです。作成、クエリ、リスト、削除などの後続のリソース管理操作は、リソースメタデータに基づいて実装されます。

  1. 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;
    }
  2. レスポンスボディが vSwitch であるリソースメタデータが返されます。リソースメタデータの解釈方法の詳細については、「GetResourceType - リソースタイプをクエリする」をご参照ください。この操作では、レスポンスのボディは次のとおりです。

    resourceTypeWithOptions.getBody()

    {
      "requestId": "DF147125-4F39-57EF-8E9C-554FE0E3AB77",
      "resourceType": {
        "product": "VPC",
        "listResponseProperties": [
          "/properties/VSwitchName",
          "/properties/ResourceGroupId",
          "/properties/CidrBlock",
          "/properties/Tags/items",
          "/properties/Description",
          "/properties/VSwitchId",
          "/properties/Status",
          "/properties/Tags/items/properties/TagValue",
          "/properties/Ipv6CidrBlock",
          "/properties/CreateTime",
          "/properties/RouteTableId",
          "/properties/VpcId",
          "/properties/Tags/items/properties/TagKey",
          "/properties/ZoneId",
          "/properties/Tags",
          "/properties/IsDefault",
          "/properties/AvailableIpAddressCount"
        ],
        "updateOnlyProperties": [
    
        ],
        "readOnlyProperties": [
          "/properties/Status",
          "/properties/CreateTime",
          "/properties/AvailableIpAddressCount"
        ],
        "createOnlyProperties": [
          "/properties/VpcIpv6CidrBlock"
        ],
        "listOnlyProperties": [
    
        ],
        "primaryIdentifier": "/properties/VSwitchId",
        "getOnlyProperties": [
    
        ],
        "required": [
          "CidrBlock",
          "VpcId",
          "ZoneId"
        ],
        "publicProperties": [
          "/properties/RouteTableId",
          "/properties/CidrBlock",
          "/properties/Description",
          "/properties/VSwitchId",
          "/properties/AvailableIpAddressCount",
          "/properties/CreateTime",
          "/properties/VSwitchName",
          "/properties/ResourceGroupId",
          "/properties/VpcId",
          "/properties/ZoneId",
          "/properties/Status",
          "/properties/RegionId",
          "/properties/IsDefault",
          "/properties/Ipv6CidrBlock",
          "/properties/Tags",
          "/properties/Tags/items",
          "/properties/Tags/items/properties/TagValue",
          "/properties/Tags/items/properties/TagKey"
        ],
        "filterProperties": [
          "/properties/VSwitchName",
          "/properties/ResourceGroupId",
          "/properties/RouteTableId",
          "/properties/VpcId",
          "/properties/VSwitchId",
          "/properties/ZoneId",
          "/properties/IsDefault"
        ],
        "getResponseProperties": [
          "/properties/ResourceGroupId",
          "/properties/CidrBlock",
          "/properties/VSwitchName",
          "/properties/Tags/items",
          "/properties/Description",
          "/properties/VSwitchId",
          "/properties/Status",
          "/properties/Tags/items/properties/TagValue",
          "/properties/Ipv6CidrBlock",
          "/properties/CreateTime",
          "/properties/RouteTableId",
          "/properties/VpcId",
          "/properties/Tags/items/properties/TagKey",
          "/properties/ZoneId",
          "/properties/Tags",
          "/properties/IsDefault",
          "/properties/AvailableIpAddressCount"
        ],
        "handlers": {
          "get": {
            "permissions": [
              "vpc:DescribeVSwitchAttributes",
              "vpc:ListTagResources"
            ]
          },
          "create": {
            "permissions": [
              "vpc:CreateVSwitch"
            ]
          },
          "update": {
            "permissions": [
              "vpc:TagResources",
              "vpc:UnTagResources",
              "vpc:ModifyVSwitchAttribute"
            ]
          },
          "list": {
            "permissions": [
              "vpc:DescribeVSwitches"
            ]
          },
          "delete": {
            "permissions": [
              "vpc:DeleteVSwitch"
            ]
          }
        },
        "deleteOnlyProperties": [
    
        ],
        "updateTypeProperties": [
          "/properties/Description",
          "/properties/VSwitchName",
          "/properties/Ipv6CidrBlock",
          "/properties/Tags",
          "/properties/Tags/items",
          "/properties/Tags/items/properties/TagValue",
          "/properties/Tags/items/properties/TagKey"
        ],
        "properties": {
          "Status": {
            "isRequired": false,
            "extMonitorInfo": false,
            "default": "",
            "deprecated": false,
            "pattern": "",
            "description": "リソースステータスを表すリソース属性フィールド",
            "readOnly": true,
            "sensitive": false,
            "title": "リソースステータス",
            "type": "string",
            "updateType": false
          },
          "IsDefault": {
            "isRequired": false,
            "extMonitorInfo": false,
            "default": "",
            "deprecated": false,
            "description": "vSwitch がゾーンのデフォルト vSwitch であるかどうかを示します",
            "readOnly": true,
            "sensitive": false,
            "title": "vSwitch がゾーンのデフォルト vSwitch であるかどうかを示します",
            "type": "boolean",
            "updateType": false
          },
          "RouteTableId": {
            "isRequired": false,
            "extMonitorInfo": false,
            "default": "",
            "deprecated": false,
            "pattern": "",
            "description": "vSwitch に関連付けられているルートテーブルの ID",
            "readOnly": true,
            "sensitive": false,
            "title": "vSwitch に関連付けられているルートテーブルの ID",
            "type": "string",
            "updateType": false
          },
          "Description": {
            "isRequired": false,
            "extMonitorInfo": false,
            "description": "vSwitch の説明",
            "readOnly": false,
            "sensitive": false,
            "title": "vSwitch の説明",
            "type": "string",
            "updateType": true
          },
          "ResourceGroupId": {
            "isRequired": false,
            "extMonitorInfo": false,
            "default": "",
            "deprecated": false,
            "pattern": "",
            "description": "vSwitch が属するリソースグループの ID",
            "readOnly": true,
            "sensitive": false,
            "title": "vSwitch が属するリソースグループの ID",
            "type": "string",
            "updateType": false
          },
          "ZoneId": {
            "isRequired": true,
            "extMonitorInfo": false,
            "description": "ゾーンを表すリソース属性フィールド",
            "readOnly": false,
            "sensitive": false,
            "title": "ゾーンの ID",
            "type": "string",
            "updateType": false
          },
          "VSwitchId": {
            "isRequired": false,
            "extMonitorInfo": false,
            "description": "vSwitch の ID",
            "readOnly": false,
            "sensitive": false,
            "title": "vSwitch の ID",
            "type": "string",
            "updateType": false
          },
          "AvailableIpAddressCount": {
            "isRequired": false,
            "extMonitorInfo": false,
            "default": "",
            "deprecated": false,
            "format": "int64",
            "pattern": "",
            "description": "vSwitch で使用可能な IP アドレスの数",
            "readOnly": true,
            "sensitive": false,
            "title": "vSwitch で使用可能な IP アドレスの数",
            "type": "integer",
            "updateType": false
          },
          "CreateTime": {
            "isRequired": false,
            "extMonitorInfo": false,
            "default": "",
            "deprecated": false,
            "pattern": "",
            "description": "vSwitch が作成された時刻",
            "readOnly": true,
            "sensitive": false,
            "title": "vSwitch が作成された時刻",
            "type": "string",
            "updateType": false
          },
          "CidrBlock": {
            "isRequired": true,
            "extMonitorInfo": false,
            "description": "vSwitch の CIDR ブロック",
            "readOnly": false,
            "sensitive": false,
            "title": "vSwitch の CIDR ブロック",
            "type": "string",
            "updateType": false
          },
          "VpcId": {
            "isRequired": true,
            "extMonitorInfo": false,
            "description": "VPC の ID",
            "readOnly": false,
            "sensitive": false,
            "title": "VPC の ID",
            "type": "string",
            "updateType": false
          },
          "VSwitchName": {
            "isRequired": false,
            "extMonitorInfo": false,
            "description": "vSwitch の名前",
            "readOnly": false,
            "sensitive": false,
            "title": "vSwitch の名前",
            "type": "string",
            "updateType": true
          },
          "VpcIpv6CidrBlock": {
            "isRequired": false,
            "extMonitorInfo": false,
            "default": "",
            "deprecated": false,
            "pattern": "",
            "description": "VPC の IPv6 CIDR ブロック",
            "operatePrivateType": [
              "create"
            ],
            "readOnly": false,
            "sensitive": false,
            "title": "VPC の IPv6 CIDR ブロック",
            "type": "string",
            "updateType": false
          },
          "RegionId": {
            "isRequired": false,
            "extMonitorInfo": false,
            "description": "リージョンを表すリソース属性フィールド",
            "readOnly": false,
            "sensitive": false,
            "title": "リージョンの ID",
            "type": "string",
            "updateType": false
          },
          "Ipv6CidrBlock": {
            "isRequired": false,
            "extMonitorInfo": false,
            "description": "vSwitch の IPv6 CIDR ブロック",
            "readOnly": false,
            "sensitive": false,
            "title": "vSwitch の IPv6 CIDR ブロック",
            "type": "string",
            "updateType": true
          },
          "Tags": {
            "isRequired": false,
            "extMonitorInfo": false,
            "description": "返されるデータ構造",
            "readOnly": false,
            "sensitive": false,
            "title": "タグ",
            "type": "array",
            "items": {
              "extMonitorInfo": false,
              "deprecated": false,
              "description": "返されるデータ構造",
              "sensitive": false,
              "title": "返されるデータ構造",
              "type": "object",
              "properties": {
                "TagKey": {
                  "isRequired": false,
                  "extMonitorInfo": false,
                  "description": "タグのキー",
                  "readOnly": false,
                  "sensitive": false,
                  "title": "タグのキー",
                  "type": "string",
                  "updateType": true
                },
                "TagValue": {
                  "isRequired": false,
                  "extMonitorInfo": false,
                  "description": "タグの値",
                  "readOnly": false,
                  "sensitive": false,
                  "title": "タグの値",
                  "type": "string",
                  "updateType": true
                }
              },
              "updateType": true
            },
            "updateType": true
          }
        },
        "sensitiveInfoProperties": [
    
        ],
        "info": {
          "deliveryScope": "zone",
          "chargeType": "free",
          "description": "vSwitch",
          "title": "vSwitch"
        },
        "resourceType": "VSwitch"
      }
    }

リソースを作成する

更新、クエリ、削除などの後続の操作のために vSwitch を作成します。

  1. 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;
    }
  2. 呼び出しが成功した場合、statusCode=202 が返されます。これは、タスクが非同期操作であることを示します。タスクステータスをさらにクエリする必要があります。詳細については、「タスクをクエリする」をご参照ください。リソースをクエリ、更新、および削除するには、resourceid を記録する必要があります。レスポンスボディは次のとおりです。

    resourceWithOptions.getBody()

    {
      "resourceId": "vsw-m5eaburrn73mdpemo****",
      "requestId": "4F7069A4-3CA8-5A48-9D3D-40A1302CBD1B",
      "resourcePath": "VSwitch/vsw-m5eaburrn73mdpemo****",
      "taskId": "task-5057a4fbef2bcffe44d6b3590****"
    }

リソースをリストする

  1. 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;
    }
  2. 呼び出しが成功した場合、次のレスポンスボディが返されます。

    resourcesWithOptions.getBody()

    {
      "maxResults": 10,
      "nextToken": "2",
      "requestId": "1B5258F0-656F-5005-9FA7-33845FD9FE33",
      "resources": [
       ...,
        {
          "resourceId": "vsw-m5eaburrn73mdpemo****",
          "resourceAttributes": {
            "IsDefault": false,
            "Status": "Available",
            "Description": "",
            "RouteTableId": "vtb-m5epr0god70hpomnn****",
            "ResourceGroupId": "rg-acfmykd63gtpfpa",
            "ZoneId": "cn-qingdao-b",
            "AvailableIpAddressCount": 252,
            "CreateTime": "2024-10-16T05:30:31Z",
            "VSwitchId": "vsw-m5eaburrn73mdpemo****",
            "CidrBlock": "172.16.24.0/24",
            "VpcId": "vpc-m5esjf3a6b380olet****",
            "VSwitchName": "",
            "RegionId": "cn-qingdao",
            "Ipv6CidrBlock": "",
            "Tags": [
              {
                "TagKey": "acs:tag:createdby",
                "TagValue": "sub:206453422934844953:user****"
              }
            ]
          }
        }
      ],
      "totalCount": 29
    }    

リソースを更新する

  1. 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;
    }
  2. レスポンスコード statusCode=200 は、リクエストが成功したことを示します。次のレスポンスボディが返されます。リソースの詳細をクエリして、リソースが更新されたかどうかを確認できます。詳細については、「リソースをクエリする」をご参照ください。

    updateResourceResponse.getBody()

    {
      "requestId": "C97193DF-FA5A-5B9B-B822-4C128CAC371E"
    }

リソースをクエリする

  1. 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;
    }
  2. リクエストが成功した場合、次のボディが返されます。

    resourcesWithOptions.getBody()

    {
    "resource": {
        "resourceId": "vsw-m5eaburrn73mdpemo****",
        "resourceAttributes": {
          "IsDefault": false,
          "Status": "Available",
          "Description": "テスト更新",
          "RouteTableId": "vtb-m5epr0god70hpomnn****",
          "ResourceGroupId": "rg-acfmykd63gtpfpa",
          "ZoneId": "cn-qingdao-b",
          "AvailableIpAddressCount": 252,
          "CreateTime": "2024-10-16T05:30:31Z",
          "VSwitchId": "vsw-m5eaburrn73mdpemo****",
          "CidrBlock": "172.16.24.0/24",
          "VpcId": "vpc-m5esjf3a6b380olet****",
          "VSwitchName": "",
          "RegionId": "cn-qingdao",
          "Ipv6CidrBlock": "",
          "Tags": [
            {
              "TagKey": "acs:tag:createdby",
              "TagValue": "sub:206453422934844953:user****"
            }
          ]
        }
      },
      "requestId": "B16A5BFC-20FC-5C3A-B640-6CB014328E16"
    }

リソースを削除する

  1. 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;
    }
  2. 呼び出しが成功した場合、statusCode=202 が返されます。これは、タスクが非同期操作であることを示します。タスクステータスをさらにクエリする必要があります。詳細については、「タスクステータスをクエリする」をご参照ください。

    deleteResourceResponse.getBody()

    {
      "requestId": "A9BC357C-7ED1-5046-ADDF-4BE17C5A7064",
      "taskId": "task-5057a4fbef2bcffe4562c2954****"
    }

タスクステータスをクエリする

指定されたタスクのステータスをクエリします。

  1. 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;
    }
  2. リクエストが成功した場合、ボディの status="Succeeded" が返されます。これは、vSwitch が作成されたことを示します。

    taskWithOptions.getBody()

    {
      "task": {
        "taskAction": "Create",
        "product": "VPC",
        "resourceId": "vsw-m5eaburrn73mdpemo****",
        "createTime": "2024-10-16T05:30:31Z",
        "regionId": "cn-qingdao",
        "resourcePath": "VSwitch/vsw-m5eaburrn73mdpemo****",
        "taskId": "task-5057a4fbef2bcffe44d6b3590****",
        "resourceType": "VSwitch",
        "status": "Succeeded"
      },
      "requestId": "C062613B-8A99-5E69-86DB-26446D1AB845"
    }

完全なサンプルコード

このチュートリアルの完全な ExampleDemo は次のとおりです。

ExampleDemo

package org.example;

import com.alibaba.fastjson.JSONObject;
import com.aliyun.cloudcontrol20220830.Client;
import com.aliyun.cloudcontrol20220830.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

import java.util.HashMap;
import java.util.Map;

/**
 * リソース管理を実装します。
 */
public class 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);
    }

    /**
     * プロダクトをクエリします
     * @param client           クライアント
     * @return listProductsResponse レスポンス
     */
    public ListProductsResponse listProducts(Client client) throws Exception {
        ListProductsHeaders listProductsHeaders = new ListProductsHeaders();
        ListProductsRequest listProductsRequest = new ListProductsRequest();
        RuntimeOptions runtime = new RuntimeOptions();
        ListProductsResponse listProductsResponse = client.listProductsWithOptions("Aliyun", listProductsRequest, listProductsHeaders, runtime);
        return listProductsResponse;
    }

    /**
     * リソースタイプをクエリします
     * @param productCode      プロダクトコード。この例では「VPC」です。
     * @param client           クライアント
     * @return listResourceTypesResponse レスポンス
     */
    public ListResourceTypesResponse listResourceTypes(String productCode, Client client) throws Exception {
        com.aliyun.cloudcontrol20220830.models.ListResourceTypesHeaders listResourceTypesHeaders = new com.aliyun.cloudcontrol20220830.models.ListResourceTypesHeaders();
        com.aliyun.cloudcontrol20220830.models.ListResourceTypesRequest listResourceTypesRequest = new com.aliyun.cloudcontrol20220830.models.ListResourceTypesRequest();
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        // 必要に応じて、API 操作のレスポンスを表示するための独自のコードを記述します。
        ListResourceTypesResponse listResourceTypesResponse = client.listResourceTypesWithOptions("Aliyun", productCode, listResourceTypesRequest, listResourceTypesHeaders, runtime);
        return listResourceTypesResponse;
    }

    /**
     * リソースを作成します
     * @param regionId         リージョン ID
     * @param productCode      プロダクトコード。この例では「VPC」です。
     * @param resourceTypeCode リソースタイプコード。この例では「VPC」です。
     * @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
        com.aliyun.cloudcontrol20220830.models.CreateResourceRequest createResourceRequest = new com.aliyun.cloudcontrol20220830.models.CreateResourceRequest()
                .setRegionId(regionId).setBody(body);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        java.util.Map<String, String> headers = new java.util.HashMap<>();
        CreateResourceResponse resourceWithOptions = client.createResourceWithOptions(requestPath, createResourceRequest, headers, runtime);
        return resourceWithOptions;
    }


    /**
     * 非同期タスクをクエリします
     * @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();
        java.util.Map<String, String> headers = new java.util.HashMap<>();
        GetTaskResponse taskWithOptions = client.getTaskWithOptions(taskId, headers, runtime);
        return taskWithOptions;
    }

    /**
     * リソースをリストします
     * @param regionId         リージョン ID
     * @param productCode      プロダクトコード。この例では「VPC」です。
     * @param resourceTypeCode リソースタイプコード。この例では「VPC」です。
     * @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();
        java.util.Map<String, String> headers = new java.util.HashMap<>();
        GetResourcesResponse resourcesWithOptions = client.getResourcesWithOptions(requestPath, getResourcesRequest, headers, runtime);
        return resourcesWithOptions;
    }


    /**
     * リソースをクエリします
     * @param regionId         リージョン ID
     * @param productCode      プロダクトコード。この例では「VPC」です。
     * @param resourceTypeCode リソースタイプコード。この例では「vSwitch」です。
     * @param resourceId リソースの ID。このパラメータは、この例で作成される VPC の 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;
        com.aliyun.cloudcontrol20220830.models.GetResourcesRequest getResourcesRequest = new com.aliyun.cloudcontrol20220830.models.GetResourcesRequest()
                .setRegionId(regionId);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        java.util.Map<String, String> headers = new java.util.HashMap<>();
        GetResourcesResponse resourcesWithOptions = client.getResourcesWithOptions(requestPath, getResourcesRequest, headers, runtime);
        return resourcesWithOptions;
    }

    /**
     * リソースを更新します
     * @param regionId         リージョン ID
     * @param productCode      プロダクトコード。この例では「VPC」です。
     * @param resourceTypeCode リソースタイプコード。この例では「VPC」です。
     * @param resourceId リソースの ID。このパラメータは、この例で作成される VPC の 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", "テスト更新");
        com.aliyun.cloudcontrol20220830.models.UpdateResourceRequest updateResourceRequest = new com.aliyun.cloudcontrol20220830.models.UpdateResourceRequest()
                .setRegionId(regionId).setBody(body);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        java.util.Map<String, String> headers = new java.util.HashMap<>();
        UpdateResourceResponse updateResourceResponse = client.updateResourceWithOptions(requestPath, updateResourceRequest, headers, runtime);
        return updateResourceResponse;
    }

    /**
     * リソースを削除します
     * @param regionId         リージョン ID
     * @param productCode      プロダクトコード。この例では「VPC」です。
     * @param resourceTypeCode リソースタイプコード。この例では「VPC」です。
     * @param resourceId リソースの ID。このパラメータは、この例で作成される VPC の 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;
        com.aliyun.cloudcontrol20220830.models.DeleteResourceRequest deleteResourceRequest = new com.aliyun.cloudcontrol20220830.models.DeleteResourceRequest()
                .setRegionId(regionId);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        java.util.Map<String, String> headers = new java.util.HashMap<>();
        DeleteResourceResponse deleteResourceResponse = client.deleteResourceWithOptions(requestPath, deleteResourceRequest, headers, runtime);
        return deleteResourceResponse;
    }


     /**
      * リソースタイプをクエリします。
      * @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;
     }
}