【Hinemos】AWS Lambda関数をHinemosから実行する

投稿日: / 更新日:

この記事は2年以上前に書かれたものです。情報が古い可能性があります。

今回は、Hinemosのジョブを使用して、AWS Lambda関数をAPI Gateway経由で呼び出す設定例をご紹介します。

AWS Lambdaは、AWS上で任意のコードを実行するための仕組みで、実行にEC2インスタンスを必要としない点が大きな特徴です。AWS Lambda関数は、指定した間隔での定期実行、またはcronベースのスケジュール実行が可能となっていますが、待ち条件等の複雑な実行制御を行いたい場合は、外部ツールの力を借りる必要があります。このような場合に、Hinemosのジョブ機能を利用すると便利です。

それでは、実際の設定例をご紹介します。

 

1. AWS Lambda関数の作成

まず、AWS Lambda関数を作成します。ここではシンプルに、Hello Worldのjsonを返すだけのロジックを実装します。

AWS Lambdaの管理コンソール上から、”Create a Lambda function”ボタンをクリックすると、”Step 1: Select blueprint”の画面に遷移します。ここで、Lambda関数のテンプレートを選択することも可能ですが、今回はテンプレートを使用しないため、右下の”Skip”をクリックします。

Lambda関数の作成

Lambda関数の作成

“Configure function”の画面に遷移したら、関数の名前と説明を”Name”と”Description”欄に入力します。ここでは、いずれも”testfunction”としています。また、使用する処理系を”Runtime”欄で選択し、テキストエリア内にコードを入力します。今回は、”Runtime”は”Node.js”のままとし、以下のコードを貼り付けます。

 

下図は、実際に入力した様子です。

実行するLambda関数の設定

実行するLambda関数の設定

画面の下部では、関数ハンドラー(Handler)とロール(Role)を指定します。今回は、以下のように設定します。なおロールについては、リストボックスのプルダウンメニューから、”Create new role”直下の”*Basic Execution role”を選択すると、必要な権限を持ったロールが作成されます。今回は、そのようにして事前に作成したロール(lambda_basic_execution)を指定しています。

ハンドラーやロール等の設定

ハンドラーやロール等の設定

“Next”をクリックし、最終確認画面に遷移します。内容に問題がなければ、”Create function”をクリックします。

設定内容の確認

設定内容の確認

Lambda関数の作成に成功

Lambda関数の作成に成功

以上で、Lambda関数の作成は完了ですが、念のため、期待どおり動作するかテストしてみます。”Test”ボタンをクリックすると、関数へ渡すイベント(json)の設定ダイアログが表示されますが、今回の関数はイベントを単純に無視するようになっていますので、このまま”Save and test”をクリックします。

Lambda関数のテスト設定

Lambda関数のテスト設定

Lambda関数が実行され、結果が表示されます。”Execution result: succeeded”と表示され、期待どおり”Hello World”のjsonが返っていれば、テストは成功です。

Lambda関数のテスト結果

Lambda関数のテスト結果

2. ポリシーのアタッチ

次に、先ほどのLambda関数に割り当てたロールに対して、API Gateway経由でコードを実行するためのポリシーをアタッチします。

AWS管理コンソール右上のアカウント名をクリックし、プルダウンメニューから”認証情報”を選択し、遷移先の画面の左側のメニューで”ポリシー”をクリックします。既存のポリシーが一覧表示されますので、”フィルター”のテキストボックスに”apigateway”と入力します。ポリシーが絞り込み表示されたら、”AmazonAPIGatewayInvoke…”のポリシーの先頭にチェックを入れます。

API Gateway起動用のポリシー

API Gateway起動用のポリシー

この状態で、”ポリシーアクション”メニューの”アタッチ”をクリックします。”ポリシーのアタッチ”画面に遷移しますので、ここでは、先ほどLambda関数に割り当てたロール(lambda_basic_execution)にチェックを入れ、”ポリシーのアタッチ”をクリックします。

ポリシーのアタッチ

ポリシーのアタッチ

以上で、Lambda関数の実行ロールに対して、API Gateway経由で呼び出しを行うために必要なポリシーがアタッチされました。

 

3. APIの作成

続いて、Lambda関数をHTTPで呼び出すためのAPIを作成します。

まず、API Gatewayの管理コンソール上で、”Create API”をクリックします。作成するAPIの名前(API name)と説明(Description)を入力する画面に遷移しますが、ここではシンプルに、両方とも”apitest”と入力し、”Create API”をクリックします。

新しいAPIの作成

新しいAPIの作成

APIが作成され、既存のAPIのリソースツリー表示画面に遷移します(API Gatewayにおいて、”リソース”とは、APIを通してアクセスできる論理的なエンティティです。ざっくばらんにいえば、URLの”R”と同じ意味と考えて差し支えないと思います)。ここでは、新しいリソースを作成するために、”Create Resource”をクリックします。

APIを作成した直後

