Aws-lambda-function-in-nodejs

提供:Dev Guides
移動先:案内検索

AWS Lambda – NODEJSの機能

Nodejsは、AWS Lambda関数がサポートする言語の1つです。 nodejsでサポートされるバージョンはv6.10およびv8.10です。 この章では、NODEJSのAWS Lambda関数のさまざまな機能について詳しく学習します。

NodeJSのハンドラー

nodejsでAWS Lambda関数を作成するには、最初にハンドラーを宣言する必要があります。 nodejsのハンドラーは、ファイルの名前とエクスポート関数の名前です。 たとえば、ファイルの名前は index.js で、エクスポート関数名は lambda handler であるため、対応するハンドラーは index.lambdahandler です

ここに示されているサンプルハンドラーを観察します-

exports.lambdahandler = function(event, context, callback) {  //code goes here}

ハンドラーへのパラメーター

ハンドラーは、Lambda関数を構築するための主要なコアです。 ハンドラーは、 event、context 、および callback の3つのパラメーターを取ります。

イベントパラメータ

トリガーされたイベントのすべての詳細が含まれます。 たとえば、S3でトリガーされるLambda関数を使用している場合、イベントにはS3オブジェクトの詳細が含まれます。

コンテキストパラメータ

Lambda関数のプロパティや設定の詳細など、コンテキストの詳細が含まれています。

コールバック関数

発信者に詳細を返すのに役立ちます。 コールバックの構造は次のようになります-

callback(error, result);

コールバック関数のパラメータは以下に与えられて説明されています-

エラー- Lambda関数の実行中にエラーが発生した場合、詳細が表示されます。 Lambda関数が成功した場合、コールバック関数の最初のパラメーターとして null を渡すことができます。

  • 結果-*これは、ラムダ関数の正常な実行の詳細を提供します。 エラーが発生した場合、結果のパラメーターは無視されます。

注意- AWS Lambdaでコールバック関数を使用することは必須ではありません。 コールバック関数がない場合、ハンドラーはそれをnullとして返します。

有効なコールバック署名は以下のとおりです-

callback();               //It will return success, but no indication to the caller
callback(null);           //It will return success, but no indication to the caller
callback(null, "success");//It will return the success indication to the caller
callback(error);          // It will return the error indication to the caller

AWS Lambdaが実行されるたびに、エラーや成功などのコールバックの詳細が、コンソールメッセージ(存在する場合)とともにAWS CloudWatchに記録されます。

Nodejs8.10でAWS Lambdaを使用する

nodejs8.10でAWS Lambdaを操作し、同期および非同期で関数を呼び出す方法を理解しましょう。

同期方法でLambda関数を呼び出す

次の例では、同期方法でラムダ関数を呼び出すことについてのアイデアを提供します-

exports.handler = function(event, context, callback) {
   let arrItems = [4,5,6,8,9,10,35,70,80,31];
   function countevennumbers (items) {
      return new Promise(resolve => {
         setTimeout(() => {
            let a = 0;
            for (var i in items) {
               if (items[i] % 2 == 0) {
                  a++;
               }
            }
            resolve(a);
         },2000);
      });
   }
   let evennumber = countevennumbers(arrItems);
   callback(null,'even numbers equals ='+evennumber);
};

AWSコンソールでこのコードをテストした後、次の出力を確認できます-

偶数番号カウント

上記のコードからの出力はpromiseオブジェクトであることに注意してください。 カウントはsetTimeout内でインクリメントされ、関数呼び出しはsetTimeout内で実行を待機せず、promiseオブジェクトを返すため、カウントは提供されません。

ハンドラー関数に async/await がある場合、ラムダ関数からの正確な出力を取得します。

非同期の方法でハンドラーを呼び出す

次の例では、非同期の方法でラムダ関数を呼び出すことについてのアイデアを提供します-

exports.handler = async function(event, context, callback) {
   let arrItems = [4,5,6,8,9,10,35,70,80,31];
   function countevennumbers (items) {
      return new Promise(resolve => {
         setTimeout(() => {
            let a = 0;
            for (var i in items) {
               if (items[i] % 2 == 0) {
                  a++;
               }
            }
            resolve(a);
         }, 2000);
      });
   }
   let evennumber = await countevennumbers(arrItems);
   callback(null,'even numbers equals ='+evennumber);
};

上記のコードに asyncawait を追加しました。 関数呼び出しの横に await を使用すると、関数内のプロミスが解決されるまで実行が一時停止します。 awaitasync 関数でのみ有効であることに注意してください。

AWSコンソールでこのコードをテストした後、次の出力を確認できます-

偶数カウント出力

NodeJSのContextDetails

Contextオブジェクトは、Lambda関数の名前、ミリ秒単位の残り時間、リクエストID、クラウドウォッチグループ名、タイムアウトの詳細などの詳細を提供します。

次の表は、コンテキストオブジェクトで利用可能なメソッドと属性のリストを示しています-

コンテキストオブジェクトに使用できるメソッド

Sr.No Method Name & Description
1

getRemainingTimeInMillis()

このメソッドは、Lambda関数が関数を終了するまでの残り時間をミリ秒で示します

コンテキストオブジェクトに使用できる属性

Sr.No Attribute name & Description
1

functionName

これにより、AWS Lambda関数名が与えられます

2

functionVersion

これにより、実行中のAWS Lambda関数のバージョンが得られます

3

nvokedFunctionArn

これにより、ARNの詳細が表示されます。

4

memoryLimitInMB

これは、Lambda関数の作成中に追加されたメモリ制限を示しています

5

awsRequestId

これにより、AWSリクエストIDが提供されます。

6

logGroupName

これにより、クラウドウォッチグループの名前が表示されます。

7

logStreamName

これにより、ログが書き込まれるcloudwatchログストリーム名がわかります。

8

identity

これにより、aws mobile sdkで使用した場合のAmazon Cognito IDプロバイダーに関する詳細が提供されます。

与えられた詳細は次のとおりです-

  • identity.cognito_identity_id *identity.cognito_identity_pool_id
9
  • clientContext*

これは、aws mobile sdkで使用した場合のクライアントアプリケーションの詳細です。 与えられた詳細は次のとおりです-

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom-モバイルクライアントアプリからのカスタム値の辞書があります
  • client_context.env-AWS Mobile SDKの環境の詳細が含まれています

コンテキストオブジェクトについてのより良いアイデアを得るために、次の例を見てください-

exports.handler = (event, context, callback) => {
  //TODO implement
   console.log('Remaining time =>', context.getRemainingTimeInMillis());
   console.log('functionName =>', context.functionName);
   console.log('AWSrequestID =>', context.awsRequestId);
   console.log('logGroupName =>', context.log_group_name);
   console.log('logStreamName =>', context.log_stream_name);
   console.log('clientContext =>', context.clientContext);
   callback(null, 'Name of aws Lambda is=>'+context.functionName);
};

AWSコンソールでこのコードをテストした後、次の出力を確認できます-

成功したログ

AWSコンソールでこのコードをテストした後、次のログ出力を確認できます-

ログ出力テスト

NodeJSへのログイン

console.logを使用してNodeJSにログインできます。ログの詳細は、Lambda関数に対してCloudWatchサービスから取得できます。

より良い理解のために次の例を観察してください-

exports.handler = (event, context, callback) => {
  //TODO implement
   console.log('Logging for AWS Lamnda in NodeJS');
   callback(null, 'Name of aws Lambda is=>'+context.functionName);
};

AWSコンソールでこのコードをテストした後、次の出力を確認できます-

テスト後の出力

CloudWatchから次のスクリーンショットを見ることができます-

スクリーンショットクラウドウォッチ

NodeJSのエラー処理

NodeJSでエラー通知が行われる方法を理解しましょう。 次のコードを観察してください-

exports.handler = function(event, context, callback) {
  //This Source code only throws error.
   var error = new Error("something is wrong");
   callback(error);
};

実行結果の詳細

あなたはログ出力で次を観察することができます-

ログ出力監視

エラーの詳細は、次のようにコールバックで提供されます-

{
   "errorMessage": "something is wrong",
   "errorType": "Error",
   "stackTrace": [    "exports.handler (/var/task/index.js:2:17)"  ]
}