Amazon Web Services ブログ

AWS でスケーラブルな IoT アナリティクスを実現

モノのインターネット (IoT) は、日々テラバイトの情報を流す数十億のデバイスがあり、前例のないほどのデータを生成しています。IoT データから貴重な分析情報を得ようとする企業や組織にに対して、AWS が強力な分析サービスを提供しています。

AWS IoT Analytics は、IoT 分析に着手する多くの顧客にとって出発点となります。このフルマネージドサービスでは、IoT データの高速な収集、処理、保存、分析が可能です。AWS IoT Analytics では、データを時系列データストアに保存する前に、フィルタリング、変換、加工を行うことができます。また、このサービスには Amazon QuickSight との統合が含まれており、ダッシュボードやビジュアライゼーションを作成して IoT データを効果的に把握できます。ただし、IoT の展開が進み、データ量が増加するにつれ、顧客はさらなる拡張性と柔軟性を必要とするようになり、分析要件の進化に対応できなくなります。このような場合に、Amazon Kinesis、Amazon S3、Amazon Athena などのサービスが役立ちます。これらのサービスは、それぞれ大規模なストリーミングデータ収集、耐久性と経済性に優れた保存、高速な SQL ベースのクエリ実行を目的として設計されています。

この投稿では、IoT 分析ワークロードを AWS IoT Analytics から Kinesis、S3、Athena に移行することのメリットを探ります。この移行により、最も要求の高い IoT ユースケースに対応できるよう分析ワークロードを拡張することが可能になることと、移行の計画と実行に役立つステップバイステップのガイドについて説明します。

移行オプション

AWS IoT Analytics から移行することを検討する場合、この移行のメリットと理由を理解することが重要です。以下の表は、既存の AWS IoT Analytics 機能に対応する代替オプションを示しています。

AWS IoT Analytics 代替サービス 理由
収集
AWS IoT Analytics では、BatchPutMessage API を使用して AWS IoT Core やその他のソースからデータを簡単に取り込めます。この統合により、デバイスからアナリティクスプラットフォームまでのデータのシームレスなフローが確保されます。 Amazon Kinesis Data Streams
または
Amazon Data Firehose
Amazon Kinesis は堅牢なソリューションを提供します。Kinesis はデータをリアルタイムでストリーミングするため、リアルタイムの分析や異常検知が必要なアプリケーションに不可欠な即座の処理と分析が可能です。Amazon Data Firehose は、ストリーミングデータを Amazon S3 に格納する前に、キャプチャと変換を簡素化してくれます。スループットに合わせて自動的にスケーリングします。
処理
AWS IoT Analytics でデータを処理する際は、クレンジング、フィルタリング、変換、外部ソースでの強化が行われます。 Managed Streaming for Apache Flink
または
Amazon Data Firehose
Managed Streaming for Apache Flink は、高度な IoT 分析シナリオに不可欠なパターンマッチングや集約などの複雑なイベント処理をサポートしています。
Amazon Data Firehose はより単純な変換を処理し、カスタム処理には AWS Lambda 関数を呼び出すことができるので柔軟性があり、Flink ほど複雑ではありません。
保存先
AWS IoT Analytics では、データ保持ポリシーやアクセス管理などの機能を備えた、IoT データ向けに最適化された時系列データストアを使用しています。

Amazon S3

または

Amazon Timestream

Amazon S3 はスケーラブル、堅牢、低コストのストレージソリューションです。S3 と他の AWS サービスとの統合により、大規模データセットの長期保存と分析に最適です。
Amazon Timestream は、時系列データ向けに作られたデータベースです。S3 からのバッチロードができます。
分析
AWS IoT Analytics には、組み込みの SQL クエリ機能、時系列分析、ホストされた Jupyter Notebook のサポートがあり、高度な分析と機械学習を簡単に実行できます。 AWS Glue と Amazon Athena AWS Glue は ETL プロセスを簡素化し、データの抽出、変換、ロードを容易にします。また、Athena と統合されたデータカタログを提供し、クエリを容易にします。
Amazon Athena はさらに、インフラストラクチャを管理することなく、S3 に保存されたデータに対して直接 SQL クエリを実行できるようになります。
ビジュアライズ
AWS IoT Analytics は Amazon QuickSight と統合されているので、視覚化とダッシュボードを作成できます。S3 などの選択した代替データストアに応じて、引き続き QuickSight を使用できます。

