Greengrass コネクタの開始方法 (コンソール) - AWS IoT Greengrass

AWS IoT Greengrass Version 1 は機能更新を受信しなくなり、2023 年 6 月 30 日までセキュリティパッチとバグ修正のみ受信します。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。重要な新機能新たなプラットフォームのサポートが追加された AWS IoT Greengrass Version 2 への移行を強くお勧めします。

Greengrass コネクタの開始方法 (コンソール)

この機能は AWS IoT Greengrass Core v1.7 以降で使用できます。

このチュートリアルでは、AWS Management Console を使用してコネクタを操作する方法を示します。

コネクタを使用して、開発ライフサイクルを短縮します。コネクタは、サービス、プロトコル、リソースとのやり取りを簡略する、あらかじめ組み込まれた再利用可能なモジュールです。それらのモジュールは、Greengrass デバイスにビジネスロジックをよりすばやくデプロイするのに役立ちます。詳細については、「Greengrass コネクタを使用したサービスおよびプロトコルとの統合」を参照してください。

このチュートリアルでは、Twilio 通知コネクタを設定してデプロイします。コネクタは Twilio メッセージ情報を入力データとして受け取り、Twilio テキストメッセージをトリガーします。データフローを以下の図に示します。

Lambda 関数から Twilio 通知コネクタ、Twilio へのデータフロー。

コネクタを設定したら、Lambda 関数とサブスクリプションを作成します。

  • この関数は、温度センサーからシミュレートされたデータを評価します。その後、Twilio メッセージ情報を条件付きで MQTT トピックに発行します。このトピックは、コネクタによってサブスクライブされます。

  • このサブスクリプションでは、関数はトピックに発行でき、コネクタはトピックからデータを受信できます。

Twilio 通知コネクタには、Twilio API とやり取りするための Twilio 認証トークンが必要です。トークンは、AWS Secrets Manager で作成されてグループリソースから参照されるテキスト形式のシークレットです。これにより、AWS IoT Greengrass は Greengrass Core にシークレットのローカルコピーを作成できます。このコピーは暗号化され、コネクタで使用可能になります。詳細については、「AWS IoT Greengrass Core にシークレットをデプロイする」を参照してください。

このチュートリアルには、以下の手順の概要が含まれます。

このチュートリアルは完了までに約 20 分かかります。

前提条件

このチュートリアルを完了するには、以下が必要です。

  • Greengrass グループと Greengrass コア (v1.9.3 以降)。Greengrass のグループまたは Core を作成する方法については、「AWS IoT Greengrass の開始方法」を参照してください。開始方法チュートリアルには、AWS IoT Greengrass Core ソフトウェアのインストール手順も含まれています。

  • Python 3.7 は AWS IoT Greengrass コアデバイスにインストールされています。

  • シークレットの要件で説明されているように、AWS IoT Greengrass はローカルシークレットをサポートするように設定する必要があります。

    注記

    この要件には、Secrets Manager シークレットへのアクセス許可が含まれます。デフォルトの Greengrass サービスロールを使用している場合、Greengrass は greengrass- で始まる名前の付いたシークレット値にアクセスできます。

  • Twilio アカウントの SID、認証トークン、Twilio 対応の電話番号。Twilio プロジェクトを作成した後、これらの値をプロジェクトダッシュボードで使用できます。

    注記

    Twilio トライアルアカウントを使用できます。トライアルアカウントを使用している場合は、Twilio 以外の受信者の電話番号を、確認済みの電話番号リストに追加する必要があります。詳細については、「無料の Twilio トライアルアカウントを使用する方法」を参照してください。

ステップ 1: Secrets Manager シークレットを作成する

