メイン コンテンツをスキップする

AWS IoTゲートウェイでのcMQTT認証

この記事では、cMQTTとcMQConnectionFactoryを使ってAWS IoTのMQTT Topicと通信する方法を説明します。

cMQConnectionFactoryと併用することによって、cMQTTコンポーネントは、通常のMQTTサーバー(MQTTトランスポートを有効にしたApache ActiveMQなど)への接続だけでなく、SSLを使ってAWS IoTに作成されたMQTT Topicとの通信にも使用できます。

環境

この記事は、ESB機能を持つ全Talend製品が対象です。

AWS IoTでリソース(モノ、ポリシー、証明書)を作成

AWS IoTリソース(モノ、ポリシー、証明書)は、AWS IoTコンソール、またはAWS CLIコマンドから作成できます。AWS IoTコンソールを使ってリソースを作成する方法は次のとおりです。

リソースを作成する前に、AWS IoTへのアクセスが許可されているAWSアカウントがあることをご確認ください。そのアカウントでAWSコンソールにログインし、[AWS Services] (AWSサービス)> [AWS IoT]ページに移動してリソースを作成します。

モノを作成
  1. [AWS IoT]ページで、[Create a Resource] (リソースを作成) > [Create a Thing] (モノを作成)とクリックします。
  2. [Create a Thing] (モノを作成)エリアの[Name] (名前)フィールドで、モノに名前を付けます。
  3. [Create] (作成)をクリックしてモノを作成します。

    右パネルにホスト名とMQTT Topicの情報がありますが、これは後でcMQTTとcMQConnectionFactoryコンポーネントを設定する際に使います。

ポリシーを作成
  1. [AWS IoT]ページで、[Create a Resource] (リソースを作成) > [Create a Policy] (ポリシーを作成)とクリックします。
  2. [Create a Policy] (ポリシーを作成)エリアで:
    • [Name] (名前)フィールドでポリシーに名前を付けます
    • iot:*アクションと*リソースと共にステートメントを追加します
    • [Allow] (許可)チェックボックスを選択し、あらゆるiotモノであらゆるiot操作ができるようにします。
  3. [Create] (作成)をクリックしてポリシーを作成します。
証明書を作成してモノとポリシーを添付
  1. [AWS IoT]ページで、[Create a Resource] (リソースを作成) > [Create a Certificate] (証明書を作成)とクリックします。
  2. [Create a Certificate] (証明書を作成)エリアで[1-Click certificate create] (1クリックで証明書を作成)をクリックし、プライベートキー(xxxx-private.pem.key)と証明書(xxxx-certificate.pem.crt)をダウンロードします。
  3. 証明書を選択して[Actions] (アクション) > [Activate] (有効化)とクリックし、証明を有効化します。
  4. [Actions] (アクション) > [Attach a thing] (モノを添付)とクリックし、作成されたばかりのモノの名前を入力して、そのモノを証明書に添付します。
  5. [Actions] (アクション) > [Attach a policy] (ポリシーを添付)とクリックし、新しく作成されたポリシーの名前を入力して、そのポリシーも証明書に添付します。
AWS IoTの証明書とプライベートキーを使ってJKSキーストアを作成

JKSキーストアを作成する前に、システムにOpenSSLがインストールされていることを確認します。

JKSキーストアは次の手順で作成します。

  1. https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.htmlからATS証明書をダウンロードし、rootCA.pemに保存します。
  2. 次のコマンドでAWS IoTの証明書、プライベートキー、rootCAを入力として使い、pkcs12ファイルをエクスポートします。
    openssl pkcs12 -export -in e11ef15bb1-certificate.pem.crt -inkey e11ef15bb1-private.pem.key -out server.p12 -name awsiotkey

    pkcs12にパスワードを入力するよう求められたら、abcdのように入力します。

  3. 次のコマンドを使ってpkcs12をJKSキーストアに変換します。
    keytool -importkeystore -deststorepass password -destkeypass password -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass abcd

    また、-deststorepass-destkeypassには必ず同じパスワードを入力してください。

  4. 次のコマンドを使ってAWSのrootCAをJKSのキーストアにインポートします。
    keytool -import -trustcacerts -keystore keystore.jks -storepass importkey -alias rootCA -file rootCA.pem -noprompt
SSLを使ってAWS IoTに接続するようcMQTTとcMQConnectionFactoryを設定

AWS IoTのMQTT Topicからメッセージを消費するよう、次のようにcMQTT、cMQConnectionFactory、cLogを持つルートを作成します。ルートを作成する方法の詳細は、ルートを作成をご覧ください。

  1. cMQConnectionFactoryコンポーネントの[Basic settings] (基本設定)ビューで:
    • MQ ServerリストでMQTTを選択します。
    • [Host Name] (ホスト名)フィールドに、AWS IoTにあるMQTT Topicのホスト名を入力します。
    • [Port] (ポート)フィールドに、デフォルトのMQTTポート番号である8883を入力します。
    • [Use SSL] (SSLを使用)チェックボックスをオンにし、関連するフィールドにJKSキーストアとパスワードを入力します。

    必要であれば、ネットワークの接続状況に応じて[Connection Wait In Seconds] (接続待機時間(秒))の値を増やします。

  2. cMQTTコンポーネントの[Basic settings] (基本設定)ビューで:
    • [Connection Factory] (接続ファクトリー)フィールドで、cMQConnectionFactoryコンポーネントを選択します。
    • [Topic Name] (トピック名)フィールドに、AWS IoTにあるMQTT Topicの名前を入力します。
  3. メッセージ交換を監視し、ルートを実行するcLogコンポーネントはデフォルト設定のままにしておきます。今回はメッセージ交換はありません。
AWS IoTコンソールのMQTT ClientからTopicにメッセージを公開
  1. AWS IoTコンソールに移動して[MQTT Client] (MQTTクライアント)をクリックします。
  2. [MQTT Client Actions] (MQTTクライアントアクション)エリアで[Device Gateway connection] (デバイスゲートウェイ接続)を選択し、[Generate client ID] (クライアントIDを生成) > [Connect] (接続)とクリックします。
  3. [Publish to topic] (トピックに公開)をクリックします。[Publish topic] (トピックを公開)フィールドにMQTT Topicの名前を入力し、[Payload] (ペイロード)エリアにメッセージのペイロード("Hello message"など)を入力します。
  4. [Publish] (公開)をクリックします。

    このメッセージは特定のトピックに公開されます。

    AWS IoTのMQTT Topicにメッセージを公開する方法は他にもあります。たとえばhttp://mosquitto.org/からMosquittoをダウンロードしてインストールし、次のコマンドを使って"Hello message"というメッセージを公開できます。

    mosquitto_pub --cert e11ef15bb1-certificate.pem.crt --key e11ef15bb1-private.pem.key --cafile rootCA.pem -h <YourHostName>.iot.us-east-1.amazonaws.com -p 8883 -q 1 -d -t $aws/things/MyTestThing/shadow/update -m "Hello message"

Talend Studioでは、メッセージが受信され、ルート実行コンソールに表示されます。

このページは役に立ちましたか?

このページまたはコンテンツにタイポ、ステップの省略、技術的エラーなどの問題が見つかった場合はお知らせください。