移行ガイド

現行のアーキテクチャでは、IoT データは IoT Core ルールを経由して IoT Core から AWS IoT Analytics に流れています。AWS IoT Analytics がデータの取り込み、変換、および格納を処理します。移行を完了するには、2 つのステップに従う必要があります。

  • ステップ 1: 継続的データ取り込みのリダイレクト
  • ステップ 2: 以前インポートしたデータのエクスポート

図 1: AWS IoT Analytics による IoT データの取り込み用の現行のアーキテクチャ

ステップ 1: 継続的データ取り込みのリダイレクト

移行の第一歩は、データの継続的な取り込みを新しいサービスへリダイレクトすることです。特定のユースケースに基づき、次の 2 つのパターンをお勧めします:

図 2: IoT データ取り込みのための提案アーキテクチャパターン

パターン 1: Amazon Kinesis Data Streams と Amazon Managed Service for Apache Flink

概要

このパターンでは、まず AWS IoT Core にデータを公開することから始めます。これは Amazon Kinesis Data Streams と統合されており、大量の帯域幅のデータをリアルタイムで収集、処理、分析できます。

メトリクスとアナリティクス

  1. データの取り込み: IoT データは、リアルタイムで Amazon Kinesis Data Streams に取り込まれます。Kinesis Data Streams は、数百万の IoT デバイスからの高スループットのデータを処理でき、リアルタイム分析と異常検知が可能です。
  2. データの処理: Amazon Managed Streaming for Apache Flink を使用して、Kinesis Data Stream からデータを処理、加工、フィルタリングします。Flink には、集計、結合、時間操作などの複雑なイベント処理のための堅牢な機能があります。
  3. データの保存: Flink は処理済みのデータを Amazon S3 に出力し、保存と追加の分析に利用できます。このデータは Amazon Athena でクエリを実行したり、他の AWS の分析サービスと統合したりできます。

このパターンが適するケース

アプリケーションがデータストリーミングなど帯域の大きいデータを扱い、パターンマッチングやウィンドウ処理といった高度な処理が必要な場合、このパターンが最適です。

パターン 2: Amazon Data Firehose

概要

このパターンでは、データがAWS IoT Coreに公開され、Amazon Data Firehoseと統合されるため、データを直接Amazon S3に保存できます。このパターンはまた、AWS Lambdaを使った基本的な変換もサポートしています。

メトリクスと分析

  1. データの取り込み: IoT データはデバイスや IoT Core から直接 Amazon Data Firehose に取り込まれます。
  2. データの変換: Firehose はデータの形式変換や拡張など、基本的な変換や処理を行います。Firehose のデータ変換機能を有効にすると、AWS Lambda 関数を呼び出して、データを出力先に送信する前に受信したソースデータを変換できます。
  3. データの格納: 処理されたデータはほぼリアルタイムで Amazon S3 に送られます。Amazon Data Firehose は、受信データのスループットに合わせて自動的にスケーリングし、確実で効率的なデータ配信を実現します。

このパターンが適するケース とか?

これは基本的なデータ変換や処理が必要なワークロードに最適です。さらに、Amazon Data Firehose は、S3 に保存されたデータのデータバッファリングと動的パーティション分割の機能を提供することにより、処理プロセスを簡素化します。

アドホックなクエリのパターン

IoT 分析のワークロードを Amazon Kinesis Data Streams や Amazon Data Firehose に移行する際、AWS Glue と Amazon Athena を活用することで、データ分析プロセスをさらにストリームライン化できます。AWS Glue はデータの準備と変換を簡素化し、Amazon Athena はサーバーレスでデータを素早く問い合わせできるようにします。あわせて、IoT データを分析するための、強力でスケーラブル、かつ費用対効果の高いソリューションを提供します。

図 3: 両パターンのためのアドホックなクエリ実行

ステップ 2: 以前インポートしたデータのエクスポート

AWS IoT Analytics に取り込み、保存されているデータを Amazon S3 にエクスポートする必要があります。この手順を簡略化するために、CloudFormation テンプレートを使って、データエクスポートのワークフロー全体を自動化できます。スクリプトを使えば、一部 (時間範囲ベース) のデータを抽出できます。

図 4: CloudFormation を使用して以前にインジェストされたデータをエクスポートするためのアーキテクチャ

S3 にデータをエクスポートするための CloudFormation テンプレート

