Aws-lambda-function-in-nodejs
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);
};
上記のコードに async と await を追加しました。 関数呼び出しの横に await を使用すると、関数内のプロミスが解決されるまで実行が一時停止します。 await は async 関数でのみ有効であることに注意してください。
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プロバイダーに関する詳細が提供されます。 与えられた詳細は次のとおりです-
|
9 |
これは、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)" ]
}