このトピックでは、Node.js V2.0 ソフトウェア開発キット (SDK) のインストール方法と使用方法について説明し、DescribeInstances API 操作を使用して 1 つ以上の Elastic Compute Service (ECS) インスタンスの詳細をクエリする例を示します。
前提条件
最小限必要な権限を持つ Resource Access Management (RAM) ユーザーが、その AccessKey ペアを使用してログインします。Alibaba Cloud アカウントはすべての権限を持っており、その AccessKey ペアが漏洩すると重大なセキュリティリスクをもたらすため、使用することは推奨されません。AccessKey ペアの作成方法の詳細については、「AccessKey ペアの作成」をご参照ください。
RAM ユーザーに ECS リソースを管理する権限が付与されていること。この例では読み取り専用アクセスが必要であり、AliyunECSReadonlyAccess システムポリシーが使用されます。ビジネス要件に応じて権限を付与してください。
カスタムポリシーの作成
カスタムポリシーの作成に関するガイダンスについては、「カスタムポリシーの作成」および「RAM での権限付与」をご参照ください。
ECS は、ベストプラクティスに基づいたカスタムポリシーテンプレートを提供しています。これらのポリシーテンプレートを参照して、ニーズに応じたポリシーを迅速に作成できます。詳細については、「カスタムポリシー」をご参照ください。
システムポリシーの使用
ECS がサポートするシステムポリシーとその権限の詳細については、「ECS のシステムポリシー」をご参照ください。
AccessKey ペアが環境変数に設定されていること。詳細については、「Linux、macOS、Windows で環境変数を設定する」をご参照ください。
SDK のインストール
Node.js V2.0 SDK は、SDK センターからインストールできます。または、次のコマンドをコピーしてターミナルで実行して、ECS SDK をインストールすることもできます:
npm install --save @alicloud/ecs20140526@4.3.0
SDK の使用
1. クライアントの初期化
Alibaba Cloud SDK は、AccessKey やセキュリティトークンサービス (STS) トークンなど、複数の種類のアクセス認証情報をサポートしてクライアントを初期化します。その他のメソッドの詳細については、「アクセス認証情報の管理」をご参照ください。この例では、AccessKey を使用してクライアントを初期化する方法を示します。
TypeScript の例
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
export class Client {
static createClient() {
let config = new $OpenApi.Config({
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
endpoint: `ecs.cn-hangzhou.aliyuncs.com`,
});
return new Ecs20140526(config);
}
}JavaScript の例
const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
class Client {
static createClient() {
const config = new OpenApi.Config({
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
endpoint: `ecs.cn-hangzhou.aliyuncs.com`,
});
return new Ecs20140526.default(config);
}
}2. API 操作のリクエストオブジェクトの作成
リクエストオブジェクトを作成する前に、操作の API ドキュメント を参照して、そのパラメーターに関する情報を取得してください。
リクエストオブジェクトの命名規則は {APIName}Request です。たとえば、DescribeInstances 操作のリクエストオブジェクトは DescribeInstancesRequest です。
TypeScript の例
// リクエストオブジェクトを作成します。
const describeInstancesRequest = new Ecs20140526.DescribeInstancesRequest({
regionId: "cn-hangzhou",
});
JavaScript の例
// リクエストオブジェクトを作成します。
const describeInstancesRequest = new Ecs20140526.DescribeInstancesRequest({
regionId: "cn-hangzhou",
});
3. 呼び出しの開始
クライアントから OpenAPI 操作を呼び出すときに、タイムアウトやプロキシ設定などの実行時パラメーターを設定できます。詳細については、「高度な設定」をご参照ください。
レスポンスオブジェクトの命名規則は {APIName}Response です。たとえば、DescribeInstances 操作のレスポンスオブジェクトは DescribeInstancesResponse です。
TypeScript の例
// 実行時設定オブジェクトを作成します。
const runtime = new $Util.RuntimeOptions();
// リクエストを開始します。
const describeInstancesResponse = await client.describeInstancesWithOptions(describeInstancesRequest, runtime);
JavaScript の例
// 実行時設定オブジェクトを作成します。
const runtime = new Util.RuntimeOptions();
// リクエストを開始します。
const describeInstancesResponse = await client.describeInstancesWithOptions(describeInstancesRequest, runtime);
4. 例外の処理
Node.js SDK は、Promise と async/await を使用して非同期操作を処理します。また、開発者が API 呼び出しにおける潜在的なエラーをキャッチして処理するのに役立つエラー処理メカニズムも提供します。API 呼び出しが失敗すると、Alibaba Cloud SDK は Error オブジェクトをスローします。SDK は例外を UnretryableError と ResponseError に分類します。
UnretryableError:このエラーは通常、ネットワークの問題によって発生します。このエラーは、ネットワーク問題の最大リトライ回数に達した後にスローされます。
ResponseError:これはビジネス関連の例外です。
堅牢で安定したシステムを確保するためには、例外の伝播、ログの記録、回復の試行など、適切な対策を講じる必要があります。
5. 完全な例
TypeScript の例
import * as $Util from '@alicloud/tea-util';
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import * as $OpenApi from '@alicloud/openapi-client';
export class Client {
static createClient() {
let config = new $OpenApi.Config({
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
endpoint: `ecs.cn-hangzhou.aliyuncs.com`,
});
return new Ecs20140526(config);
}
static async main(): Promise<void> {
const client = Client.createClient();
// リクエストオブジェクトを作成します。
const describeInstancesRequest = new $Ecs20140526.DescribeInstancesRequest({
regionId: "cn-hangzhou",
});
// 実行時設定オブジェクトを作成します。
const runtime = new $Util.RuntimeOptions();
try {
// リクエストを開始し、レスポンスを取得します。
const response = await client.describeInstancesWithOptions(describeInstancesRequest, runtime);
console.log('Describe Instances Response:', JSON.stringify(response.body));
} catch (error) {
// このエラーはデモ目的でのみ出力されます。例外は慎重に処理してください。プロジェクトで例外を無視しないでください。
console.error('Error occurred:', error);
}
}
}
Client.main();
JavaScript の例
const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
class Client {
static createClient() {
const config = new OpenApi.Config({
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
endpoint: `ecs.cn-hangzhou.aliyuncs.com`,
});
return new Ecs20140526.default(config);
}
static async main() {
const client = Client.createClient();
// リクエストオブジェクトを作成します。
const describeInstancesRequest = new Ecs20140526.DescribeInstancesRequest({
regionId: "cn-hangzhou",
});
// 実行時設定オブジェクトを作成します。
const runtime = new Util.RuntimeOptions();
try {
// リクエストを開始し、レスポンスを取得します。
const response = await client.describeInstancesWithOptions(describeInstancesRequest, runtime);
console.log('Describe Instances Response:', JSON.stringify(response.body));
} catch (error) {
// このエラーはデモ目的でのみ出力されます。例外は慎重に処理してください。プロジェクトで例外を無視しないでください。
// エラーメッセージ
console.log('Error occurred:', error.message);
}
}
}
Client.main();詳細情報
上記の方法に加えて、一般化された呼び出しを使用して ECS OpenAPI 操作を呼び出すこともできます。詳細については、「一般化された呼び出し」をご参照ください。
V1.0 SDK の詳細については、「V1.0 Node.js SDK」をご参照ください。