このステップでは、AWS Secrets Manager コンソールを使用して Twilio 認証トークン用のテキスト形式のシークレットを作成します。

  1. AWS Secrets Manager コンソールにサインインします。

    注記

    このプロセスの詳細については、「AWS Secrets Manager ユーザーガイド」の「ステップ 1: AWS Secrets Manager でシークレットを作成および保存する」を参照してください。

  2. [Store a new secret] (新しいシークレットの保存) を選択します。

  3. [Choose secret type] (シークレットの種類を選択) で、[Other type of secret] (他の種類のシークレット) を選択します。

  4. [このシークレットに保存するキーと値のペアを指定します] の [プレーンテキスト] タブで、Twilio 認証トークンを入力します。すべての JSON 書式を削除し、トークンの値のみ入力します。

  5. 暗号化には aws/secretsmanager を暗号キーとして選択した状態で、[Next] (次へ) を選択します。

    注記

    Secrets Manager がアカウントで作成するデフォルトの AWS 管理キーを使用する場合、AWS KMS によって課金されることはありません。

  6. [シークレット名] に「greengrass-TwilioAuthToken」と入力し、[次へ] を選択します。

    注記

    Greengrass サービスロールのデフォルト設定では、AWS IoT Greengrass が greengrass- で始まる名前の付いたシークレットの値を取得することができます。詳細については、「シークレットの要件」を参照してください。

  7. このチュートリアルではローテーションは不要であるため、[disable automatic rotation] (自動ローテーションを無効化)、Next (次へ) の順に選択します。

  8. [確認] ページで、設定を確認し、[保存] を選択します。

    次に、シークレットを参照する Greengrass グループにシークレットリソースを作成します。

ステップ 2: Greengrass グループにローカルシークレットリソースを追加する

このステップでは、シークレットリソースを Greengrass グループに追加します。このリソースは、前のステップで作成したシークレットへの参照です。

  1. AWS IoT コンソールのナビゲーションペインの [Manage](管理)で、[Greengrass devices](Greengrass デバイス)を展開して、[Group (V1)](グループ (V1))を選択します。

  2. シークレットリソースを追加するグループを選択します。

  3. グループ設定ページの [Resources] (リソース) タブから、[Secrets] (シークレット) セクションを選択します。[Secrets] (シークレット) セクションには、グループに属するシークレットリソースが表示されます。このセクションからシークレットリソースを追加、編集、削除できます。

    注記

    別の方法として、コネクタや Lambda 関数を設定するときに、コンソールでシークレットとシークレットリソースを作成することもできます。これはコネクタの [Configure parameters] (パラメータの設定) ページか、Lambda 関数の [Resources] (リソース) ページから実行できます。

  4. [Secrets] (シークレット) セクションから [Add] (追加) を選択します。

  5. [Add a secret resource] (シークレットリソースを追加) ページで、[Resource name] (リソース名)に MyTwilioAuthToken を入力します。

  6. [Secret] (シークレット) には、[greengrass-TwilioAuthToken] を選択します。

  7. [Select labels (Optional)] (ラベルを選択 (オプション)) セクションの、AWSCURRENT ステージングラベルはシークレットの最新バージョンを表します。このラベルはシークレットリソースに常に含まれています。

    注記

    このチュートリアルでは、AWSCURRENT ラベルのみが必要です。オプションで、Lambda 関数またはコネクタで必要になるラベルを含めることができます。

  8. [Add resource] (リソースを追加) を選択します。

ステップ 3: Greengrass グループにコネクタを追加する

このステップでは、Twilio 通知コネクタのパラメータを設定し、グループに追加します。

  1. グループ設定ページで、[Connectors] (コネクタ)、[Add a connector] (コネクタの追加) の順に選択します。

  2. [Add connector] (コネクタの追加) ページで、[Twilio Notifications] (Twilio 通知) を選択します。

  3. バージョンを選択します。

  4. [Configuration] (設定) セクションで次を行います。

    • [Twilio auth token resource] (Twilio 認証トークンリソース) に、前のステップで作成したリソースを入力します。

      注記

      リソースを入力すると、[ARN of Twilio auth token secret] (Twilio 認証トークンシークレットの ARN) プロパティが設定されます。

    • [Default from phone number] (電話番号のデフォルト) に Twilio 対応の電話番号を入力します。

    • [Twilio account SID] (Twilio アカウント SID) に Twilio アカウント SID を入力します。

  5. [Add resource] (リソースを追加) を選択します。

