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 クライアントデバイスからメッセージを送信するには
-
curl バージョンを確認します。
-
クライアントで、コマンドプロンプトからこのコマンドを実行します。
curl --help
ヘルプテキストで、TLS オプションを探します。--tlsv1.2
オプションが表示されます。
-
--tlsv1.2
オプションが表示された場合は、続行します。
-
--tlsv1.2
オプションが表示されない場合、または command not found
エラーが発生した場合は、続行する前にクライアントで curl を更新またはインストールするか、openssl
をインストールします。
-
クライアントに証明書をインストールします。
クライアント (モノ) を登録したときに作成した証明書ファイルを AWS IoT コンソールでコピーします。続行する前に、クライアントに次の 3 つの証明書ファイルがあることを確認します。
-
CA 証明書ファイル (この例では Amazon-root-CA-1.pem
)。
-
クライアントの証明書ファイル (この例では device.pem.crt
)。
-
クライアントのプライベートキーファイル (この例では private.pem.key
)。
-
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
として指定します。
-
AWS IoT コンソールで MQTT テストクライアントを開きます。
AWS IoT MQTT クライアントでデバイスの MQTT メッセージを表示する の手順に従い、トピック名が curl コマンドで使用されているトピック
のメッセージをサブスクライブするか、ワイルドカードトピックフィルター #
を使用するようコンソールを設定します。
-
コマンドをテストします。
AWS IoT コンソールのテストクライアントでトピックをモニタリングしながらクライアントに移動し、ステップ 3 で作成した curl コマンドラインを発行します。コンソールにクライアントのメッセージが表示されます。