以下の手順は、CloudFormation テンプレートを使用して同じ AWS IoT Analytics データストア内にデータセットを作成し、タイムスタンプに基づいて選択できるプロセスを示しています。これにより、ユーザーは希望する期間内の特定のデータポイントを取得できます。さらに、コンテンツ配信ルールが作成され、データを S3 バケットにエクスポートします。

ステップバイステップガイド

  1. CloudFormation テンプレートの準備: 提供された CloudFormation テンプレートをコピーし、YAML ファイル (例: migrate-datasource.yaml) として保存します。
# Cloudformation Template to migrate an AWS IoT Analytics datastore to an external dataset 
 AWSTemplateFormatVersion: 2010-09-09 
 Description: Migrate an AWS IoT Analytics datastore to an external dataset 
 Parameters:
  DatastoreName:
    Type: String 
    Description: The name of the datastore to migrate.
    AllowedPattern: ^[a-zA-Z0-9_] +$
  TimeRange:
    Type: String 
    Description: |
      This is an optional argument to split the source data into multiple files.
      The value should follow the SQL syntax of WHERE clause.
      E.g. WHERE DATE(Item_TimeStamp) BETWEEN '09/16/2010 05:00:00' and '09/21/2010 09:00:00'.
    Default: ''
  MigrationS3Bucket:
    Type: String 
    Description: The S3 Bucket where the datastore will be migrated to.
    AllowedPattern: (?!(^xn--|.+-s3alias $))^[a-z0-9][a-z0-9-] { 1,61 } [a-z0-9] $
  MigrationS3BucketPrefix:
    Type: String 
    Description: The prefix of the S3 Bucket where the datastore will be migrated to.
    Default: ''
    AllowedPattern: (^([a-zA-Z0-9.\-_] * \/)*$)|(^ $)
 Resources:
  # IAM Role to be assumed by the AWS IoT Analytics service to access the external dataset 
  DatastoreMigrationRole:
    Type: AWS::IAM::Role 
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17 
        Statement:
          - Effect: Allow 
            Principal:
              Service: iotanalytics.amazonaws.com 
            Action: sts:AssumeRole 
      Policies:
        - PolicyName: AllowAccessToExternalDataset 
          PolicyDocument:
            Version: 2012-10-17 
            Statement:
              - Effect: Allow 
                Action:
                  - s3:GetBucketLocation 
                  - s3:GetObject 
                  - s3:ListBucket 
                  - s3:ListBucketMultipartUploads 
                  - s3:ListMultipartUploadParts 
                  - s3:AbortMultipartUpload 
                  - s3:PutObject 
                  - s3:DeleteObject 
                Resource:
                  - ! Sub arn:aws:s3:::${ MigrationS3Bucket }
                  - ! Sub arn:aws:s3:::${ MigrationS3Bucket }/${ MigrationS3BucketPrefix }*

  # This dataset that will be created in the external S3 Export 
  MigratedDataset:
    Type: AWS::IoTAnalytics::Dataset 
    Properties:
      DatasetName: ! Sub ${ DatastoreName } _generated 
      Actions:
        - ActionName: SqlAction 
          QueryAction:
            SqlQuery: ! Sub SELECT * FROM ${ DatastoreName } ${ TimeRange }
      ContentDeliveryRules:
        - Destination:
            S3DestinationConfiguration:
              Bucket: ! Ref MigrationS3Bucket 
              Key: ! Sub ${ MigrationS3BucketPrefix }${ DatastoreName }/!{ iotanalytics:scheduleTime }/!{ iotanalytics:versionId }.csv 
              RoleArn: ! GetAtt DatastoreMigrationRole.Arn 
      RetentionPeriod:
        Unlimited: true 
      VersioningConfiguration:
        Unlimited: true
  1. AWS IoT Analytics データストアを特定する: データをエクスポートする必要がある AWS IoT Analytics データストアを決定します。このガイドでは、「iot_analytics_datastore」という名前のサンプルデータストアを使用します。

  1. データをエクスポートする S3 バケットを作成するか、特定してください。このガイドでは、”iot-analytics-export” バケットを使用します。

  1. CloudFormation スタックを作成します
    • AWS CloudFormation コンソールに移動します。
    • 「Create stack」 をクリックし、「With new resources (standard)」 を選択します。
    • migrate-datasource.yaml ファイルをアップロードします。

  1. スタック名を入力し、次のパラメータを指定してください:
    1. DatastoreName: 移行する対象の AWS IoT Analytics データストアの名前。
    2. MigrationS3Bucket: 移行したデータを格納する S3 バケット。
    3. MigrationS3BucketPrefix (オプション): S3 バケットのプレフィックス。
    4. TimeRange (オプション): 指定された時間範囲に基づいて、エクスポートされるデータをフィルタリングする SQL WHERE 句により、ソースデータを複数のファイルに分割できます。

  1. 「Configure stack options」画面で「Next」をクリックしてください。
  1. 確認と作成ページのチェックボックスを選択して「Submit」をクリックしてください。

  1. 完了するまで、イベントタブでスタックの作成を確認してください。

  1. スタックの作成が成功したら、AWS IoT Analytics → Datasets に移動し、移行したデータセットを確認してください。

  1. 生成されたデータセットを選択し、「Run now」をクリックしてデータセットをエクスポートします。

  1. コンテンツは、データセットの「Content」タブで確認できます。

  1. 最後に、S3 コンソールの「iot-analytics-export」バケットを開いて、エクスポートされたコンテンツを確認できます。

