AWS IoT Greengrass
開発者ガイド

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

Python Lambda 関数を AWS IoT Greengrass コア で実行するには、この関数を Python AWS IoT Greengrass Core SDK の greengrasssdk フォルダとパッケージ化する必要があります。このセクションでは、以下の手順を実行します。

  • Python AWS IoT Greengrass Core SDK をコンピュータ (AWS IoT Greengrass コア デバイスではありません) にダウンロードします。この SDK は「AWS IoT Greengrass Core SDK ダウンロード」からダウンロードできます。

  • ダウンロードした SDK ファイルを圧縮解除します。

  • 圧縮解除した SDK から greengrassHelloWorld.py という Python Lambda 関数を取得します。

  • 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 ダウンロード ページからこの SDK をダウンロードします。[Python 2.7] セクションを見つけ、[v1.3.0 - current version (現行バージョン)] を選択して SDK をダウンロードします。

  2. Lambda 関数と SDK を取得できるようにダウンロードした greengrass-core-python-sdk-1.3.0.tar.gz ファイルを解凍します。手順については、オペレーティングシステムに対応するタブを選択してください。

    WindowsmacOSUNIX-like system
    Windows

    Windows で .tar.gz ファイルを解凍するためのツール (7-ZipWinZip、その他) を使用します。たとえば、以下のステップでは 7-Zip を使用します。

    1. 7-Zip をインストールしたら、Windows エクスプローラー (Windows logo key + E) を使用して greengrass-core-python-sdk-1.3.0.tar.gz ファイルに移動し、ファイルを右クリックして [7-Zip]、[Extract Here (ここに展開)] の順に選択します。これにより greengrass-core-python-sdk-1.3.0.tar ファイルが作成されます。

    2. greengrass-core-python-sdk-1.3.0.tar ファイルを右クリックして [7-Zip]、[Extract Here (ここに展開)] の順に選択します。これにより、aws_greengrass_core_sdk フォルダが作成されます。

    3. aws_greengrass_core_sdk フォルダと sdk フォルダを展開し、python_sdk_1_3_0.zip を解凍します。

    macOS
    1. Finder で、greengrass-core-python-sdk-1.3.0.tar.gz ファイルに移動してダブルクリックします。これにより、aws_greengrass_core_sdk フォルダが作成されます。

    2. aws_greengrass_core_sdk フォルダと sdk フォルダを展開し、python_sdk_1_3_0.zip を解凍します。

    UNIX-like system
    1. ターミナルウィンドウを開き、greengrass-core-python-sdk-1.3.0.tar.gz ファイルが含まれているディレクトリに移動します。

    2. 次のコマンドを実行して、ファイルを解凍します。

      tar -xzf greengrass-core-python-sdk-1.3.0.tar.gz

      これで aws_greengrass_core_sdk ディレクトリが作成されます。

    3. python_sdk_1_3_0.zip ファイルを解凍します。

      cd aws_greengrass_core_sdk/sdk sudo unzip python_sdk_1_3_0.zip

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

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

    • sdk\python_sdk_1_3_0greengrasssdk フォルダ。これは 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] に設定され、[作成] ボタンが強調表示された [新しいエリアスの作成] のスクリーンショット。