ステップ 4: Lambda 関数デプロイパッケージを作成する

Lambda 関数を作成するには、関数のコードと依存関係を含む Lambda 関数デプロイパッケージを最初に作成する必要があります。Greengrass Lambda 関数には、コア環境での MQTT メッセージとの通信やローカルシークレットへのアクセスなどのタスクに使用する、AWS IoT Greengrass Core SDK が必要です。このチュートリアルでは Python 関数を作成するため、デプロイパッケージには Python 版の SDK を使用します。

  1. AWS IoT Greengrass Core SDK のダウンロードページから、AWS IoT Greengrass Core SDK for Python をお使いのコンピュータにダウンロードします。

  2. ダウンロードしたパッケージを解凍し、SDK を取得します。SDK は greengrasssdk フォルダです。

  3. 以下の Python コード関数を temp_monitor.py というローカルファイルに保存します。

    import greengrasssdk import json import random client = greengrasssdk.client('iot-data') # publish to the Twilio Notifications connector through the twilio/txt topic def function_handler(event, context): temp = event['temperature'] # check the temperature # if greater than 30C, send a notification if temp > 30: data = build_request(event) client.publish(topic='twilio/txt', payload=json.dumps(data)) print('published:' + str(data)) print('temperature:' + str(temp)) return # build the Twilio request from the input data def build_request(event): to_name = event['to_name'] to_number = event['to_number'] temp_report = 'temperature:' + str(event['temperature']) return { "request": { "recipient": { "name": to_name, "phone_number": to_number, "message": temp_report } }, "id": "request_" + str(random.randint(1,101)) }
  4. 以下の項目を temp_monitor_python.zip という名前のファイルに圧縮します。ZIP ファイルを作成するときは、コードおよび依存関係のみを含め、フォルダは含めません。

    • temp_monitor.py。アプリケーションロジック。

    • greengrasssdk。MQTT メッセージを発行する Python Greengrass Lambda 関数で必須のライブラリ。

    これが Lambda 関数デプロイパッケージです。

ここでは、デプロイパッケージを使用する Lambda 関数を作成します。

ステップ 5: AWS Lambda コンソールで Lambda 関数を作成する

このステップでは、AWS Lambda コンソールを使用して Lambda 関数を作成し、デプロイパッケージを使用するようにその関数を設定します。次に、関数のバージョンを公開し、エイリアスを作成します。

  1. 最初に Lambda 関数を作成します。

    1. AWS Management Console で、[サービス] を選択し、AWS Lambda コンソールを開きます。

    2. [Create function] (関数の作成) を選択し、[Author from scratch] (一から作成) を選択します。

    3. [Basic information] セクションで、以下の値を使用します。

      • [Function name] (関数名) に TempMonitor と入力します。

      • [Runtime (ランタイム)] で [Python 3.7] を選択します。

      • [Permissions] (アクセス許可) はデフォルト設定のままにしておきます。これで Lambda への基本的なアクセス許可を付与する実行ロールが作成されます。このロールは、AWS IoT Greengrass によっては使用されません。

    4. ページの下部で、[Create function] を選択します。

  2. 今度は、ハンドラを登録し、Lambda 関数デプロイパッケージをアップロードします。

    1. [Code] (コード) タブの [Code source] (コードソース) で、[Upload from] (アップロード元) を選択します。ドロップダウンから [.zip file] (.zip ファイル) を選択します。

      
                [.zip file] (.zip ファイル) が強調表示された [Upload from] (アップロード元) ドロップダウンリスト。
    2. [Upload] (アップロード) を選択し、temp_monitor_python.zip デプロイパッケージを選択します。次に、保存を選択します。

    3. 関数の [Code] (コード) タブにある [Runtime settings] (ランタイム設定) で [Edit] (編集) を選択し、次の値を入力します。

      • [Runtime (ランタイム)] で [Python 3.7] を選択します。

      • [ハンドラ] に「temp_monitor.function_handler」と入力します。

    4. [Save] を選択します。

      注記

      AWS Lambda コンソールの [Test] (テスト) ボタンは、この関数では機能しません。AWS IoT Greengrass Core SDK には、AWS Lambda コンソールで Greengrass Lambda 関数を個別に実行するために必要なモジュールは含まれていません。これらのモジュール (例えば greengrass_common) が関数に提供されるのは、Greengrass Core にデプロイされた後になります。

  3. ここで、Lambda 関数の最初のバージョンを公開し、バージョンのエイリアスを作成します。

    注記

    Greengrass グループは、Lambda 関数をエイリアス別 (推奨) またはバージョン別に参照できます。エイリアスを使用すると、関数コードを更新する時にサブスクリプションテーブルやグループ定義を変更する必要がないため、コード更新を簡単に管理できます。その代わりに、新しい関数バージョンにエイリアスを指定するだけで済みます。

    1. [Actions] メニューから、[Publish new version] を選択します。

    2. [バージョンの説明] に「First version」と入力し、[発行] を選択します。

    3. [TempMonitor: 1] 設定ページで、[Actions (アクション)] メニューの [エイリアスの作成] を選択します。

    4. [Create a new alias] ページで、次の値を使用します。

      • [Name] (名前) に「GG_TempMonitor」と入力します。

      • [Version (バージョン)] で、[1] を選択します。

      注記

      AWS IoT Greengrass は、$LATEST バージョンの Lambda エイリアスをサポートしていません。

    5. [Create] を選択します。

