全部產品
Search
文件中心

Elastic Compute Service:ECS Node.js V2.0 SDK調用樣本

更新時間:Oct 25, 2024

本文以調用查詢一台或多台ECS執行個體的詳細資料(DescribeInstances)介面為例,為您介紹Node.js V2.0 SDK的安裝和使用。

前提條件

  1. 由於阿里雲帳號(主帳號)擁有資源的所有許可權,其AccessKey一旦泄露風險巨大,所以建議您使用滿足最小化許可權需求的RAM使用者的AccessKey。具體操作方式請參見建立AccessKey

  2. 給RAM使用者授予操作Elastic Compute Service相關資源的許可權。本文提供的範例程式碼為查詢樣本,所以選擇AliyunECSReadonlyAccess系統權限原則,您在使用的時候可以根據業務需求進行自訂授權。

    1. 使用自訂權限原則。

      關於如何建立自訂權限原則,請參見建立自訂權限原則授權資訊

      Elastic Compute Service依據最佳實務提供了一些自訂權限原則樣本,您可以參考這些樣本以快速建立符合自身業務需求的自訂權限原則,具體詳情請參見Elastic Compute Service自訂權限原則參考

    2. 使用系統權限原則。

      Elastic Compute Service支援的所有系統權限原則及其對應的許可權描述,請參見Elastic Compute Service系統權限原則參考

  3. 在環境變數中配置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