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

IoT Platform:Node.js SDK の接続例

最終更新日:Jun 21, 2026

このトピックでは、Node.js 向け AMQP SDK を使用して Alibaba Cloud IoT Platform に接続し、サーバーサイドサブスクリプションでメッセージを受信する方法について説明します。

前提条件

トピックのメッセージをサブスクライブするコンシューマーグループの ID を取得します。

開発環境のセットアップ

Node.js 8.0.0 以降が必要です。

SDK のダウンロードとインストール

Node.js AMQP SDK には、rhea ライブラリの使用を推奨します。rhea にアクセスしてライブラリをダウンロードし、ドキュメントをご確認ください。

この例では、npm install rhea コマンドを使用して rhea ライブラリをインストールします。

手順

  1. Windows または Linux システムで、Node.jsをダウンロードしてインストールします。このトピックでは、Windows 10 (64 ビット) システムと node-v14.15.1-x64.msi インストールパッケージを例として使用します。

  2. インストール後、コマンドラインインターフェイスを開き、次のコマンドを実行して Node.js のバージョンを確認します。

    node --version

    インストールが成功すると、次のようにバージョン番号が返されます。

    v14.15.1
  3. サンプルコードを格納するために、amqp.js などの JavaScript ファイルを作成します。

    以下の表に従ってパラメーターを修正します。

    重要

    有効なパラメーター値を指定してください。そうでない場合、AMQP クライアントは IoT Platform への接続に失敗します。

    const container = require('rhea');
    const crypto = require('crypto');
    // AccessKey ペアを公開すると、アカウントのセキュリティが損なわれる可能性があります。
    // このコードはデモンストレーションのみを目的としています。ここでは環境変数から AccessKey ペアを取得します。
    var accessKey = process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'];
    var accessSecret = process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'];
    // 接続を作成します。
    var connection = container.connect({
        // エンドポイント。詳細は、AMQP クライアントの接続に関するドキュメントをご参照ください。
        'host': '${YourHost}',
        'port': 5671,
        'transport':'tls',
        'reconnect':true,
        'idle_time_out':60000,
        // ユーザー名の形式。詳細は、AMQP クライアントの接続に関するドキュメントをご参照ください。
        'username':'${YourClientId}|authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=' + accessKey + ',iotInstanceId=${YourIotInstanceId},consumerGroupId=${YourConsumerGroupId}|', 
        // 署名を計算します。パスワード形式の詳細は、AMQP クライアントの接続に関するドキュメントをご参照ください。
        'password': hmacSha1(accessSecret, 'authId='+ accessKey +'&timestamp=1573489088171'),
    });
    // レシーバーリンクを作成します。
    var receiver = connection.open_receiver();
    // クラウドからプッシュされたメッセージを受信するためのコールバック関数。
    container.on('message', function (context) {
        var msg = context.message;
        var messageId = msg.message_id;
        var topic = msg.application_properties.topic;
        var content = Buffer.from(msg.body.content).toString();
        // 内容を出力します。
        console.log(content);
        // ACK を送信します。コールバック関数に時間のかかる操作を含めないでください。
        context.delivery.accept();
    });
    // パスワード署名を計算します。
    function hmacSha1(key, context) {
        return Buffer.from(crypto.createHmac('sha1', key).update(context).digest())
            .toString('base64');
    }

    パラメーター

    説明

    host

    iot-cn-***.amqp.iothub.aliyuncs.com

    AMQP エンドポイント。

    AMQP エンドポイント (${YourHost}) については、「インスタンスエンドポイントの表示と設定」をご参照ください。

    username

    'test |authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=LTAI****************,iotInstanceId=,consumerGroupId=DEFAULT_GROUP|'

    IoT Platform への接続に使用する認証情報。この文字列には、次のパラメーターが含まれます。

    • ${YourClientId}:クライアント ID に置き換えます。最大 64 文字のカスタム ID を定義できます。AMQP クライアントを実行するサーバーの UUID、MAC アドレス、IP アドレスなどの一意の識別子を使用することを推奨します。

      AMQP クライアントが接続すると、IoT Platform コンソールでこのパラメーターを確認できます。 インスタンスのコンソールで、[メッセージ転送] > [サーバーサイドサブスクリプション] > [コンシューマーグループ]に移動します。 タブで、対象のコンシューマーグループの横にある[表示]をクリックします。 [コンシューマーグループ詳細] ページには、クライアントの識別に役立つクライアント ID が表示されます。

    • ${YourAccessKeyId}${YourAccessKeySecret}:ご自身の AccessKey ID と AccessKey Secret に置き換えます。

      これらを取得するには、IoT Platform コンソールにログインし、右上のプロフィール画像にポインターを合わせ、[AccessKey 管理] をクリックします。

      説明

      RAM ユーザーを使用する場合、AliyunIOTFullAccess ポリシーを RAM ユーザーにアタッチする必要があります。そうしないと、接続は失敗します。詳細については、「RAM ユーザーアクセス」をご参照ください。

    • ${YourIotInstanceId}:インスタンス ID に置き換えます。

      IoT Platform コンソールにログインします。インスタンスの [概要] タブでインスタンス ID を確認できます。

      重要

      [概要] タブが利用できないか、またはインスタンスに ID がない場合は、ユーザー名文字列から iotInstanceId=${YourIotInstanceId} パラメーターを削除します。

    • ${YourConsumerGroupId}:コンシューマーグループ ID に置き換えます。

      コンシューマーグループ ID を確認するには、IoT Platform コンソールにログインします。お使いのインスタンスのコンソールで、[メッセージ転送] > [サーバーサイドサブスクリプション] > [コンシューマーグループ]の順に移動します。

    password

    hmacSha1('yourAccessKeySecret','authId=LTAI****************&timestamp=1573489088171')

  4. コマンドラインインターフェイスを開き、amqp.js ファイルが含まれるディレクトリに移動し、次のコマンドを実行して rhea ライブラリをインストールします。

    npm install rhea

    コマンドが完了すると、プロジェクトのルートディレクトリに node_modules フォルダー、amqp.js ファイル、および package-lock.json ファイルが格納されます。

  5. CMD ウィンドウで、次のコマンドを入力してamqp.js コードを実行し、AMQP クライアントサーバーを起動します。

    node amqp.js

