本文以調用查詢一臺或多臺ECS實例的詳細信息(DescribeInstances)接口為例,為您介紹Node.js V2.0 SDK的安裝和使用。
前提條件
由于阿里云賬號(主賬號)擁有資源的所有權限,其AccessKey一旦泄露風險巨大,所以建議您使用滿足最小化權限需求的RAM用戶的AccessKey。具體操作方式請參見創建AccessKey。
給RAM用戶授予操作云服務器ECS相關資源的權限。本文提供的示例代碼為查詢示例,所以選擇AliyunECSReadonlyAccess系統權限策略,您在使用的時候可以根據業務需求進行自定義授權。
使用自定義權限策略。
關于如何創建自定義權限策略,請參見創建自定義權限策略和授權信息。
云服務器ECS依據最佳實踐提供了一些自定義權限策略示例,您可以參考這些示例以快速創建符合自身業務需求的自定義權限策略,具體詳情請參見云服務器ECS自定義權限策略參考。
使用系統權限策略。
云服務器ECS支持的所有系統權限策略及其對應的權限描述,請參見云服務器 ECS系統權限策略參考。
在環境變量中配置AccessKey,具體操作步驟請參見在Linux、macOS和Windows系統配置環境變量。
安裝SDK
Node.js V2.0 SDK安裝方式請參見SDK 中心。您可以直接復制下方提供的安裝命令在Terminal中執行,以完成ECS SDK的安裝:
npm install --save @alicloud/ecs20140526@4.3.0
使用SDK
1. 初始化客戶端
阿里云SDK支持多種訪問憑據用于初始化客戶端,例如AccessKey和STS Token等,更多方式請參見管理訪問憑證。本示例以通過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名稱}Request,例如DescribeInstances該接口的請求對象為DescribeInstancesRequest。
TypeScript示例
// 構造請求對象
const describeInstancesRequest = new Ecs20140526.DescribeInstancesRequest({
regionId: "cn-hangzhou",
});
JavaScript示例
// 構造請求對象
const describeInstancesRequest = new Ecs20140526.DescribeInstancesRequest({
regionId: "cn-hangzhou",
});
3. 發起調用
通過客戶端調用OpenAPI時,支持設置運行時參數,例如超時配置、代理配置等,更多信息請查看進階配置。
接口返回對象命名規則:{API名稱}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調用失敗時,阿里云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) {
// 此處僅做打印展示,請謹慎對待異常處理,在工程項目中切勿直接忽略異常。
// 錯誤 message
console.log('Error occurred:', error.message);
}
}
}
Client.main();
場景化示例
更多內容
除了使用上述調用方式外,您還可以使用泛化調用方式調用ECS的OpenAPI,詳細介紹請參見泛化調用。
若您當前使用的是V1.0 SDK,并希望進一步了解V1.0 SDK的相關內容,請參見V1.0 Node.js SDK。