Amazon Web Services ブログ

産業用デバイスから AWS サービスへのデータ収集

産業データは貴重なリソースであり、機械の性能、プロセス、製品に関する洞察を提供します。 このデータを収集して分析することで、企業は製品の品質を高め、効率を最適化し、サプライチェーンを管理し、予防保全を効果的にスケジュールできます。 ただし、産業用デバイスからのデータ収集は複雑なプロセスになる可能性があります。 通常、これらのデバイスはさまざまなベンダーによって製造されており、それぞれが独自のデータ形式、アドレッシング、およびプロトコルを使用しています。 また、実際の製造工程 (本番環境) に必要なソフトウェアを導入、運用していくためには、検証時よりもさらに複雑になることもあります。 Shop Floor Connectivity (SFC) は工場からのデータ収集を可能にするソリューションで、新規設備であってもレガシーなプロトコルを用いた既存設備であってもカスタマイズ可能な接続ソリューションを迅速に提供できます。 SFC は、既存の IoT データ収集サービスの制約に対処し、データ収集を統合することで、さまざまなベンダーの機器から一貫した方法でデータを収集し、さまざまな AWS サービスで使用できるようにしています。

SFC コンポーネント

SFC を構成するコンポーネントには主に 3 つのタイプがあります。

  • プロトコルアダプター
  • SFC コア
  • ターゲットアダプター
SFC コンポーネントの概要

図:SFC コンポーネントの概要

SFC コンポーネントの概要

プロトコルアダプター

プロトコルアダプターは、いくつかの産業用デバイスからデータを読み取るために使用されます。このアダプターは、デバイスが使用しているプロトコルを抽象化し、追加のメタデータを含むデータを共通の形式で SFC コアに送信します。 このインターフェイスは、フレームワークの他の部分を変更することなく、新しいプロトコルアダプターで SFC を簡単に拡張できるように設計されています。 この記事の執筆時点で、SFC には Modbus TCP、MQTT、OPCUA、Ethernet/IP PCCC、ADS、SNMP、S7、および SQL 用のアダプターなどがあります。 (訳注:他にも対応プロトコルがあるため詳細は Github リポジトリをご参照ください)

SFC コア

SFC コアコンポーネントは SFC フレームワークのコントローラーです。 プロトコルアダプターを介したデータ収集の設定とスケジューリングを処理します。 オプションで、60 種類以上の型変換などが可能な関数を組み合わせて、受信した各データ値を変換できます。これにより、複雑なデータ変換要件に対応できます。 SFC コアはエンドツーエンドにデータ型を忠実に連携でき、複雑な構造化データ型や多次元配列などについても、ソースから読み取ったデータ形式でターゲットに送信できます。 オプションとして、12 種類の集計関数を使用して、データをエッジでバッファリングして集約し、ネットワークトラフィックの削減が可能です。 SFC コアは AWS Secrets Manager と統合されているため、システム設定で使用するシークレットをプレースホルダーで指定できます。

ターゲットアダプター

ターゲットアダプターは、SFC コアからデータを受信し、特定の AWS サービスやお客様独自のサービスに送信するコンポーネントです。 コンポーネントはオプションで Apache Velocity テンプレートを使用してデータ変換を適用し、受信サービスに必要な形式でデータを配信できます。 本記事の執筆時点では、 AWS IoT Analytics, AWS IoT Core, Amazon Kinesis Data Streams, Amazon Data Firehose, AWS Lambda, Amazon Managed Streaming for Apache Kafka (MSK) , Amazon Simple Storage Service (S3) , AWS IoT SiteWise, Amazon Timestream, Amazon Simple Notification Service (SNS) ,Amazon Simple Queue Service (SQS) のアダプターがあります。 ローカルファイルシステム、ターミナル出力、MQTT クライアント用の追加ターゲットも用意されています。

データ収集

データ収集は設定ファイルによって構成することができ、追加のコーディングは必要ありません。 これは、SFC コアプロセスにスケジュールを定義することによって実現されます。 各スケジュールの設定では収集間隔とデータソースを設定でき、様々な種類のデータソースから異なる形式のデータを設定をもとに読み取れます。ソースの種類はさまざまです。 ソースは、使用されるプロトコルアダプターと、そのアダプターを使用して読み取る必要がある値を定義します。 オプションで、変換と集計を定義して、収集したデータに適用できます。 1 つのスケジュールでは、収集および処理されたデータを送信するターゲットアダプターも指定します。

デプロイ

