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 コア デバイスに転送します (グループデプロイ中)。
-
AWS IoT Greengrass Core SDK ダウンロード ページから AWS IoT Greengrass Core SDK for Python をダウンロードします。
-
ダウンロードしたパッケージを解凍して、Lambda 関数コードおよび SDK を取得します。
このモジュールの Lambda 関数では、以下を使用します。
-
examples\HelloWorld
のgreengrassHelloWorld.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
-
-
greengrasssdk
をgreengrassHelloWorld.py
が含まれているHelloWorld
フォルダにコピーします。 -
Lambda 関数デプロイパッケージを作成するには、
greengrassHelloWorld.py
ファイルとgreengrasssdk
フォルダをhello_world_python_lambda.zip
という名前の圧縮された .zip ファイルに保存します。.py ファイルと SDK フォルダはディレクトリのルートにある必要があります。UNIX 互換システム (Mac のターミナルを含む) の場合は、次のコマンドを使用してファイルとフォルダをパッケージ化できます。
sudo zip -r hello_world_python_lambda.zip greengrasssdk greengrassHelloWorld.py
注記
ディストリビューションによっては、必要に応じて最初に
zip
をインストールします。そのために、sudo apt-get install zip
などを実行します。(インストールコマンドはお客様のディストリビューションと異なる場合があります)。これで、Lambda 関数を作成して、デプロイパッケージをアップロードする準備ができました。
-
Lambda コンソールを開き、[関数の作成] を選択します。
-
[Author from scratch] を選択します。
-
関数に
Greengrass_HelloWorld
という名前を付け、残りのフィールドを以下のように設定します。-
[Runtime] で [Python 2.7] を選択します。
-
[アクセス許可] で、デフォルト設定を維持します。これにより、基本的な Lambda アクセス許可を付与する実行ロールが作成されます。このロールは AWS IoT Greengrass により使用されません。
[Create function] を選択します。
-
-
Lambda 関数デプロイパッケージをアップロードします。
-
[設定] タブの [関数コード] で、以下のフィールドを設定します。
-
[コードエントリタイプ] で、[.ZIP ファイルをアップロード] を選択します。
-
[Runtime] で [Python 2.7] を選択します。
-
[ハンドラ] に「
greengrassHelloWorld.function_handler
」と入力します。
-
-
[アップロード]、[
hello_world_python_lambda.zip
] の順に選択します(hello_world_python_lambda.zip
ファイルのサイズは、以下に示すものと異なる場合があります)。 -
[Save] を選択します。
注記
AWS Lambda コンソールの [テスト] ボタンは、この機能には使用できません。AWS IoT Greengrass Core SDK には、AWS Lambda コンソールで Greengrass Lambda 関数を個別に実行するために必要なモジュールが含まれていません。これらのモジュール (
greengrass_common
など) は、Greengrass コアにデプロイされた後で関数に指定されます。ヒント
アップロードしたコードを表示するには、[コードエントリタイプ] の [コードをインラインで編集] を選択します。
-
-
Lambda 関数を発行します。
-
[アクション] メニューから、[新しいバージョンを発行] を選択します。
-
[バージョンの説明] に「
First version
」と入力し、[発行] を選択します。
-
-
Lambda 関数バージョンのエイリアスを作成します。
注記
Greengrass グループは、Lambda 関数をエイリアス (推奨) またはバージョンで参照できます。エイリアスを使用する方がコード更新の管理が簡単です。関数コードが更新された場合にサブスクリプションテーブルやグループ定義を変更する必要がないためです。代わりに、新しい関数バージョンのエイリアスを指定します。
-
[アクション] から [エイリアスの作成] を選択します。
-
エイリアスに
GG_HelloWorld
という名前を付け、バージョンを1
(先ほど発行したバージョンに対応) に設定して、[作成] を選択します。注記
AWS IoT Greengrass は、$LATEST バージョンの Lambda エイリアスをサポートしていません。
-