[アップデート] AWS IoT Coreでカスタムドメインを使用したエンドポイントが作成可能になりました

自分が所有するドメイン名を使って、AWS IoTのエンドポイントを作成できるようになりました
2021.03.26

大阪オフィスの小倉です。
AWS IoTのカスタムエンドポイントがGAされました。

AWS IoTで使用するエンドポイントを自分で構成することができます。
早速試してみたいと思います。

構成可能なエンドポイント

エンドポイントの種類として、

  • AWS管理ドメインに作成
  • カスタムドメインに作成

の2パターンが存在するようなので、順番に試していこうと思います。

AWS管理ドメインで作成

AWS管理ドメインを使ってエンドポイントを作成してみます。

ドメイン設定 -> ドメイン設定を作成 を選択します。

ドメイン設定名を入力します。この名前は管理上識別する為の名前の様です。

AWS管理ドメインの場合、他の欄には何も入力せず、最後の「ドメイン設定を作成」ボタンをクリックすると エンドポイントが作成されました。

カスタムドメインで作成

今度はカスタムドメインを使ってエンドポイントを作成してみます。
自分のAWSアカウントにはRoute53で管理しているドメイン(MYDOMAIN)があったので、
カスタムエンドポイント用にサブドメインを作って検証します。

エンドポイント用ドメインの証明書を作成

Certificate Managerを使って、カスタムエンドポイント用ドメインの証明書を発行します。
今回は、*.iot.MYDOMAIN で作成しました。

この部分の流れについては、以下のブログを参照ください。

カスタムドメインでエンドポイントを作成

ドメイン設定 -> ドメイン設定を作成 を選択します。

ドメイン設定名を入力した後、カスタムドメイン設定を入力します。

ドメイン名は、実際にリクエストを送信するドメイン名です。
今回は、test.iot.MYDOMAIN と入力しました。

サーバ証明書は、先程Certificate Managerで作成した証明書を選択し、「ドメイン設定を作成」をクリックすると、エンドポイントが作成されます。
(Certificate Managerで発行した証明書を選択した場合、検査証明書の欄は入力不要です。)

DNSレコードの作成

カスタムエンドポイントとAWS IoTのATSエンドポイントを紐付ける為、CNAMEレコードを作成します。

レコード名には先程作成したカスタムエンドポイントを指定し、
値には、以下に表示されているAWSアカウントのデバイスデータエンドポイントを指定します。

これでカスタムエンドポイントの設定は完了です。

疎通確認

簡単なPythonスクリプトで疎通確認してみます。
AWS IoTのMQTTテストクライアント画面でトピックをサブスクライブしつつ、
以下のスクリプトでPublishしてみます

import boto3
import json

client = boto3.client('iot-data', endpoint_url='https://{作成したカスタムエンドポイント}')

response = client.publish(
    topic='data/blog',
    qos=0,
    payload=json.dumps(
        {
            'key': 'custom-endpoint',
            'key2': 1,
        }
    ),
)

print(response)

作成したエンドポイントを使ってPublishできることが確認できました。

おわりに

取り急ぎ、カスタムエンドポイントにPublishするところまで確認できました。

ユースケースとしては、自社でIoTサービスを運営している場合に、エンドポイントを自社ドメインで作成し外部提供する、等で利用できそうだなと思いました。
その他のユースケースについても引き続き検証していこうと思います。