AWS IoT Greengrass
開発者ガイド

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

AWS IoT Greengrass コア 上で実行するには、Python Lambda 関数に AWS IoT Greengrass Core SDK for Python が必要です。このチュートリアルでは、Lambda 関数デプロイパッケージに 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 Core コンソール を使用してパッケージを AWS IoT Greengrass コア デバイスに転送します (グループデプロイ中)。

  1. AWS IoT Greengrass Core SDK ダウンロード ページから AWS IoT Greengrass Core SDK for Python をダウンロードします。[Python] セクションで [ v1.3.0 - Current version (on GitHub)] を選択し、SDK をダウンロードします。

  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] を選択します。

    • [ロール] で、[テンプレートから新しいロールを作成] を選択します。

    • [ロール名] にロールの一意な名前を入力します。(このロールは 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] に設定され、[作成] ボタンが強調表示された [新しいエリアスの作成] のスクリーンショット。