【IoT入門】AWS IoT ルールを使用してデバイスから送信されたデータをSlack通知してみる

【IoT入門】AWS IoT ルールを使用してデバイスから送信されたデータをSlack通知してみる

AWS IoT Coreへの入門として、MQTTクライアントからデータを送信し、AWS IoT ルール経由でLambdaを使用してSlackに通知する仕組みを実装してみます。
2026.08.18

こんにちは!
製造ビジネステクノロジー部のたかみです!

今回はAWS IoT Coreへの入門として、デバイスから送信したデータをAWS IoT ルール経由でLambdaに送信し、その内容をSlackに送信してみようと思います。

構成

今回作成するシステムの構成図は以下のようになっています。

IoT_practice.drawio

デバイス(MQTTX)からデータを送信

IoT Core(ルール)で取得

Lambda

Slackに通知(LambdaからIncoming Webhook URLを使用してPOST)

という流れです。

今回はデバイスの代わりにMQTTXというMQTTクライアントを使用してみます。
MQTTXとIoT Coreの連携およびPublish/Subscribeの手順は以下の記事の通りなので、本記事では割愛します。

https://dev.classmethod.jp/articles/mqtt-client-mqttx/

AWS IoT ルールを使用してみる

トピックとメッセージの前提条件

MQTTXからはtopic/mqttxというトピックでメッセージを送信するものとします。
また、MQTTXから送信されるメッセージは以下のようなJSONの形式であるものとします。

{
  "msg": "hogehoge"
}

このメッセージを受け取れるよう、ルールを作成していきたいと思います。

SQLステートメントを設定する

ルールはAWS IoT コンソールの「メッセージのルーティング」>「ルール」 から作成できます。
今回はmqttx_message_to_lambdaという名前でルールを作成してみましょう。

ルール作成画面

ルール名を決めると、次のような画面に遷移しSQLステートメントを記述することができます。

SQLステートメント作成画面

今回は以下のように記述してみました。

SELECT *, topic() AS topic, timestamp() AS ts FROM 'topic/mqttx'

SELECT句に取得したいデータを羅列し、FROM句にはどのトピックからデータを取得するのかを記述します。
これでtopic/mqttxに届いたメッセージを対象にできました。

次はSELECT句についてもう少し詳しくみてみましょう。

今回は、*, topic(), timestamp()という3つの情報を取得しています。

まず、*の部分ですが、これは受信したペイロード全体(JSONオブジェクトのトップレベルの要素すべて)を表しています。
つまり今回の場合だと、

{
  "msg": "hogehoge"
}

が取得できます。

次にtopic()ですが、これは文字通りデータを取得してきたトピックを返却します。
つまり、今回だとtopic/mqttxとなります。

最後にtimestamp()は、ルールエンジンがメッセージを処理した時点の時刻を、Unixエポックからのミリ秒(例: 1481825251155)で返します。

今回は3種類のデータを取得してみましたが、その他にも使用できる関数がたくさんあります。
一覧はこちらのページをご覧ください。
https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html

ルールアクションの設定

SQLステートメントが設定できたら、次はルールアクションを設定します。
これにより、取得したデータをどこに送信するかを決めることができます。

今回はデータの送信先として事前に作成していたLambdaを選択します(Lambda関数の中身については後述)。

ルールアクション選択画面

Lambda以外のサービスを選択することも可能です。
選択可能なサービスは以下のリンクをご参照ください。
https://docs.aws.amazon.com/iot/latest/developerguide/iot-rule-actions.html

Lambda関数の中身

実際にLambdaには以下のようなコードを書いてみました。
https://github.com/takamikento06/mqttx-message-to-slack

コードをざっくりと説明すると、
ルールから送られてきたデータをeventとして受け取る

データのバリデーション

Secrets Managerに保存しているWebhook URLを取得

Webhook URLを利用してSlack通知

といったような流れです。

コードの内容自体はこの記事の本筋から外れるので、一部のみ抜粋して記述します。

export const handler = async (event: unknown): Promise<void> => {
  console.log("受信イベント:", JSON.stringify(event));

  // 送信されたデータのバリデーション
  if (!isValidIotRuleEvent(event)) {
    // msg が存在しない/型が不正 → ログのみで正常終了(throwしない)
    console.error(
      "無効なイベント形式です。msg/topic/ts のいずれかが欠落または型不正です:",
      JSON.stringify(event)
    );
    return;
  }

  // Secrets ManagerからSlack通知用のWebhook URLを取得
  const webhookUrl = await getSlackWebhookUrl();

  // 通知用にデータを整形してSlack通知
  await postToSlack(webhookUrl, event);

  console.log("Slack への通知に成功しました");
};

動作確認

MQTTXからメッセージを送信してみましょう。
MQTTXテスト送信

すると、想定通りSlackにメッセージが送信されました。
Slack画面

まとめ

今回はAWS IoT ルールを利用し、デバイスから送信されたメッセージをSlackに送信してみました。
簡単な構成ではありますが、AWS IoTの基礎編として参考にしていただけると幸いです。


製造業のクラウド活用とデジタル化を支援します

クラスメソッドの専門家による包括的なクラウド導入とデジタル化支援で、製造業の業務効率を最大化しましょう。AWSの導入から運用、最適化まで、最新技術と豊富な知見であらゆる課題に対応します。生産ラインのデジタル化やデータ活用、IoTの導入事例もございます。ぜひ、弊社の実績をご覧ください。

製造業界での支援内容を見る

この記事をシェアする

関連記事