•  

コラム

  1. TOP
  2. コラム
  3. コラム
  4. 第3回 エッジ環境で AWS IoT の機能利用No.3

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
第3回 エッジ環境で AWS IoT の機能利用No.3

【第3回 新世代エッジエンジニアのための技術講座 コラム】

この連載コラムでは、AWS IoT Greengrassについて、数回に分けてお伝えします。

本連載は、次のような想定・目的で記述しています。

想定する読者
  • AWSのGreengrassについて多少は興味がある人
  • 独力で調べようとはしたけれど、公式HPを見ても専門用語満載で、その気が失せた人、記述内容が理解できなかった人
想定する読者の
知識レベル
  • AWS やエッジコンピューティングといった言葉は聞いたことのある人
  • 少しくらいはプログラムを書いたことがある人/読める人
本連載を読んだ後に得られる期待値
  • 以下の問いに答えられるようになる
    • Greengrassって何ができるの?
    • Greengrassに関連して登場する用語の意味は?
  • 公式HPの記述を読むための下地ができる
    • 書いてあることがある程度は理解でき、読み進めることはできる
    • チュートリアルをやってみるとき、各手順の目的や意味がわかる

 



1. AWS Greengrass の機能解説 (前半2)

アプリケーションロジックの実行 (3)

次は、GGC上で動作させたいアプリケーションロジックの開発・実行の仕方に移ります。

AWS Greengrass の機能解説 アプリケーションロジックの実行
※引用 Eureka Box(ユーリカボックス)【体験版】AWS Greengrass =連載第2回=
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
Core SDK

GGC の提供機能へのアクセス

  • MQTT トピックの Pub/Sub
  • 別 Lambda の直接起動
デバイスシャドウ(後述)の get/update

クラウド(AWS IoT)へメッセージを Publish する

import greengrasssdk
client = greengrasssdk.client("iot-data")
client.publish(topic="hello/world",
              payload="Hello world!")

AWS SDK

AWS の各種サービスへのアクセス

  • S3 や DynamoDB などの操作

DynamoDB にデータを挿入する

import boto3
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 用のコネクタ(後述)に対する簡潔なアクセス

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

Eureka Boxは厚生労働省が実施している助成金、人材開発支援助成金の適用対象となります。

詳細はこちら
人材開発支援助成金


AWS IoT Greengrass Core SDK

機能

GGCの提供機能へのアクセス

  • MQTT トピックのPub/Sub
  • 別Lambda の直接起動
  • デバイスシャドウのget/update

コード例(Python)

クラウド(AWS IoT)へメッセージをPublishする

import greengrasssdk
client = greengrasssdk.client("iot-data")
client.publish(topic="hello/world", payload="Hello world!")

 

AWS SDK

機能

AWSの各種サービスへのアクセス

  • S3やDynamoDBなどの操作

コード例(Python)

DynamoDBにデータを挿入する

import boto3
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画像分類コネクタに接続し、画像分類を実行する

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)


Lambda ファンクションの実行方式

Lambda ファンクションの実行方式には、On-Demand方式とLong-Lived方式の2つがあり、どちらで動かすかを選択できます。

Lambda ファンクションの実行方式には、On-Demand方式とLong-Lived方式の2つがある
※引用 Eureka Box(ユーリカボックス)【体験版】AWS Greengrass =連載第2回=
https://member.eureka-box.com/products/4/categories/4011892/posts/1345000

それぞれの方式の特徴を以下にまとめました。

種類 実行方式 特徴

On-Demand

Lambda はメッセージをトリガとして(メッセージ毎に)起動・実行

  • 複数のメッセージを同時に/並列に実行可能
  • ロジックの処理時間が長い場合やメッセージの到着間隔が短い or 不規則な場合に向く
  • 処理のためのリソース消費量は大きくなり得る

Long-Lived

Lambda は GGC 起動時に起動・常駐、メッセージは逐次処理

  • 複数のメッセージは単一の Lambda で逐次的に処理
  • ロジックの処理時間が短い場合やメッセージの到着間隔が長い or 規則的な場合に向く
  • 処理のためのリソースの消費量は抑えられる


Lambdaファンクション の定義例

アプリケーションの書き方についてはここでは詳しく説明しませんが、参考までにそれぞれのコード例を挙げておきます。

Long-Lived

GGC起動と同時に常駐し、5秒ごとにクラウドにメッセージ転送する

import greengrasssdk
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 greengrasssdk
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(ユーリカボックス)

エンジニア独学、オンライン学習、ソフトウェア開発独学、エンジニア教材、無料コンテンツ、Eureka Box ユーリカボックス

Greengrassを正しく理解した上で適用し、最大限の効果を得られるようスキルアップしたい方にもEureka Box(ユーリカボックス)での学習をお勧めで、無料会員登録だけでも以下の特典が受けられます。

Eureka Box会員登録特典(無料)
  1. 各連載コラムの全容、未公開コラムも一気にまとめて読める(一部動画解説付!)
  2. USDM(要求記述)、MBD(モデルベース開発)、システムズエンジニアリング、AWS Greengrass(新世代エッジエンジニアのための技術講座)など、ソフトウェア開発に関わる知識がギュッと凝縮、困った時のお助けアイテムとしても長期で活用出来る
  3. ソフトウェア開発に関わる無料お試しコンテンツも充実

デジタル人材が不足している今の時代、特にソフトウェア開発の現場では「上流技術」のスキルを持つ人が必要とされています。

そのスキルが効率よく身につくように設計されたのが「オンライン学習のEureka Box(ユーリカボックス)」

Eureka Boxの運営企業であるエクスモーションは、日本を代表する大手自動車メーカー、医療機器メーカー等、ソフトウェア開発の支援を実際に行っている企業だからこそ、
社会で実践出来るレベルまでサポートされた学習ツールが実現しました。

「Eureka Box(ユーリカボックス)」を是非ご活用ください。

株式会社エクスモーション エグゼクティブコンサルタント 小浜 崇隆

執筆者プロフィール

株式会社エクスモーション エグゼクティブコンサルタント

小浜 崇隆

専門分野:

USDM、システム設計、機能安全、自動車、建機



関連コラム

  • LINEで送る
  • このエントリーをはてなブックマークに追加

技術別コラム一覧

要求の定義と仕様化(USDM)

ROS

システムズエンジニアリング

クラウド技術
(AWS Greengrass)

Docker

モデルベース開発(MBD)

派生開発(XDDP)

SPL

用語集