SFC コアは、ユーザーが設定したコネクターとターゲットアダプターをロードする単一のプロセスとしてデプロイできます。 または、プロトコルアダプタ、ターゲットアダプタ、および SFC コアを、収集したデータを交換するために TCP/IP ストリームを介して通信する個々のサービスとして展開することもできます。 これらのサービスは、同じ物理マシンに配置することも、別の外部ハードウェアに配置することもできます。 この柔軟性により、データ収集と処理の負荷分散が可能になり、さまざまな接続要件と制限があるネットワークセグメントをまたいで展開できます。 以下の図は、いくつかのデプロイメント例を示しています。

図:SFC の構成例

図:SFC の構成例

SFC コンポーネントを実行するには Java 仮想マシンが必要です。 コンポーネントは、スタンドアロンのアプリケーション、コンテナとして、または AWS IoT Greengrass コンポーネントとして実行できます。

SFC の拡張

SFC は、新しいプロトコルとターゲットアダプタを簡単に実装し拡張できます。 新しいアダプターのコンポーネントを構築するには、開発者は SFC コアがアダプターと通信するために使用するアダプターのインターフェイスを実装する必要があります。 SFC は、開発者が SFC のコードを用いてプロトコルとターゲットの実装に集中できるように設計されていますが、必ずしも SFC のコードを修正する必要はありません。SFC は既存の設定 (Configuration) を組み合わせてカスタマイズされた設定プロバイダを構成できます。 SFC コンポーネントによって生成されるメトリクスは、Amazon CloudWatch メトリクスやその他のメトリクスデータストアに送信できるように、カスタムメトリクスライター (書き込み機能) を構成できます。 カスタムログライターを設定することで、ロギング出力データをカスタムストアに書き込むこともできます。

OPC UA から Amazon S3 と AWS IoT Core への設定例

以下は OPC UA サーバーからデータを読み取り、データ加工や集計を行わずに AWS IoT Core サービスの MQTT トピックと Amazon S3 バケット内のオブジェクトに直接送信する簡単な設定例です。 さらに、下の画像には登場していませんがデバッグターゲットが含まれており、デバッグ目的でデータをコンソールに送信します。

図:設定ファイルで定義された構成のイメージ

図:設定ファイルで定義された構成のイメージ

SFC 設定ファイル

{
  "AWSVersion": "2022-04-02",
  "Name": "OPCUA to S3, IoT Core and console",
  "Schedules": [
  {
  "Name": "OPCUA-DATA",
  "Interval": 1000,
  "Sources": {
  "OPCUA-SOURCE": ["*"]
  },
  "Targets": ["IoTCoreTarget", "S3Target", "DebugTarget"]
  }
  ],
  "Sources": {
  "OPCUA-SOURCE": {
  "Name": "OPCUA-SOURCE",
  "ProtocolAdapter": "OPC-UA",
  "AdapterOpcuaServer": "OPCUA-SERVER",
  "SourceReadingMode": "Subscription",
  "Channels": {
  "ServerStatus": {
  "NodeId": "ns=0;i=2256"
  },
  "SimulationCounter": {
  "NodeId": "ns=3;i=1001"
  },
  "SimulationRandom": {
  "NodeId": "ns=3;i=1002"
  },
  "LevelAlarm": {
  "NodeId": "ns=6;s=MyLevel.Alarm",
  "EventType": "ExclusiveLevelAlarmType"
  }
  }
  }
  },
  "ProtocolAdapters": {
  "OPC-UA": {
  "AdapterType": "OPCUA",
  "OpcuaServers": {
  "OPCUA-SERVER": {
  "Address": "opc.tcp://sfc-server",
  "Path": "OPCUA/SimulationServer"
  }
  }
  }
  },
  
  "Targets": {
  "IoTCoreTarget": {
  "TargetType": "AWS-IOT-HTTP",
  "TopicName": "sfc-data-topic",
  "Region": "eu-west-1",
  "CredentialProviderClient": "AwsIotClient"
  },
  "S3Target": {
  "TargetType": "AWS-S3",
  "Region": "eu-west-1",
  "BucketName": "sfc-data-bucket",
  "Interval": 60,
  "BufferSize": 1,
  "CredentialProviderClient": "AwsIotClient",
  "Compression": "Zip"
  },
  "DebugTarget": {
  "TargetType": "DEBUG-TARGET"
  }
  },
 "AdapterTypes": {
  "OPCUA": {
  "JarFiles": ["/sfc/opcua/lib"],
  "FactoryClassName": "com.amazonaws.sfc.opcua.OpcuaAdapter"
  }
  },
  
  "TargetTypes": {
  "AWS-IOT-HTTP": {
  "JarFiles": ["/sfc/aws-iot-http-target/lib"],
  "FactoryClassName": "com.amazonaws.sfc.awsiot.http.AwsIotHttpTargetWriter"
  },
  "AWS-S3": {
  "JarFiles": ["/sfc/aws-s3-target/lib"],
  "FactoryClassName": "com.amazonaws.sfc.awss3.AwsS3TargetWriter"
  },
  "DEBUG-TARGET": {
  "JarFiles": ["/sfc/debug-target/lib"],
  "FactoryClassName": "com.amazonaws.sfc.debugtarget.DebugTargetWriter"
  }
  },
  
  "AwsIotCredentialProviderClients": {
  "AwsIotClient": {
  "IotCredentialEndpoint": "1234567890abcd.credentials.iot.eu-west-1.amazonaws.com",
  "RoleAlias": "TokenExchangeRoleAlias",
  "ThingName": "MyThingName",
  "Certificate": "/sfc/cert/certificate.crt",
  "PrivateKey": "/sfc/cert/private.key",
  "RootCa": "/sfc/cert/root.pem"
  }
  }
 }