実行結果の例

  • 成功:接続に成功すると、クライアントはメッセージの受信を開始し、次のようなログが出力されます。この例は、デバイスによって報告された温度と湿度のデータを示しています。

    xxx>node amqp.js
    {"deviceType":"CustomCategory","iotId":"xxx","requestId":"1613748030337","checkFailedData":{},"productKey":"xxx","gmtCreate":1613747903528,
    "deviceName":"xxx","items":{"Temperature":{"value":xxx,"time":1613747903526},"Humidity":{"value":23,"time":1613747903526}}}
    {"deviceType":"CustomCategory","iotId":"xxx","requestId":"1613729851729","checkFailedData":{},"productKey":"xxx","gmtCreate":1613729721715,
    "deviceName":"xxx","items":{"Temperature":{"value":17,"time":1613729721715},"Humidity":{"value":20,"time":1613729721715}}}
  • 失敗:接続に失敗すると、次のようなエラーメッセージが表示されます。

    エラーログを使用して、コードとネットワーク設定を確認してください。問題を解決し、コードを再実行してください。

    >node amqp.js
    [connection-1] disconnected Error: getaddrinfo ENOTFOUND iot-xxx.b.aliyuncs.com
        at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26) {
    errno: -3008,
    code: 'ENOTFOUND',
    syscall: 'getaddrinfo',
    hostname: 'ixxx.iyuncs.com'
    }

関連情報

サーバー側サブスクリプション機能に関連するエラーコードの詳細については、「IoT Platform ログ」トピックのメッセージに関連するエラーコードセクションをご参照ください。