• ADADADADAD

    NODEJS 中 AWS Lambda 函数的各种功能[ 建站问答 ]

    建站问答 时间:2024-12-24 18:56:54

    作者:文/会员上传

    简介:

    Nodejs 是 AWS Lambda 函数支持的语言之一。 nodejs 支持的版本是 v6.10 和 v8.10、在本章中,我们将详细了解 NODEJS 中 AWS Lambda 函数的各种功能。NodeJS 中的处理程序要

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    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 Prise(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 控制台中测试此代码后,您可以观察到以下输出

    注意上面代码的输出是一个prise对象。它不提供计数,因为计数在 setTimeout 内递增,并且函数调用不会等待 setTimeout 内的执行并返回 prise 对象。

    如果我们在处理函数上有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 Prise(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时,执行会暂停,直到函数内的 prise 被解析。请注意,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 身份提供商的详细信息。

    给出的详细信息如下

    identityognito_identity_ididentityognito_identity_pool_id

    9

    clientContext

    这将是与 aws mobile sdk 一起使用时客户端应用程序的详细信息。给出的细节如下

    client_contextlient.installation_lient_contextlient.app_titleclient_contextlient.app_version_nameclient_contextlient.app_version_codeclient_contextlient.app_package_nameclient_contextust它具有来自移动客户端应用程序的自定义值的字典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 =>", contextlientContext);
    callback(null, "Name of aws Lambda is=>"+context.functionName);
    };

    在 AWS 控制台中测试此代码后,您可以观察到以下输出

    在 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 控制台中测试此代码后,您可以观察到以下输出

    您可以从 CloudWatch 观察以下屏幕截图

    NodeJS 中的错误处理

    让我们了解一下 NodeJS 中的错误通知是如何完成的。观察以下代码

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

    您可以在日志输出中观察到以下内容

    回调中给出的错误详细信息如下

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

    作为AWS核心代理商,选择天.下.数.据的优势

    1、专属客服协助注册AWS,或提供注册好的账号直接使用

    2、支持收U等多币种支付代付,无额外服务费用

    3、AWS多种产品类型,更高产品租赁权限

    4、针对大客户,AWS专属折扣优惠

    5、7x24小时专属客服,在线解答各种疑问

    AWS亚马逊云代理商哪家好?推荐找,可享受高额折扣、高额返现优惠,电话40 02023/aws

    NODEJS 中 AWS Lambda 函数的各种功能.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载