HTTPS - AWS IoT Core

HTTPS

クライアントは、HTTP 1.0 または 1.1 プロトコルを使用して REST API にリクエストを実行することで、メッセージをパブリッシュできます。HTTP リクエストで使用される認証およびポートマッピングについては、「プロトコル、ポートマッピング、認証」を参照してください。

注記

MQTT とは異なり、HTTPS は clientId 値をサポートしていません。したがって、MQTT を使用する場合は clientId を使用できますが、HTTPS を使用する場合は使用できません。

HTTPS メッセージ URL

デバイスとクライアントは、クライアント固有のエンドポイントとトピック固有の URL に POST リクエストを行うことで、メッセージを発行します。

https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1"
  • IoT_data_endpoint は、AWS IoT デバイスのデータエンドポイントです。エンドポイントは、モノの詳細ページまたはクライアントの AWS IoT コンソールで、AWS CLI コマンドを使って確認できます。

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    エンドポイントは次のようになります: a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com

  • url_encoded_topic_name は、送信されるメッセージの完全なトピック名です。

HTTPS メッセージコードの例

AWS IoT に HTTPS メッセージを送信する方法の例をいくつか示します。

Python
import requests import argparse # define command-line parameters parser = argparse.ArgumentParser(description="Send messages through an HTTPS connection.") parser.add_argument('--endpoint', required=True, help="Your AWS IoT data custom endpoint, not including a port. " + "Ex: \"abcdEXAMPLExyz-ats.iot.us-east-1.amazonaws.com\"") parser.add_argument('--cert', required=True, help="File path to your client certificate, in PEM format.") parser.add_argument('--key', required=True, help="File path to your private key, in PEM format.") parser.add_argument('--topic', required=True, default="test/topic", help="Topic to publish messages to.") parser.add_argument('--message', default="Hello World!", help="Message to publish. " + "Specify empty string to publish nothing.") # parse and load command-line parameter values args = parser.parse_args() # create and format values for HTTPS request publish_url = 'https://' + args.endpoint + ':8443/topics/' + args.topic + '?qos=1' publish_msg = args.message.encode('utf-8') # make request publish = requests.request('POST', publish_url, data=publish_msg, cert=[args.cert, args.key]) # print results print("Response status: ", str(publish.status_code)) if publish.status_code == 200: print("Response body:", publish.text)
CURL

クライアントまたはデバイスから curl を使用して、AWS IoT にメッセージを送信できます。

curl を使用して AWS IoT クライアントデバイスからメッセージを送信するには

  1. curl バージョンを確認します。

    1. クライアントで、コマンドプロンプトからこのコマンドを実行します。

      curl --help

      ヘルプテキストで、TLS オプションを探します。--tlsv1.2 オプションが表示されます。

    2. --tlsv1.2 オプションが表示された場合は、続行します。

    3. --tlsv1.2 オプションが表示されない場合、または command not found エラーが発生した場合は、続行する前にクライアントで curl を更新またはインストールするか、openssl をインストールします。

  2. クライアントに証明書をインストールします。

    クライアント (モノ) を登録したときに作成した証明書ファイルを AWS IoT コンソールでコピーします。続行する前に、クライアントに次の 3 つの証明書ファイルがあることを確認します。

    • CA 証明書ファイル (この例では Amazon-root-CA-1.pem)。

    • クライアントの証明書ファイル (この例では device.pem.crt)。

    • クライアントのプライベートキーファイル (この例では private.pem.key)。

  3. curl コマンドラインを作成し、アカウントとシステムの置き換え可能な値を置き換えます。

    curl --tlsv1.2 \ --cacert Amazon-root-CA-1.pem \ --cert device.pem.crt \ --key private.pem.key \ --request POST \ --data "{ \"message\": \"Hello, world\" }" \ "https://IoT_data_endpoint:8443/topics/topic?qos=1"
    --tlsv1.2

    TLS 1.2 (SSL) を使用します。

    --cacert Amazon-root-CA-1.pem

    ピアを検証する CA 証明書のファイル名とパス (必要な場合)。

    --cert device.pem.crt

    クライアントの証明書のファイル名とパス (必要な場合)。

    --key private.pem.key

    クライアントのプライベートキーのファイル名とパス (必要な場合)。

    --request POST

    HTTP リクエストのタイプ (この場合は POST)。

    --data "{ \"message\": \"Hello, world\" }"

    パブリッシュ先の HTTP POST データ。この場合、内部の引用符がバックスラッシュ文字 (\) でエスケープされた JSON 文字列です。

    "https://IoT_data_endpoint:8443/topics/topic?qos=1"

    クライアントの AWS IoT デバイスデータエンドポイントの URL の後に、HTTPS ポート、:8443、キーワード、/topics/、およびトピック名 (この例では topic) が続きます。サービス品質をクエリパラメータ ?qos=1 として指定します。

  4. AWS IoT コンソールで MQTT テストクライアントを開きます。

    AWS IoT MQTT クライアントでデバイスの MQTT メッセージを表示する の手順に従い、トピック名が curl コマンドで使用されているトピックのメッセージをサブスクライブするか、ワイルドカードトピックフィルター # を使用するようコンソールを設定します。

  5. コマンドをテストします。

    AWS IoT コンソールのテストクライアントでトピックをモニタリングしながらクライアントに移動し、ステップ 3 で作成した curl コマンドラインを発行します。コンソールにクライアントのメッセージが表示されます。