NODEJS 中 AWS Lambda 函数的各种功能
Nodejs 是 AWS Lambda 函数支持的语言之一。 nodejs 支持的版本是 v6.10 和 v8.10、在本章中,我们将详细了解 NODEJS 中 AWS Lambda 函数的各种功能。
NodeJS 中的处理程序
要在 nodejs 中编写 AWS Lambda 函数,我们应该先声明一个处理程序。 nodejs 中的处理程序是文件名和导出函数的名称。比如文件名是 index.js,导出函数名是 lambda handler,所以它对应的handler是 index.lambdahandler
观察此处显示的示例处理程序-
exports.lambdahandler = function(event, context, callback) { //code goes here}
处理程序的参数
Handler 是构建 Lambda 函数的主要核心。处理程序采用三个参数: event、context 和 callback。
事件参数
它具有触发事件的所有详细信息。例如,如果我们使用 Lambda 函数在 S3 上触发,则该事件将包含 S3 对象的详细信息。
上下文参数
它具有上下文的详细信息,例如 Lambda 函数的属性和配置详细信息。
回调函数
它有助于将详细信息反馈给来电者。回调的结构如下-
callback(error, result);
回调函数的参数解释如下-
错误- 如果在执行 Lambda 函数期间发生任何错误,这将提供详细信息。如果 Lambda 函数成功, null 可以作为回调函数的第一个参数传递。
Result- 这将提供成功执行 lambda 函数的详细信息。如果发生错误,则忽略结果参数。
注意- 在 AWS Lambda 中使用回调函数不是强制性的。如果没有回调函数,处理程序会将其返回为空。
有效的回调签名如下-
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函数
以下示例让您了解以同步方式调用 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 控制台中测试此代码后,您可以观察到以下输出-
如果我们在处理函数上有 async/await 将从 lambda 函数获得准确的输出。
以异步方式调用处理程序
以下示例让您了解以异步方式调用 Lambda 函数-
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 时,执行会暂停,直到函数内的 promise 被解析。请注意, await 仅对 async 函数有效。
在 AWS 控制台中测试此代码后,您可以观察到以下输出-
NodeJS 中的上下文详细信息
Context 对象提供了 Lambda 函数的名称、剩余时间(以毫秒为单位)、请求 ID、cloudwatch 组名称、超时详细信息等详细信息。
下表显示了上下文对象可用的方法和属性列表-
上下文对象可用的方法
Sr.No | 方法名称和描述 |
1 | getRemainingTimeInMillis() 此方法以毫秒为单位给出剩余时间,直到 Lambda 函数终止函数 |
可用于上下文对象的属性
Sr.No | 属性名称和描述 |
1 | functionName 这给出了 AWS Lambda 函数名称 |
2 | functionVersion 这里给出了 AWS Lambda 函数执行的版本 |
3 | nvokedFunctionArn 这将提供 ARN 详细信息。 |
4 | memoryLimitInMB 这显示了创建 Lambda 函数时添加的内存限制 |
5 | awsRequestId 这给出了 AWS 请求 ID。 |
6 | logGroupName 这将给出 cloudwatch 组的名称 |
7 | logStreamName 这将给出写入日志的 cloudwatch 日志流名称。 |
8 | identity 当与 aws mobile sdk 一起使用时,这将提供有关 amazon cognito 身份提供商的详细信息。 给出的详细信息如下- identity.cognito_identity_ididentity.cognito_identity_pool_id |
9 | clientContext 这将是与 aws mobile sdk 一起使用时客户端应用程序的详细信息。给出的细节如下- client_context.client.installation_idclient_context.client.app_titleclient_context.client.app_version_nameclient_context.client.app_version_codeclient_context.client.app_package_nameclient_context.custom-它具有来自移动客户端应用程序的自定义值的字典client_context.env-它包含来自 AWS 移动开发工具包的环境详细信息 |
查看以下示例以更好地了解上下文对象-
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 控制台中测试此代码后,您可以观察到以下输出-
登录 NodeJS
我们可以使用 console.log 来登录 NodeJS。日志详细信息可以从 CloudWatch 服务中针对 Lambda 函数获取。
观察以下示例以更好地理解-
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 控制台中测试此代码后,您可以观察到以下输出-
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)" ] }
作为AWS核心代理商,选择天.下.数.据的优势
1、专属客服协助注册AWS,或提供注册好的账号直接使用
2、支持收U等多币种支付代付,无额外服务费用
3、AWS多种产品类型,更高产品租赁权限
4、针对大客户,AWS专属折扣优惠
5、7x24小时专属客服,在线解答各种疑问
评论