APIを作成した直後

“New Child Resource”の画面に遷移しますので、リソース名(Resource Name)とパス(Resource Path)を入力します。ここでは、リソース名に”testresource”を入力します。パスについては、リソース名を小文字に変換したものが自動的にセットされますので、そのままで構いません(パスのみ、別の文字列を入力することも可能です)。パスは文字どおり、APIを呼び出すためのURLのパスとして使用されます。入力後は、”Create Resource”をクリックし、リソースの作成を完了します。

リソースの作成

リソースの作成

リソースが作成されたら、左側のリソースツリー上で、先ほど作成した”/testresource”をクリックして選択し、”Create Method”をクリックします。ツリーの配下にリストボックスが出現しますので、プルダウンから”GET”を選択します。これにより、リソースをGETメソッドで呼び出すための設定画面が表示されます。

GETメソッドの作成

GETメソッドの作成

設定画面上では、”Integration type”に”Lambda Function”を選択します。すると、その下の設定項目がLambda用のものに変化しますので、Lambda関数を作成したリージョンと、Lambda関数の名前をそれぞれ設定し、”Save”をクリックします。

GETメソッドをLambda向けに設定

GETメソッドをLambda向けに設定

Lambda関数を起動するためのAPI Gatewayの許可を与えて良いかどうかの確認ダイアログが表示されます。”OK”をクリックします。

APIの作成確認

APIの作成確認

GETメソッドが作成され、リクエストからレスポンスまでのフローが表示されます。

GETメソッドのフロー

GETメソッドのフロー

ここで、作成されたAPIを実際にテストしてみます。”Client”ボックスの”TEST”をクリックします。GETメソッドをテストするための画面に遷移しますので、右端の”Test”をクリックします。

GETメソッドのテスト実行

GETメソッドのテスト実行

API経由でLambda関数が実行され、結果が表示されます。

GETメソッドのテスト結果

GETメソッドのテスト結果

画面上部の”<- Method Execution”をクリックして、前の画面に戻ったら、仕上げにAPIをデプロイします。”Deploy API”ボタンをクリックすると、デプロイ先のステージの設定ダイアログが表示されます。”ステージ”とは、APIのデプロイの設定(パス、APIキャッシュの有効化、CloudWatchのロギングの有効化など)をひとまとめにしたもので、同じAPIでも、ステージを例えばテスト用/本番用のように切り替えることが可能です。ここでは、新しいステージを作成するために”New Stage”を選び、ステージ名(Stage Name)やその他の説明を下図のように設定します。なお、ステージ名はAPI起動用URLのパスの一部として使用されます。

デプロイ先のステージの設定

デプロイ先のステージの設定

“Deploy”をクリックすると、APIがステージにデプロイされ、”Invoke URL”にAPI起動用のURLが表示されます。

APIの起動用URL

APIの起動用URL

ただし今回の場合、このURLにアクセスしても期待どおりの動作になりません。左側のツリー上で”teststage”を展開し、”/testresource”配下のGETをクリックすると、GETメソッドを起動するためのURLが表示されます(先ほどのURLの末尾に”/testresource”が追加されています)。

APIの起動用URLその2

APIの起動用URLその2

このURLをクリックすると、APIが実行され、Hello Worldのjsonがめでたくブラウザに返されます。

ブラウザ上からAPIをテスト

ブラウザ上からAPIをテスト

以上で、API Gateway経由でLambda関数を実行できるようになりました。

4. Hinemosジョブの作成

ここまで来れば、あとはHinemosでジョブを作成するだけです。今回は、Hinemosマネージャサーバ上のHinemosエージェントでジョブを実行しますので、あらかじめマネージャとエージェントを起動しておきます。また、今回はAPIの呼び出しにcurlコマンドを使用しますので、このサーバ上にcurlパッケージをあらかじめインストールしておきます。

Hinemosマネージャサーバをリポジトリにノードを登録したら、そのノードを対象としたジョブを作成します。ジョブの”コマンド”タブには、先ほどデプロイしたAPIのURLを、次のように設定します。

 

Hinemosジョブの作成

Hinemosジョブの作成

ジョブをHinemosマネージャに登録したら、試しに実行してみます。期待どおり、Lambda関数の戻り値が標準出力として得られていることが分かります。

Hinemosジョブの実行

Hinemosジョブの実行

あとは、このジョブをジョブネットに組み込めば、待ち条件等の複雑な実行制御が可能となります。

以上、簡単ですが、Hinemosのジョブを使用して、AWS Lambda関数をAPI Gateway経由で呼び出す設定例をご紹介しました。

参考URL: 演習: API Gateway と Lambda 関数 – Amazon Web Services

Hinemos導入はアトミテックにお任せください

見積もりを依頼する

最新情報発信中

Xやメルマガでも、Hinemosの保守、
開発、導入、構築やカスタマイズ等の
お役立ち情報を発信しています。
是非ご登録ください。