設定のポイントとなる項目

Schedule: 設定の中心となるのが Schedule (スケジュール) で、この例では ‘OPCUA-DATA’ です。 このスケジュールは、データ取得のソースの概要を示し、収集間隔をミリ秒単位で設定し、データ配信のターゲットとなる宛先を指定します。

Sources: このセクションでは、データソースについて記述します。 この例では、単一の OPC UA ソースが定義されています。 このソース内の詳細として、アダプター名とデータの取得元となるアダプター内の特定のサーバーが含まれます。 チャンネルには、さまざまなタイプのソースアダプターに合わせたデータ項目が含まれています。 この例における OPC UA アダプターの場合、これらのチャンネルはデータノード、イベント、アラームなどのデータ項目を表し、それぞれが固有のノード ID で識別されます。

Protocol Adapters: 使用されるプロトコルアダプターは、このセクションで定義します。 各プロトコルアダプタータイプには固有の要素があります。 この例で使用されている OPC UA アダプターの場合、データが読み取られる実際の OPC UA サーバーの定義があります。

Targets : このセクションでは、データを配信する宛先を定義します。 ターゲットの種類ごとに、Amazon S3 ターゲットの場合は Amazon S3 バケット名、AWS IoT Core アダプターの場合はトピック名など、特定の要素があります。

Adapter Types and Target Types: 各アダプターとターゲットは各々の設定を持ちます。これらは AdapterTypes または TargetTypes セクションで設定する必要があります。 それぞれのタイプは、アダプターまたはターゲットを実装する JAR ファイルをロードする場所と、これらのインスタンスを作成するためのファクトリークラスの名前を定義します。 SFC コアは、この情報を使用して必要なアダプターとターゲットのインスタンスを作成します。 (注:これらのセクションは、アダプターまたはターゲットが SFC コアと同じプロセスで実行されている場合にのみ必要です。 アダプターまたはターゲットが IPC サービスとして実行される場合、アダプターはプロトコルまたはターゲットサーバーを参照します。これにより、アクセス可能なアドレスとポートが定義されます。)

AWS IoT Credential Provider Clients: このセクションでは、AWS サービスへのアクセスを必要とするターゲットが使用するクライアントを定義します。各クライアントは、一時的な資格情報を取得するための X.509 証明書とキーファイルのセットを使用します。ロールエイリアスは、AWS サービスへのアクセスを許可するロールを指します。詳細については、AWS Security ブログの記事 “How to Eliminate the Need for Hardcoded AWS Credentials in Devices by Using the AWS IoT Credentials Provider” を参照してください。

SFC を利用開始するには

SFC はソースコードとして提供されており、https://github.com/aws-samples/shopfloor-connectivity から入手できます。GitHub の SFC リポジトリには、SFC の構成方法とカスタムコンポーネントの作成方法について詳しく説明されたドキュメントが含まれています。事前ビルドされた SFC パッケージは、https://github.com/aws-samples/shopfloor-connectivity/releases からダウンロードできます。 SFC リポジトリには、この記事で使用した例の SFC のデプロイと構成に必要な手順を説明する包括的なクイックスタートガイドも含まれています。

投稿者について

Arie Leeuwesteijn

Arie Leeuwesteijn

アマゾン ウェブ サービス (AWS) のプリンシパルソリューションビルダーである Arie Leeuwesteijn は、産業および製造業のクライアントに合わせたクラウドソリューションの設計を専門としています。 企業顧客を導く専門知識を持つ彼は、運用の最適化とビジネス価値の向上を目的としたクラウドサービスの実用化を促進しています。

このブログはソリューションアーキテクトの黒田が翻訳しました。原文はこちらです。