メニュー
AWS Greengrass
開発者ガイド

Lambda 関数定義の作成

次に Lambda 関数定義を作成します。Lambda 関数定義は、AWS Greengrass コア にデプロイされる関数のリストで構成されます。このシナリオでは、2 つの単純な Lambda 関数 uptime および message を使用します。

Greengrass で Lambda 関数を利用するには、これらの Lambda 関数を Lambda コンソールにアップロードする必要があります。Lambda コンソールにアクセスするリージョンと、使用している Greengrass エンドポイントのリージョンが同じであることを確認します(Greengrass にアクセスしているリージョンが us-west-2 である場合、Lambda コンソールは us-west-2 リージョンで使用します)。2 つの Lambda 関数 uptimeLambdamessageLambda を作成します。

注記

これらの Lambda 関数のソースコードは AWS Greengrass コア SDK の一部です。ソースコードは、AWS IoT コンソールからダウンロードできます。ナビゲーションペインで、[Software] を選択し、AWS Greengrass コア SDK の [Download SDK] を選択します。各 Lambda 関数は、AWS Greengrass コア SDK の examples/Storyline ディレクトリにある zip ファイルに含まれています。

AWS Lambda コンソールを使用して、Lambda 関数を作成し、[Blank Function] を選択します。トリガーは設定しないでください。関数名を uptimeLambda とします。[Runtime] で [python 2.7] を選択します。[Code entry type] で、[Upload a.ZIP file] を選択し、storyline_uptimeLambda.zip ファイルを参照します。

[Handler] に「uptimeLambda.uptime_handler」と入力します。既存のロールを選択します。このロールは、AWS Greengrass では使用しないため、重要ではありません。関数を確認して発行します。[Actions] を選択し、[Publish new version]、[Publish] の順に選択します。発行された Lambda の ARN は次のようになります: arn:aws:lambda:us-west-2:123451234510:function:uptimeLambda:1。

この発行したバージョンの Lambda 関数に Lambda エイリアスを関連付けます。Lambda エイリアスは、特定のバージョンの Lambda 関数を指すポインタです。エイリアスは変更可能であり、異なるバージョンを指すように更新できます。Lambda エイリアスの詳細については、AWS Lambda Developer Guideversioning-aliases.html を参照してください。エイリアスを使用すると、Lambda 関数を参照する各 Greengrass のサブスクリプションを更新することなく、Lambda 関数を更新できます。

注記

$LATEST エイリアスを Greengrass で使用することはサポートされていません。

[Actions] メニューから、[Create alias] を選択します。[Name] に「"storyLineUptime"」と入力し、先ほど発行したバージョンを選択します。

注記

Lambda エイリアスは、特定のバージョンの Lambda 関数に付けられた名前です。エイリアスを使用すると、後でサブスクリプションテーブルを更新することなく、Lambda 関数を更新できます。進行中のデプロイ用に内部で使用される $LATEST を除き、任意のエイリアスを使用できます。

エイリアスが正しいバージョンを指していることを確認します。エイリアスは、後で Greengrass のデプロイ時に自動的に解決されます。

AWS Lambda コンソールを使用して、Lambda 関数を作成し、[Blank Function] を選択します。トリガーは設定しないでください。関数名を messageLambda とします。[Runtime] で [python 2.7] を選択します。[Code entry type] で、[Upload a .ZIP file] を選択し、リリースに含まれている storyline_messageLambda.zip ファイルを参照します。[Handler] に「messageLambda.message_handler」と入力します。既存のロールを選択します。このロールは、AWS Greengrass では使用しないため、重要ではありません。Lambda 関数を確認して 発行します。[Actions] メニューから、[Publish new version]、[Publish] の順に選択します。発行された Lambda 関数の ARN は次のようになります: arn:aws:lambda:us-west-2:123451234510:function:messageLambda:1

発行したバージョンにエイリアスを関連付けます。[Actions] メニューから、[Create alias] を選択します。[Name] に「"storyLineMessage"」と入力し、先ほど発行したバージョンを選択します。エイリアスを使用すると、後でサブスクリプションテーブルを更新することなく、Lambda 関数を更新できます。エイリアスが正しいバージョンを指していることを確認します。エイリアスは、後で Greengrass のデプロイ時に自動的に解決されます。

注記

関数のリストを作成するには、バージョンまたはエイリアスのバージョン付き ARN が必要です。Lambda 関数のバージョンを発行していること、それにエイリアスを関連付けていることを確認します。

CLI コマンド create-function-definition を使用して Lambda 関数定義を作成します。

