はじめに
こんにちは、TIGの栗田、伊藤、辻です。先日2020/9/25にオンラインにてFuture Tech Nightという社外勉強会を開催しました。今回は第4弾としてGoとAWSを使って工場制御する最新プロジェクトの事例を紹介しました。
- 第1弾【On-Line】Future Tech Night ~メディア業界変革編~
- 第2弾【On-Line】Future Tech Night ~MaaS ビジネス編~
- 第3弾【On-Line】Future Tech Night ~船舶IoT Platform編~
- 第4弾【On-Line】Future Tech Night #4 〜Go x AWS スマート工場編〜 <—– 今回はこれ
Gopherのアイキャッチのおかげか、Future Tech Night史上過去最高の参加人数となり大盛況で終わりました。
概要
勉強会は以下のような構成で行いました。
- FutureとTechnology Innovation Groupの紹介
- 工場案件の基礎知識
- 工場現場のリアルな話
- ラズパイじゃ解決しない。ハードにこだわってシステムを組む理由
- 採用技術と考慮すべきポイント
- Goを利用した制御系通信の事例
- AWSサーバレスサービス上への構築の仕方
- 知らないと怖い特殊な工場要件の考慮ポイント
栗田からは工場案件の基礎知識ということで、製造業の工場現場のリアルな話や、制御系システムをデザインする上で知ってくべき話をしました。いわゆるITカットでスマート工場の話をするときどうしてもアーキテクチャやソフトウェア、せいぜいNWの世界に閉じがちです。しかし今回は、工場にはどのようなハード機器や考え方があって、なぜそのような機器選定や機器選定やルール化がされていて、それを失敗するとどうなりうるのか、というかなりハードの側面によった説明に特化しました。
今回紹介した内容の一部は、下記当社のTech Blogにも記載していますので、御覧ください。
工場をHackするための基本知識 前編
工場をHackするための基本知識 後編
伊藤からはGoを用いて、AWSクラウドから工場のPLCと通信するためのプロトコル実装を解説しました。MCプロトコルで通信するためのGoのライブラリは future-architect/go-mcprotocol としてGitHubに公開しています。
辻からはクラウドから工場のデバイスを制御するためのアーキテクチャや、制御用のサーバを工場(Edge)に配備せずに、フルクラウド・サーバレスとした理由などを解説しました。また準リアルタイムにPLCと通信するためにStep Functionsを活用したポーリングの仕組みの話をしました。
登壇者からのコメント
栗田:今回1時間という限られた時間のなかで、一般論からハードとソフトの両方について触れ、さらに実装のレベルにまで到達したので、かなり駆け足になってしまいました。しかし、スマート工場というのはそれだけ奥深く、様々な機器が複雑に絡み合って構成されているのだと感じていただけたら幸いです。
伊藤:GoでMCプロトコルでの通信を行った実例を紹介しました。大変マニアックな内容で受け入れてもらえるか心配でしたが、面白かったと感想をいただけました、ありがとうございます。
辻:EdgeのPLCをサーバーレスで制御するという新しい取り組みについて紹介しました。時間の関係上、GoやDynamoDB周辺の話はあまりできなかったので、別の機会にお話しできればと思います。
勉強会でいただいた質問
勉強会でいただいた質問をいくつか紹介します。時間の関係上、駆け足になってしまった回答もいくつかありましたので、一部補足しております。
Q. EdgeとクラウドはTransit GateWayで接続しているとのことでしたが、セキュリティに関してはTransit GateWayを用いていれば問題ないでしょうか?
A. 筆者の個人的な見解としてはNoです。オンプレとクラウドをつなぐ手段としてTransit Gatewayはあがりますが、必ずしもそれを使えば問題ないわけではなく、適切にNW環境を構築する必要があります。例えばTransit GatewayでつながるNW空間にウィルスが侵入してしまった場合、そのままオンプレ工場側のNW空間まで侵されてしまいます。そのため、例えばオンプレ工場側のGateway部分に侵入検知や監視ツールを仕込むなどして、適切に防御する必要があります。
Q. Step Functionsで秒単位のポーリングを実現している方法について詳しく教えてほしいです。
A. 下図のようにStep Functionsのタスクがループするようにステートマシンを構成しています(1つの緑背景が1つのタスクです)。図には記述していませんがStep FunctionsのWaitのタスクを用いることで秒単位の実行遅延を発生させることができます。
Q. StepFunctionsを用いてポーリングする場合、料金は大丈夫でしょうか?
A. Step Functionsは1000回あたりの状態遷移で0.025ドルとなっています(以降は1状態遷移ごとに0.000025ドル)。現時点ではあくまでも机上の計算ですが、1日12時間稼働1000ミリ秒ごとに実行する前提で、またStep Functionsで稼働するLambdaの金額なども加味したうえで試算したところ、現実的な金額の範囲で収まっているため問題ない、と判断しています。
Q. Go言語で開発している理由があれば教えてほしいです。
A. Go言語はバージョン1の間はバージョンを更新しても、同じコードが正しくコンパイルおよび実行され続けることが保証されています。 1
実行速度など様々な観点からも各種言語と比較しましたが、工場のために書いたソースコードは10年単位の規模での運用が視野に入るため、安心して運用できるという観点が大きな選定理由として存在します。
まとめ
ご参加いただいた方々、ありがとうございました!
FutureではFuture Tech Nightの他にも様々なイベントを開催しております。今後も皆様のご参加をお待ちしております。
connpassのフューチャーグループイベントのメンバー登録やTwitter(@future_recruit_)のフォローもお忘れなく📝