Lambda 関数の作成とパッケージ化 - AWS IoT Greengrass

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

このモジュールの Python Lambda 関数の例では、AWS IoT Greengrass Core SDK for Python を使用して MQTT メッセージを発行しています。

このステップでは、次の操作を行います。

  • AWS IoT Greengrass Core SDK for Python を使用するコンピュータ (AWS IoT Greengrass コア デバイスではなく) にダウンロードします。

  • Lambda 関数コードと依存関係を含む関数デプロイパッケージを作成します。

  • Lambda コンソールを使用し、Lambda 関数を作成してデプロイパッケージをアップロードします。

  • Lambda 関数のバージョンを発行し、そのバージョンを指すエイリアスを作成します。

このモジュールを完了するには、Python 3.7 をコアデバイスにインストールする必要があります。

 

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

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

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

    • examples\HelloWorldgreengrassHelloWorld.py ファイル。これは Lambda 関数コードです。関数は 5 秒ごとに 2 つのメッセージのいずれかを hello/world トピックに発行します。

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

  3. greengrassHelloWorld.py を含む HelloWorld フォルダに greengrasssdk フォルダをコピーします。

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

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

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

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

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

    [Create function] を選択します。

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

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

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

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

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

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

      
                                    [Upload a .zip file (.ZIP ファイルをアップロード)]、[Python 3.7]、[greengrassHelloWorld.function_handler]、[Upload (アップロード)] が強調表示された [設定] タブのスクリーンショット。
    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] に設定され、[作成] ボタンが強調表示された [新しいエイリアスの作成] のスクリーンショット。