考慮事項:

  • コスト面での考慮点: データ移行に伴うコストについては、AWS IoT Analytics の料金ページを参照してください。完了後は不要なコストを避けるため、作成した新しいデータセットを削除することをお勧めします。
  • Full Dataset Export: 時間ベースでの分割なしにデータセット全体をエクスポートするには、AWS IoT Analytics コンソールを使用し、コンテンツ配信ルールを適宜設定することができます。

まとめ

AWS IoT Analytics から Amazon Kinesis Data Streams、S3、および Amazon Athena に IoT 分析ワークロードを移行することで、大規模で複雑な IoT データを処理する能力が向上します。このアーキテクチャは、スケーラブルで永続的なストレージと強力な分析機能を提供し、リアルタイムで IoT データから深い洞察を得ることができます。

移行が完了した後に予期しないコストを避けるために、CloudFormation で作成したリソースをクリーンアップすることが不可欠です。

移行ガイドに従えば、データ取り込みとデータ処理パイプラインをシームレスに移行でき、継続的で信頼性の高いデータフローが確保されます。AWS Glue と Amazon Athena を活用することで、データ準備とクエリがさらに簡素化され、インフラストラクチャを管理することなく高度な分析を実行できます。

このアプローチにより、IoT 分析の取り組みを効果的にスケーリングでき、ビジネスの成長に合わせて柔軟に対応し、IoT データから最大の価値を引き出すことができます。

著者について

Umesh Kalaspurkar
Umesh Kalaspurkar は、ニューヨークを拠点とする AWS のソリューションアーキテクトです。デジタルイノベーションとトランスフォーメーションプロジェクトの設計と提供に 20 年以上の経験を持ち、企業やスタートアップで活躍してきました。顧客が課題を特定し、それを克服するのを手助けすることにやりがいを感じています。仕事以外では、父親として、スキーと旅行を楽しんでいます。

Ameer Hakme
Ameer Hakme はペンシルベニア州を拠点とする AWS のソリューションアーキテクトです。北東部のソフトウェアベンダーと協力し、AWS Cloud 上で拡張性と最新性に優れたプラットフォームを設計・構築するのを支援しています。プライベートでは、バイクに乗ったり家族と過ごすのを楽しんでいます。

Rizwan Syed

Rizwan Syed は AWS のシニア IoT コンサルタントで、IoT、インダストリアル IoT、AI/ML、組み込み/リアルタイムシステム、セキュリティ、Reconfigurable Computingなど、さまざまな分野で 20 年以上の経験を持っています。顧客との共同作業で、ユースケースに合わせたユニークなソリューションを設計および開発してきました。仕事外では、Rizwan は父親として DIY 活動やコンピュータゲームに興じています。

この記事は Umesh Kalaspurkar, Ameer Hakme, Rizwan Syed によって書かれた Unlocking Scalable IoT Analytics on AWS の日本語訳です。この記事は ソリューションアーキテクト 松本敢大が翻訳しました。

松本 敢大 (Kanta Matsumoto)

アマゾンウェブサービスジャパン合同会社 ソリューションアーキテクト
普段は小売業のお客様を中心に技術支援を行っています。
好きな AWS サービスは AWS IoT Core。趣味はカメラで犬が好きです。