Cloud Control API Java SDK は、Alibaba Cloud リソースの作成、クエリ、更新、削除など、完全なライフサイクルを管理するための標準化されたインターフェイスを提供します。この SDK を使用すると開発が簡素化されるため、低レベルの API の詳細ではなく、ビジネスロジックに集中できます。
前提条件
-
Cloud Control API を呼び出すには、AccessKey ペアが必要です。Alibaba Cloud アカウントの AccessKey ペアには完全な権限があるため、代わりに RAM ユーザーを作成し、その AccessKey ペアを使用することを推奨します。詳細については、「RAM ユーザーの作成」および「AccessKey の作成」をご参照ください。
-
Cloud Control API を呼び出すには、アクセス認証情報を設定する必要があります。一般的な認証情報タイプは
AccessKey (AK)です。認証情報の漏洩を防ぐため、環境変数として保存してください。説明このトピックでは、
ALIBABA_CLOUD_ACCESS_KEY_IDとALIBABA_CLOUD_ACCESS_KEY_SECRETの環境変数を例として使用します。 -
Cloud Control API を呼び出す前に、RAM ユーザーが対象リソースに対して必要な権限を持っていることを確認してください。詳細については、「RAM ユーザーの権限管理」をご参照ください。
-
きめ細かい制御を行うために、カスタム権限ポリシーを作成できます。手順については、「カスタムポリシーの作成」をご参照ください。
説明このトピックでは、VPC リソースのリスト表示を例として使用します。
-
迅速な権限付与:AliyunCloudControlAPIFullAccess ポリシーを付与します。これにより、すべての Cloud Control API 操作に対する完全な権限が付与されます。
-
きめ細かい権限付与:VPC リソースのリスト表示など、必要な権限のみを付与するカスタム権限ポリシーを作成します。
-
要件
JDK バージョン 1.8 以降。
SDK の依存関係の追加
-
SDK センター にログインし、Cloud Control API 製品を選択します (例:リソースをリスト表示する API を呼び出す場合)。
-
[Installation] ページで、[All Languages] ドロップダウンリストから [Java] を選択します。[Quick Start] タブで Cloud Control API SDK のインストール方法を確認できます。
<dependency> <groupId>com.aliyun</groupId> <artifactId>cloudcontrol20220830</artifactId> <version>1.1.1</version> </dependency>
API の呼び出し
このセクションでは、GetResources API を呼び出して VPC リソースをリスト表示する方法を示します。
クライアントの初期化
SDK で Cloud Control API を呼び出すには、すべてクライアントを使用します。クライアントを初期化するには、リージョンのサービスエンドポイントを指定します。エンドポイントは、Cloud Control API ポータル の [Service Region] セクションで確認できます。サービスエンドポイントの詳細については、「」サポートされるリージョンをご参照ください。この例では、AccessKey ペアでクライアントを初期化します。他の初期化方法については、「Java SDK のアクセス認証情報の管理」をご参照ください。
// クライアントを初期化します。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// System.getenv() は環境変数から AccessKey を取得します。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// サービスエンドポイント
config.endpoint = "cloudcontrol.aliyuncs.com";
com.aliyun.cloudcontrol20220830.Client client = new com.aliyun.cloudcontrol20220830.Client(config);
// デフォルトの認証情報プロバイダーチェーンを使用してクライアントを初期化します。
// com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
// com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// .setCredential(credentialClient);
// config.endpoint = "cloudcontrol.aliyuncs.com";
// com.aliyun.cloudcontrol20220830.Client client = new com.aliyun.cloudcontrol20220830.Client(config);getenv() 関数は環境変数を読み取ります。お使いのマシンで ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET という名前の環境変数を設定した場合、getenv() はそれらの値を取得します。
パラメーターなしで認証情報クライアントを初期化すると、Credentials ツールはデフォルトの認証情報プロバイダーチェーンを使用します。デフォルト認証情報の取得ロジックについては、「デフォルトの認証情報プロバイダーチェーン」をご参照ください。
リクエストパスの定義
// リクエストパス
String requestPath = "/api/v1/providers/Aliyun/products/VPC/resources/VPC";リクエストパスの形式は /api/v1/providers/{provider}/products/{product}/resources/{resourceTypeCode} です。
次の表で、リクエストパスの変数について説明します。
フィールド
説明
値の例
{provider}クラウドプロバイダーの名前。
Aliyunのみがサポートされています。Aliyun{product}製品コード。 ListProducts API を呼び出して取得できます。
VPC{resourceTypeCode}リソースタイプコード。 ListResourceTypes API を呼び出して取得できます。
VPCリソースに親リソースがあるかどうかは、その
resourceTypeの形式を確認することで判断できます。ResourceType の形式
説明
値の例
****値に
/が含まれていない場合、リソースには親リソースがありません。VPC****/****リソースタイプに
/が含まれている場合、そのリソースには親リソースがあることを示します。たとえば、ApsaraDB for Redis には Redis インスタンス (DBInstance) とデータベースアカウント (DBInstance/Account) のリソースがあります。データベースアカウントのリソースタイプは「DBInstance/Account」で、「DBInstance」はその親リソースである Redis インスタンスのリソースタイプです。DBInstance/Account詳細については、「親リソースと子リソース」をご参照ください。
リクエストオブジェクトの作成
リクエストオブジェクトは、<OperationName>Request という名前のクラスのインスタンスです。API パラメーターは、リクエストオブジェクトのプロパティを使用して設定します。
// フィルター条件 (オプション)
// java.util.Map < String, Object > filter = TeaConverter.buildMap(
// new TeaPair("IsDefault", true), // VPC がデフォルトの VPC であるかどうかを指定します。
// new TeaPair("ResourceGroupId", "<YOUR_RESOURCEGROUPID>"), // リソースグループ ID。
// new TeaPair("DhcpOptionsSetId", "<YOUR_DHCPOPTIONSSETID>"), // DHCP オプションセットの ID。
// new TeaPair("VpcId", "<YOUR_VPCID>"), // VPC ID。
// new TeaPair("VpcName", "<YOUR_VPCNAME>") // VPC 名。
// );
// リクエストオブジェクトを作成します。
com.aliyun.cloudcontrol20220830.models.GetResourcesRequest getResourcesRequest = new com.aliyun.cloudcontrol20220830.models.GetResourcesRequest()
.setRegionId("cn-hangzhou") // リージョン ID。
// .setFilter(filter) // クエリのフィルター条件。
// .setNextToken("") // 結果の次のページのトークン。
.setMaxResults(2); // ページ分割クエリのページあたりの結果数。リクエストの送信
API の呼び出しでは、<operationName>WithOptions という名前のクライアントメソッドを使用します。ここで、<operationName> はキャメルケース形式の API 操作名です。このメソッドは、リクエストパス、リクエストオブジェクト、ヘッダーパラメーター、ランタイムオプションの 4 つの引数を取ります。ランタイムオプションは、タイムアウトやプロキシ設定などのリクエスト動作を設定します。
// ランタイムオプションを定義します。
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// // SSL 証明書の検証を無視します。
// runtime.ignoreSSL = true;
// // プロキシ設定。
// runtime.httpProxy = "http://127.0.0.1:9898";
// runtime.httpsProxy = "http://user:password@127.0.0.1:8989";
// runtime.noProxy = "127.0.0.1,localhost";
// // 接続タイムアウト。
// runtime.connectTimeout = 5000;
// // 読み取りタイムアウト。
// runtime.readTimeout = 10000;
// // 自動再試行メカニズムを有効にします。
// runtime.autoretry = true;
// // 最大再試行回数を設定します。
// runtime.maxAttempts = 3;
// ヘッダーを使用してリクエストヘッダーをカスタマイズします。これにより、デフォルトを上書きしたり、追加情報を加えたりできます。
java.util.Map < String, String > headers = new java.util.HashMap<>();
// headers.put("x-acs-action", "GetResources"); // API 操作名を設定します。
// リクエストを送信します。
GetResourcesResponse getResourcesResponse = client.getResourcesWithOptions(requestPath, getResourcesRequest, headers, runtime);例外処理
Java V2.0 SDK は、例外を TeaUnretryableException と TeaException の 2 種類に分類します。
TeaUnretryableException:最大再試行回数に達した後にスローされ、通常はネットワークの問題が原因です。
TeaException:サービスエラーを示す例外です。
エラーのログ記録、リカバリの管理、システムの安定性確保のために、堅牢な例外処理を実装してください。
コード例
よくある質問
API を呼び出すと、"You are not authorized to perform this operation" というエラーが表示されます。
原因:AccessKey ペアに関連付けられた RAM ユーザーに必要な権限がありません。
解決策:RAM ユーザーに必要な API 権限を付与してください。手順については、「RAM ユーザーの権限管理」をご参照ください。
たとえば、GetResources API を呼び出す際に "You are not authorized to perform this operation" エラーが発生した場合、カスタム権限ポリシーを作成し、対応する権限を RAM ユーザーに付与できます。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "cloudcontrol:List*", "Resource": "*" }, { "Effect": "Allow", "Action": "vpc:DescribeVpcs", "Resource": "*" } ] }API を呼び出すと、"Cannot invoke "com.aliyun.credentials.Client.getCredential()" because "this._credential" is null" というエラーが表示されます。
原因:
AccessKeyの環境変数が正しく設定されていません。解決策: