catch-img

CONEXIOBlackBearでAWS IoT Greengrass V2を使ってみる(2) Lambda関数コンポーネントの作成、デプロイ、動作確認

▼前回の記事はこちら
CONEXIOBlackBearでAWS IoT Greengrass V2を使ってみる(1)

目次[非表示]

  1. はじめに
  2. 実施環境
  3. 1. Lambda関数コンポーネントを作成
    1. 1.1 Lambda関数を作成
    2. 1.2 Lambda関数コンポーネントを作成
  4. 2. デプロイする
    1. 2.1 AWS IoT Device SDK v2 for Pythonのインストール
    2. 2.2 デプロイの編集
  5. 3. 動作確認する
  6. まとめ

はじめに

こんにちは。コネクシオIoTブログ 技術記事担当のHです。

前回、AWS IoT Greengrass Coreソフトウェア V2のセットアップができました。今回は、プログラムをLambda関数コンポーネントとして作成、デバイスへデプロイし、動作確認までの手順を整理したいと思います。


実施環境

前回に準拠します。


1. Lambda関数コンポーネントを作成

1.1 Lambda関数を作成

まず、デバイス上で実行したいプログラムを作成していきます。内容は、

5秒ごとにIoT Coreに向けて "hello,world" とメッセージをパブリッシュする

簡単なサンプルです。

LambdaのコンソールでLambda関数を作成する手順は、通常のLambda関数と同様なので詳細は省きますが、設定は以下通りです。ランタイムはPythonです。


ソースコードは、以下のリンクを参考にしました。

https://docs.aws.amazon.com/greengrass/v2/developerguide/ipc-iot-core-mqtt.html

import json
import logging
import sys
from threading import Timer

import awsiot.greengrasscoreipc
import awsiot.greengrasscoreipc.client as client
from awsiot.greengrasscoreipc.model import (
    QOS,
    PublishToIoTCoreRequest
)

logger = logging.getLogger(__name__)
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

TIMEOUT = 10

topic = "hello/world"
message = {"message": "Hello, World"}
qos = QOS.AT_LEAST_ONCE

ipc_client = awsiot.greengrasscoreipc.connect()


def greengrass_hello_world_run():
    try:
        request = PublishToIoTCoreRequest()
        request.topic_name = topic
        request.payload = bytes(json.dumps(message), "utf-8")
        request.qos = qos
        operation = ipc_client.new_publish_to_iot_core()
        operation.activate(request)
        future = operation.get_response()
        future.result(TIMEOUT)
    except Exception as e:
        logger.error("Failed to publish message: " + repr(e))

    Timer(5, greengrass_hello_world_run).start()


greengrass_hello_world_run()


def lambda_handler(event, context):
    return


ソースコードができたら、デプロイしてバージョンを作成しておきます。後述のLambda関数コンポーネントの作成のときにバージョン名で参照する必要があるからです。


1.2 Lambda関数コンポーネントを作成

次に、AWS IoT Greengrassのコンソール上で、コンポーネントを作成していきます。

以下のように、先ほど作成したLambda関数およびバージョンを指定してインポートします。この関数は、ずっと動き続ける必要があるため、関数の設定で固定済みの項目はTrueとしています。


2. デプロイする

2.1 AWS IoT Device SDK v2 for Pythonのインストール

今回のサンプルプログラムは、Pythonランタイムで動作し、AWS IoT Device SDKを使用してIoT Coreへパブリッシュするため、CONEXIOBlackBear上へAWS IoT Device SDK v2 for Pythonをインストールする必要があります。

https://github.com/aws/aws-iot-device-sdk-python-v2

上記リンクを参考に以下のコマンドをCONEXIOBlackBear上で実行してインストールします。

apt-get update
apt-get install python3-dev
apt-get install cmake

python3.7 -m pip install awsiotsdk

なお、本コマンドでawscrtというpipパッケージも同時にインストールされますが、.whlファイルが提供されていないためCONEXIOBlackBearでセルフビルドが走ります。そのため、20-30分程度の時間を要すことにご注意ください。(今後も使用する予定がある場合は、予め.whlファイルを作成しておくとよいと思います。)


2.2 デプロイの編集

AWS IoT Greengrassコンソールを見ると、前回のIoT Coreのセットアップを行った時点で、Deployment for MyGreengrassCoreGroupというデプロイが作成されています。そこで、このデプロイを変更していきます。

まず、コンポーネントの設定で、先ほど作成したcom.example.GreengrassV2_HelloWorldコンポーネントを指定します。

そして、コンポーネントの設定を行います。

以下のように、IoT Coreへのパブリッシュを許可する設定を書き込みます。これは、

https://docs.aws.amazon.com/greengrass/v2/developerguide/ipc-iot-core-mqtt.html

を参考にしました。

そして、以下のようにすべての項目を設定したら、デプロイボタンを押します。

デプロイボタンを押すと、以下のようにデバイスへのデプロイが開始します。


3. 動作確認する

最後に、AWS IoTコンソールのMQTT テストクライアントを使って動作確認を行います。

hello/worldトピックをサブスクライブすると、以下のようにメッセージが飛んできています。成功です。



まとめ

以上のように、AWS IoT Greengrass V2において、Lambdaプログラムを作成、デバイスへデプロイし、動作確認ができました。今後は、以前と同じく機械学習モデルなどのデプロイもしてみたいと考えています。


本記事は担当書き手の個人的感想を述べるもので、コネクシオ株式会社を代表する意思表示をするものでは有りません。


H

H

コネクシオ株式会社・IoT開発担当者
コネクシオのソリューションが5分でわかる!
工業・農業・オフィス・車両・インフラなど、
各分野から抜粋した代表例をご紹介
ご質問やご要望はこちらから
お気軽にお問い合わせください

お役立ち資料
最新記事
サイト内検索