これで、Greengrass グループに Lambda 関数を追加する準備ができました。

ステップ 6: Greengrass グループに Lambda 関数を追加する

このステップでは、Lambda 関数をグループに追加し、そのライフサイクルと環境変数を設定します。詳細については、「グループ固有の設定による Greengrass Lambda 関数の実行の制御」を参照してください。

  1. グループ設定ページで、[Lambda functions] (Lambda 関数) タブを選択します。

  2. [My Lambda functions] (自分の Lambda 関数) で、[Add] を選択します。

  3. [Add Lambda function] (Lambda 関数を追加) ページで、Lambda 関数として [TempMonitor] を選択します。

  4. Lambda 関数のバージョンで、Alias: GG_TempMonitor を選択します。

  5. [Add Lambda function] (Lambda 関数の追加) を選択します。

ステップ 7: サブスクリプションを Greengrass グループに追加する

このステップでは、Lambda 関数にコネクタへの入力データの送信を許可するサブスクリプションを追加します。コネクタは、サブスクライブする MQTT トピックを定義しているため、このサブスクリプションはそのいずれかのトピックを使用します。これは、サンプル関数が発行するのと同じトピックです。

このチュートリアルでは、AWS IoT からのシミュレート温度値の受信を関数に許可し、コネクタからのステータス情報の受信を AWS IoT に許可するサブスクリプションも作成します。

  1. グループ設定ページの [Subscriptions] (サブスクリプション) タブで、[Add Subscription] (サブスクリプションの追加) を選択します。

  2. [Create a subscription] (サブスクリプションの作成) ページで、ソースおよびターゲットを次のように設定します。

    1. [Source type] (ソースタイプ) は、[Lambda function] (Lambda 関数)、[TempMonitor] の順に選択します。

    2. [Target type] (ターゲットタイプ) は、[Connector] (コネクタ)、[Twilio Notifications] (Twilio 通知) の順に選択します。

  3. [Topic filter] (トピックのフィルター) に twilio/txt を選択します。

  4. [Create subscription] を選択します。

  5. ステップ 1 〜 4 を繰り返して、AWS IoT に関数へのメッセージの発行を許可するサブスクリプションを作成します。

    1. [Source type] (ソースタイプ) は、Service (サービス)、IoT Cloud (IoT Cloud (IoT クラウド)) の順に選択します。

    2. [Select a target] (ターゲットの選択) は、[Lambda function] (Lambda 関数)、[TempMonitor] の順に選択します。

    3. [トピックのフィルター] に「temperature/input」と入力します。

  6. ステップ 1〜4 を繰り返して、AWS IoT へのメッセージの発行をコネクタに許可するサブスクリプションを作成します。

    1. [Source type] (ソースタイプ) は、[Connectors] (コネクタ)、[Twilio Notifications] (Twilio 通知) の順に選択します。

    2. [Target type] (ターゲットタイプ) は、[サービス][IoT Cloud] (IoT クラウド) の順に選択します。

    3. [トピックフィルター] には自動的に「twilio/message/status」と入力されます。これは、コネクタが発行する先の事前定義済みトピックです。

