Cloud Service
AWS IoT Events
複数のセンサーやデバイスからの入力を状態遷移で評価し、設備の異常や状態変化を検知して通知・アクションを起こす、AWS IoT Events のイベント検知サービス。
- 1.デバイスやセンサーの入力を検知器モデルの状態遷移で評価し、異常や状態変化を検出するサービス。
- 2.状態と遷移条件をビジュアルに定義し、条件成立時にSNS通知やLambda起動などのアクションを実行できる。
- 3.IoT Coreやその他のソースからの入力を受け、複数信号を組み合わせた複雑な条件判定を行える。
解決する課題
- 複数のセンサーやデバイスから上がる値を組み合わせて判断し、設備の異常や故障の予兆を検知したい
- 「一定時間しきい値を超え続けたら警報」のような状態を持った条件判定を、アプリを自作せずに実現したい
- 異常を検知したら通知やワークフロー起動まで自動でつなげ、現場の対応を迅速にしたい
主要概念と用語
- 検知器モデル(Detector Model): 監視ロジックを定義する設計図。状態とその間の遷移をまとめた状態機械として表現する
- 状態(State): デバイスや設備の置かれている局面。正常、警告、異常などを表し、現在どの状態にいるかを保持する
- 遷移(Transition): ある状態から別の状態へ移る条件。入力値を評価する論理式で定義する
- 入力(Input): 検知器に流し込むデータの定義。受け取るメッセージの項目(属性)を指定する
- 検知器(Detector): 検知器モデルを特定の監視対象ごとに実体化したもの。キー(例: 機器ID)ごとに状態を個別に保持する
- イベント / アクション: 状態内や遷移時に評価する条件と、成立時に実行する処理。SNS通知、Lambda起動、タイマー設定、変数更新などがある
- タイマー / 変数: 状態をまたいで値を保持する仕組み。一定時間の経過判定や、回数のカウントに使う
仕様・制限・クォータ
- フルマネージドで提供され、状態の保持や遷移の評価をサービス側が実行する。利用者はサーバー管理を意識しない
- 検知器モデルは状態と遷移からなる状態機械として定義し、コンソールのビジュアルエディタでも作成できる
- 入力はIoT Coreのルールアクションや、IoT Analytics、API経由のメッセージ送信など複数の経路から受け取れる
- キーごとに個別の検知器インスタンスが作られ、機器単位で独立した状態を並行して保持できる
- 検知器モデル数、入力数、検知器あたりの状態数、メッセージのスループットなどには上限がある。具体的な数値は変動するため、最新値は公式ドキュメントで確認する
内部の仕組み
AWS IoT Events は、入力として流し込まれるメッセージを検知器モデルで定義した状態機械に通し、状態遷移として評価します。検知器モデルはあらかじめ入力の構造を定義しておき、受け取ったメッセージの属性を遷移条件の論理式で参照します。各状態には、入力到着時に評価されるイベントを定義でき、条件が成立すると次の状態への遷移や、通知などのアクションが実行されます。
監視対象を区別するために、入力メッセージ内の特定の項目をキーとして指定すると、キーの値ごとに検知器インスタンスが自動で作られます。これにより、同じ検知器モデルを多数の機器へ同時に適用しても、機器ごとに独立した状態が並行して保持されます。状態をまたいで値を覚えておく必要がある場合は変数を、一定時間の経過を判定する場合はタイマーを使います。たとえば「異常値が連続して一定時間続いたら警報状態へ遷移する」といったロジックを、タイマーと遷移条件の組み合わせで表現できます。
検知器モデルの設計は、監視対象が取りうる状態を先に洗い出すところから始めると整理しやすくなります。正常・警告・異常といった状態と、その間を移る条件を図にしてから入力と変数を当てはめると、見通しの良いモデルになります。
設計パターン / ベストプラクティス
- 監視対象が取りうる状態を先に列挙し、状態と遷移を最小限に保つことで保守しやすいモデルにする
- 一時的なノイズで誤検知しないよう、タイマーによる継続時間の条件を入れてチャタリングを抑える
- 同種の機器が多い場合はキーで検知器を分離し、1つの検知器モデルを多数のインスタンスへ展開する
- 検知時のアクションは通知だけでなく、Lambdaやステップ的なワークフローにつないで対応を自動化する
- 入力の前段に IoT Core のルールを置き、必要なメッセージだけを IoT Events へ流して無駄な評価を減らす
運用・監視
- CloudWatch で入力メッセージのスループットやアクションの実行、エラーやスロットリングを監視する
- 検知器モデルの更新はバージョン管理され、既存の稼働中インスタンスへの影響を確認しながら段階的に適用する
- 想定どおりに遷移しないときは、入力メッセージの内容と遷移条件の論理式を突き合わせて検証する
- 通知やアクションの送信先(SNS トピックや Lambda 関数)の権限と疎通を、運用前に確認しておく
コスト
- 主なコストは評価したメッセージ数に応じた従量課金で構成される。流し込むメッセージが多いほどコストが増える
- IoT Core のルールで必要なメッセージだけを転送し、評価対象を絞ることでコストを抑えられる
- アクション側で呼び出す SNS や Lambda などは、それぞれのサービスの料金が別途かかる
- 料金は変動するため、最新の単価は公式の料金ページで確認する
セキュリティ
- アクセス制御は IAM で行い、最小権限の原則に従って検知器モデルや入力への操作権限を付与する
- 検知器が実行するアクションには実行ロールを設定し、SNS や Lambda など必要な送信先にだけ権限を絞る
- 通信は TLS で保護され、保存データは暗号化される
- 操作の監査には CloudTrail を利用し、検知器モデルの変更などを記録する
関連サービス・比較
| 観点 | IoT Events | IoT Core ルールエンジン |
|---|---|---|
| 主な役割 | 状態遷移で異常や状態変化を検知 | メッセージのフィルタと他サービスへの転送 |
| 状態の保持 | 検知器ごとに状態を保持する | 基本はステートレスに1メッセージを評価 |
| 複数信号の判定 | 複数入力を組み合わせ時間条件も扱える | 単一メッセージの条件評価が中心 |
| 典型用途 | 設備の故障検知やアラート | 受信メッセージのルーティング |
ハンズオン / CLI例
# 入力を作成(温度メッセージの構造を定義)
aws iotevents create-input \
--input-name "TemperatureInput" \
--input-definition 'attributes=[{jsonPath=temperature},{jsonPath=deviceId}]'
# 検知器モデルの一覧を確認
aws iotevents list-detector-models
# 特定の検知器モデルの定義を取得
aws iotevents describe-detector-model \
--detector-model-name "TemperatureAlarmModel"
AWS Service
AWS IoT Eventsを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
IoT
比較で見る軸
クラウド: AWS / カテゴリ: IoT / 難易度: intermediate
導入後に効く点
状態と遷移条件をビジュアルに定義し、条件成立時にSNS通知やLambda起動などのアクションを実行できる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- IoT
- 難易度
- intermediate
- 関連資格
- SAA-C03
- 設計柱
- operational / reliability
判断チェックリスト
- 自社の用途が「IoT / operational」に近いか確認する。
- 強みである「デバイスやセンサーの入力を検知器モデルの状態遷移で評価し、異常や状態変化を検出するサービス。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。