第3回 エッジ環境で AWS IoT の機能利用No.3

【第3回 新世代エッジエンジニアのための技術講座 コラム】
この連載コラムでは、AWS IoT Greengrassについて、数回に分けてお伝えします。
本連載は、次のような想定・目的で記述しています。
想定する読者 |
|
想定する読者の 知識レベル |
|
本連載を読んだ後に得られる期待値 |
|
1. AWS Greengrass の機能解説 (前半2)
アプリケーションロジックの実行 (3)
次は、GGC上で動作させたいアプリケーションロジックの開発・実行の仕方に移ります。

https://member.eureka-box.com/products/4/categories/4011892/posts/13450002
エッジ上でアプリケーションロジックを実行するにあたって重要なポイントは次の3つです。
- ユーザはGGC上で実行したいアプリケーションロジックを「Lambda ファンクション」として開発・配置できる
- Lambdaファンクションは様々な開発言語で記述でき、ロジックの開発を容易にするためのSDKも整備されている
- Lambdaファンクションを起動するタイミングは、そのLambda ファンクション宛にデータが到着した時、またはGGCの起動時、のいずれかを選べる
では、それぞれについて詳しく見ていきましょう。
Lambda ファンクションの開発・管理・配置
GGC は、ユーザが定義したアプリケーションロジックの実行環境(ランタイム)を提供します。
そこで実行するためのアプリケーションロジックは、Lambdaファンクションとして定義します。典型的なのは、デバイスデータを受信したときに、それを加工・分析して転送するようなロジックです。
Lambdaファンクションは、基本的に管理コンソールで定義して、それをGGCにデプロイします(ローカルPCで作成したLambdaファンクションをアップロードすることも可能です)。
GGCではデプロイの仕組みが提供されているため、アプリケーションロジックをクラウドで定義しておけば、そのロジックを実機にどう配置するかや、何らかのイベントが発生したときにそのロジックをどう実行するか(いつ、どれくらいの計算リソースを割り当てて実行するか、など)は、Greengrassが面倒を見てくれます。ですから、基本的にユーザーは、どういう機能、どういうロジックを開発すればいいかに集中できます。これはGreengrassの大きなメリットです。
Lambda ファンクション開発用の SDK
Lambdaファンクションは、Python、Java、Node.js、C/C++など、複数の開発言語で記述できます。具体的には、Lambda作成用に提供されている様々なSDKに、それぞれの言語版が用意されていて、それを各言語で使用する、という形になります。
主なSDKについて、以下にまとめました。
種類 | 内容 | コード例 (Python) |
AWS IoT Greengrass |
GGC の提供機能へのアクセス
|
クラウド(AWS IoT)へメッセージを Publish する import greengrasssdk
client = greengrasssdk.client("iot-data") client.publish(topic="hello/world", payload="Hello world!") |
AWS SDK |
AWS の各種サービスへのアクセス
|
DynamoDB にデータを挿入する import boto3
dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('user') response = table.put_item( Item = { 'id' :'1', 'name' : 'hoge' } ) |
AWS IoT Greengrass |
エッジデバイス上での ML 推論の実行
|
ML 画像分類コネクタに接続し、画像分類を実行する import greengrass_machine_learning_sdk as ml
client = ml.client('inference') resp = client.invoke_inference_service( algotype='image-classification', servicename='imageclassification', contenttype='image/jpeg', body=content of jpeg file) |
Eureka Boxは厚生労働省が実施している助成金、人材開発支援助成金の適用対象となります。
AWS IoT Greengrass Core SDK
機能
GGCの提供機能へのアクセス
- MQTT トピックのPub/Sub
- 別Lambda の直接起動
- デバイスシャドウのget/update
コード例(Python)
クラウド(AWS IoT)へメッセージをPublishする
client = greengrasssdk.client("iot-data")
client.publish(topic="hello/world", payload="Hello world!")
AWS SDK
機能
AWSの各種サービスへのアクセス
- S3やDynamoDBなどの操作
コード例(Python)
DynamoDBにデータを挿入する
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(‘user')
response = table.put_item(Item = { 'id' : '1', 'name' : 'hoge' })
AWS IoT Greengrass Machine Learning SDK
機能
エッジデバイス上でのML 推論の実行
- ML用のコネクタに対する簡潔なアクセス
コード例(Python)
ML画像分類コネクタに接続し、画像分類を実行する
client = ml.client('inference')
resp = client.invoke_inference_service(
algotype='image-classification',
servicename='imageclassification',
contenttype='image/jpeg',
body=content of jpeg file)
Lambda ファンクションの実行方式
Lambda ファンクションの実行方式には、On-Demand方式とLong-Lived方式の2つがあり、どちらで動かすかを選択できます。

https://member.eureka-box.com/products/4/categories/4011892/posts/1345000
それぞれの方式の特徴を以下にまとめました。
種類 | 実行方式 | 特徴 |
On-Demand |
Lambda はメッセージをトリガとして(メッセージ毎に)起動・実行 |
|
Long-Lived |
Lambda は GGC 起動時に起動・常駐、メッセージは逐次処理 |
|
Lambdaファンクション の定義例
アプリケーションの書き方についてはここでは詳しく説明しませんが、参考までにそれぞれのコード例を挙げておきます。
Long-Lived
GGC起動と同時に常駐し、5秒ごとにクラウドにメッセージ転送する
import logging
from threading import Timer
# クラウドへメッセージを転送するオブジェクトの生成
client = greengrasssdk.client(“iot-data”)
# 処理内容の定義
def my_function():
try:
client.publish(topic=“hello/world”, payload=“Hello world!”)
except Exception as e:
logging.error(e)
Timer(5, my_function).start()
# 後述するハンドラの外で関数を呼び出せば、スクリプトのロード時(=GGC 起動時) に開始される。
my_function()
# イベント(メッセージ受信)は発生しない or 無視するためハンドラは空定義
def function_handler(event, context):
return
On-Demand
メッセージ到着時に起動し、到着したメッセージの内容をロギングする
import logging
# メッセージ到着時に呼び出されるハンドラを定義
def function_handler(event, context):
try:
topic = context.client_context.custom['subject']
data = event['value']
response = 'topic "%s" with message "%s"' % (topic, data)
logging.info(response)
except Exception as e:
logging.error(e)
今回は、Greengrassに関する主要な機能についてご紹介しました。次回は、補助的な機能や管理機能について説明します。
これからのエッジエンジニアに求められる技術を知るには
新世代エッジエンジニアのための技術を実際に学んでみたいという方に、まずは無料でお試しいただけるオンライン学習プラットフォームを準備しています。
業務が多忙なエンジニアでも、スキマ時間で効率的に実践的な学習が出来るEureka Boxは、エンジニアの現場の声から生まれたツールです。
ソフトウェア開発を改善するための開発技術を“知り・学び”“実践する”
超実践的オンライン学習プラットフォーム
Eureka Box(ユーリカボックス)
Greengrassを正しく理解した上で適用し、最大限の効果を得られるようスキルアップしたい方にもEureka Box(ユーリカボックス)での学習をお勧めで、無料会員登録だけでも以下の特典が受けられます。
- 各連載コラムの全容、未公開コラムも一気にまとめて読める(一部動画解説付!)
- USDM(要求記述)、MBD(モデルベース開発)、システムズエンジニアリング、AWS Greengrass(新世代エッジエンジニアのための技術講座)など、ソフトウェア開発に関わる知識がギュッと凝縮、困った時のお助けアイテムとしても長期で活用出来る
- ソフトウェア開発に関わる無料お試しコンテンツも充実
デジタル人材が不足している今の時代、特にソフトウェア開発の現場では「上流技術」のスキルを持つ人が必要とされています。
そのスキルが効率よく身につくように設計されたのが「オンライン学習のEureka Box(ユーリカボックス)」
Eureka Boxの運営企業であるエクスモーションは、日本を代表する大手自動車メーカー、医療機器メーカー等、ソフトウェア開発の支援を実際に行っている企業だからこそ、
社会で実践出来るレベルまでサポートされた学習ツールが実現しました。
「Eureka Box(ユーリカボックス)」を是非ご活用ください。