AWS IoT Greengrass
開発者ガイド

Lambda 関数の作成とパッケージ化

AWS IoT Greengrass コア 上で実行するには、Python Lambda 関数に AWS IoT Greengrass Core SDK for Python が必要です。このチュートリアルでは、Lambda 関数デプロイパッケージに greengrasssdk フォルダを含めます。

注記

Python の Lambda 関数を実行している場合は、pip を使用して AWS IoT Greengrass Core SDK for Python をコアデバイスにインストールすることもできます。そうすれば、Lambda 関数デプロイパッケージに SDK を含めずに関数をデプロイできます。詳細については、「greengrasssdk」を参照してください。

このセクションでは、以下を行います。

  • AWS IoT Greengrass Core SDK for Python を使用するコンピュータ (AWS IoT Greengrass コア デバイスではなく) にダウンロードします。このチュートリアルでは、AWS IoT Greengrass Core SDK ダウンロード ページから SDK を GitHub にダウンロードします。

  • ダウンロードした SDK から Python Lambda 関数 (greengrassHelloWorld.py という名前) を取得します。

  • greengrassHelloWorld.py および greengrasssdk フォルダを含む hello_world_python_lambda.zip という Lambda 関数デプロイパッケージを作成します。

  • Lambda コンソールを使用して hello_world_python_lambda.zip パッケージをアップロードします。

  • AWS IoT コンソール を使用してパッケージを AWS IoT Greengrass コア デバイスに転送します (グループデプロイ中)。

  1. AWS IoT Greengrass Core SDK ダウンロード ページから AWS IoT Greengrass Core SDK for Python をダウンロードします。

  2. ダウンロードしたパッケージを解凍して、Lambda 関数コードおよび SDK を取得します。

    このモジュールの Lambda 関数では、以下を使用します。

    • examples\HelloWorldgreengrassHelloWorld.py ファイル。これは Lambda 関数コードです。

    • greengrasssdk フォルダ。これは SDK です。

    greengrassHelloWorld.py のコードを次に示します。(スペースを節約するために、すべてのコードコメントは削除されています)。 関数は 5 秒ごとに 2 つのメッセージのいずれかを hello/world トピックに発行します。

    import greengrasssdk import platform from threading import Timer import time client = greengrasssdk.client('iot-data') my_platform = platform.platform() def greengrass_hello_world_run(): if not my_platform: client.publish(topic='hello/world', payload='Hello world! Sent from Greengrass Core.') else: client.publish(topic='hello/world', payload='Hello world! Sent from Greengrass Core running on platform: {}'.format(my_platform)) Timer(5, greengrass_hello_world_run).start() greengrass_hello_world_run() def function_handler(event, context): return
  3. greengrasssdkgreengrassHelloWorld.py が含まれている HelloWorld フォルダにコピーします。

  4. Lambda 関数デプロイパッケージを作成するには、greengrassHelloWorld.py ファイルと greengrasssdk フォルダを hello_world_python_lambda.zip という名前の圧縮された .zip ファイルに保存します。.py ファイルと SDK フォルダはディレクトリのルートにある必要があります。

    
                            zip 圧縮された hello_word_python_lambda.zip の内容を示すスクリーンショット。

    UNIX 互換システム (Mac のターミナルを含む) の場合は、次のコマンドを使用してファイルとフォルダをパッケージ化できます。

    sudo zip -r hello_world_python_lambda.zip greengrasssdk greengrassHelloWorld.py

    注記

    ディストリビューションによっては、必要に応じて最初に zip をインストールします。そのために、sudo apt-get install zip などを実行します。(インストールコマンドはお客様のディストリビューションと異なる場合があります)。

    これで、Lambda 関数を作成して、デプロイパッケージをアップロードする準備ができました。

  5. Lambda コンソールを開き、[関数の作成] を選択します。

  6. [Author from scratch] を選択します。

  7. 関数に Greengrass_HelloWorld という名前を付け、残りのフィールドを以下のように設定します。

    • [Runtime] で [Python 2.7] を選択します。

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

    [Create function] を選択します。

    
                            「関数名」フィールドが「Greengrass_HelloWorld」に設定され、「ランタイム」フィールドが「Python 2.7」に設定された「基本情報」セクション。
  8. Lambda 関数デプロイパッケージをアップロードします。

    1. [設定] タブの [関数コード] で、以下のフィールドを設定します。

      • [コードエントリタイプ] で、[.ZIP ファイルをアップロード] を選択します。

      • [Runtime] で [Python 2.7] を選択します。

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

    2. [アップロード]、[hello_world_python_lambda.zip] の順に選択します(hello_world_python_lambda.zip ファイルのサイズは、以下に示すものと異なる場合があります)。

      
                                    [.ZIP ファイルをアップロード]、[Python 2.7]、[greengrassHelloWorld.function_handler]、および [アップロード] が強調表示された [設定] タブのスクリーンショット。
    3. [Save] を選択します。

      
                                    Save ボタンが強調表示されているスクリーンショット。

      注記

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

      ヒント

      アップロードしたコードを表示するには、[コードエントリタイプ] の [コードをインラインで編集] を選択します。

  9. Lambda 関数を発行します。

    1. [アクション] メニューから、[新しいバージョンを発行] を選択します。

      
                                    [新しいバージョンを発行] が強調表示された [アクション] メニューのスクリーンショット。
    2. [バージョンの説明] に「First version」と入力し、[発行] を選択します。

      
                            [バージョンの説明] フィールドが「First version」に設定され、[発行] ボタンが強調表示されたスクリーンショット。
  10. Lambda 関数バージョンのエイリアスを作成します。

    注記

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

    1. [アクション] から [エイリアスの作成] を選択します。

      
                            [エイリアスの作成] に設定された [アクション] メニューのスクリーンショット。
    2. エイリアスに GG_HelloWorld という名前を付け、バージョンを 1 (先ほど発行したバージョンに対応) に設定して、[作成] を選択します。

      注記

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

       

      
                            [名前] フィールドが [GG_HelloWorld]、[バージョン] が [1] に設定され、[作成] ボタンが強調表示された [新しいエイリアスの作成] のスクリーンショット。