ステップ 8: Greengrass グループをデプロイする

Core デバイスにグループをデプロイします。

  1. AWS IoT Greengrass Core が実行されていることを確認します。必要に応じて、Raspberry Pi のターミナルで以下のコマンドを実行します。

    1. デーモンが実行中であるかどうかを確認するには

      ps aux | grep -E 'greengrass.*daemon'

      出力に root/greengrass/ggc/packages/ggc-version/bin/daemon エントリが含まれる場合、デーモンは実行されています。

      注記

      パスのバージョンは、コアデバイスにインストールされている AWS IoT Greengrass Core ソフトウェアのバージョンによって異なります。

    2. 次のようにしてデーモンを開始します。

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. グループ設定ページで、[Deploy] (デプロイ) を選択します。

    1. [Lambda functions] (Lambda 関数) タブの [System Lambda functions] (システム Lambda 関数) セクションで、[IP detector] (IP ディテクター)、[Edit] (編集) の順に選択します。

    2. [Edit IP detector settings] (IPディテクタ設定の編集) のダイアログボックスで、[Automatically detect and override MQTT broker endpoints] (MQTT ブローカーのエンドポイントを自動的に検出して上書きする)を選択します。

    3. [Save] を選択します。

      これにより、デバイスは、IP アドレス、DNS、ポート番号など、コアの接続情報を自動的に取得できます。自動検出が推奨されますが、AWS IoT Greengrass は手動で指定されたエンドポイントもサポートしています。グループが初めてデプロイされたときにのみ、検出方法の確認が求められます。

      注記

      プロンプトが表示されたら、Greengrass サービスロールの作成権限を付与し、そのロールを現在の AWS リージョン の AWS アカウント に関連付けます。このロールを付与することで、AWS IoT Greengrass は AWS サービスのリソースにアクセスできます。

      [Deployments] ページでは、デプロイのタイムスタンプ、バージョン ID、ステータスが表示されます。完了すると、デプロイのステータスが [Completed] (完了) と表示されます。

      トラブルシューティングヘルプについては、AWS IoT Greengrass のトラブルシューティング を参照してください。

注記

Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「コネクタのバージョンのアップグレード」を参照してください。

ソリューションをテストする

  1. AWS IoT コンソールのホームページで、[Test] (テスト) を選択します。

  2. [Subscribe to topic] (トピックへのサブスクライブ) で、以下の値を使用し、[Subscribe] (サブスクリプション) を選択します。Twilio 通知コネクタはこのトピックにステータス情報を発行します。

    プロパティ

    トピックのサブスクリプション

    twilio/message/status

    MQTT ペイロード表示

    文字列としてペイロードを表示

  3. [Publish to topic] (トピックに発行) で、以下の値を使用し、[Publish] (発行) を選択して関数を呼び出します。

    プロパティ

    トピック

    temperature/input

    Message

    recipient-name は名前に、recipient-phone-number はテキストメッセージの受取人の電話番号に置き換えます。例: +12345000000

    { "to_name": "recipient-name", "to_number": "recipient-phone-number", "temperature": 31 }

    トライアルアカウントを使用している場合は、Twilio 以外の受信者の電話番号を、確認済みの電話番号リストに追加する必要があります。詳細については、「個人の電話番号を認証する」を参照してください。

    正しく実行できていれば、受信者にテキストメッセージが届き、コンソールの出力データsuccess のステータスが表示されます。

    ここでは、入力メッセージの temperature29 に変更して発行します。これは 30 未満であるため、TempMonitor 関数は Twilio メッセージをトリガーしません。

以下も参照してください。