Copy
aws greengrass create-function-definition --name "MyFunctionDefinition"

CLI コマンド create-function-definition の引数

--name

Lambda 関数定義の名前。

CLI コマンド create-function-definition の出力は次のようになります。

Copy
{ "LastUpdatedTimestamp": "2017-05-17T18:26:14.235Z", "CreationTimestamp": "2017-05-17T18:26:14.235Z", "Id": "ff44a4cf-a619-47c2-95b4-13c6daf8cf47", "Arn":"arn:aws:greengrass:us-west-2:123451234510:/greengrass/definition/functions/ff44a4cf-a619-47c2-95b4-13c6daf8cf47", "Name": "<MyFunctionDefinition>" }

次に、定義に Lambda 関数を追加することで、Lambda 定義バージョンを作成します。

Copy
aws greengrass create-function-definition-version --function-definition-id "<FunctionDefinitionId>" --functions '[ { "Id": "An arbitrary element ID.", "FunctionArn": "<uptimeLambda-version-arn>", "FunctionConfiguration": { "Executable": "uptimeLambda.uptime_handler", "MemorySize": 128000, "Timeout": 3 } }, { "FunctionArn": "<messageLambda-version-arn>", "FunctionConfiguration": { "Executable": "messageLambda.message_handler", "MemorySize": 128000, "Timeout": 3 } }]'

CLI コマンド create-function-definition-version の引数

--function-definition-id

CLI コマンド create-function-definition から返される関数定義の ID。前の例のリストで、このエントリの ID は ff44a4cf-a619-47c2-95b4-13c6daf8cf47 です。

--functions

関数定義に追加する関数を記述する JSON オブジェクトのリスト。

Id

リストの当該エントリの要素 ID。

FunctionArn

定義に追加する関数バージョンの ARN。

注記

関数バージョンの ARN はバージョンで終了する必要があります。たとえば、"arn:aws:lambda:us-west-2:$ACCOUNT:function:UptimeLambda:1" は有効な関数バージョンの ARN です。

FunctionConfiguration

定義に追加する関数の設定情報。

Executable

Lambda 関数ハンドラの名前。

MemorySize

Lambda 関数の実行用に割り当てるメモリの量。

Timeout

Lambda 関数のタイムアウト (秒単位)。

CLI コマンド create-function-definition-version の出力は次のようになります。

Copy
{ "Arn" : "arn:aws:greengrass:us-west-2:123451234510:/greengrass/definition/lambdas/ff44a4cf-a619-47c2-95b4-13c6daf8cf47/versions/8bdd9e9f-c2be-41a0-8cb2-2b8e952013c3", "Id" : "ff44a4cf-a619-47c2-95b4-13c6daf8cf47", "Version" : "8bdd9e9f-c2be-41a0-8cb2-2b8e952013c3", "CreationTimestamp" : "2017-05-17T18:54:17.227Z" }

Lambda 定義バージョンの ARN を書き留めます。これは、後で必要になります。

Lambda 関数リストは、CLI コマンド get-function-versionを使用して表示できます。

Copy
aws greengrass get-function-definition-version --function-definition-id "<FunctionDefinitionId>" --function-definition-version-id "<FunctionDefinitionVersion>"

CLI コマンド get-function-definition-version の引数

--function-definition-id

Lambda 定義の ID。

--function-definition-version-id

関数定義バージョンの ID。

CLI コマンド get-function-definition-version の出力は次のようになります。

Copy
{ "Definition": { "Functions": [ { "FunctionConfiguration": { "Executable": "messageLambda.message_handler", "MemorySize": 128000, "Timeout": 3 }, "Id": "message-lambda", "FunctionArn": "arn:aws:lambda:us-west-2:123451234510:function:messageLambda:storyLineMessage" }, { "FunctionConfiguration": { "Executable": "uptimeLambda.uptime_handler", "MemorySize": 128000, "Timeout": 3 }, "Id": "uptime-lambda", "FunctionArn": "arn:aws:lambda:us-west-2:123451234510:function:uptimeLambda:storyLineUptime" } ] }, "Version": "8bdd9e9f-c2be-41a0-8cb2-2b8e952013c3", "CreationTimestamp": "2017-05-17T18:54:17.227Z", "Id": "ff44a4cf-a619-47c2-95b4-13c6daf8cf47", "Arn": "arn:aws:greengrass:us-west-2:123451234510:/greengrass/definition/lambdas/ff44a4cf-a619-47c2-95b4-13c6daf8cf47/versions/8bdd9e9f-c2be-41a0-8cb2-2b8e952013c3" }