随着云计算技术的普及,Serverless 架构作为一种新兴的应用架构方式,受到越来越多开发者的关注。在 Serverless 环境下,以事件驱动的编程方式成为了非常常见的做法。通过触发器将函数与事件解耦,使得函数可以被异步执行,并且响应时间更快。
本文将介绍在 Serverless 环境下如何使用异步事件触发器,同时提供实例代码以帮助您理解如何在项目中使用该功能。
异步事件触发器的定义
在 Serverless 架构中,事件触发器可以将事件和函数解耦以便于异步执行。事件触发器负责监听事件,一旦事件触发,则会将事件发送到已配置的函数。被触发的函数可以处理收到的事件,然后将结果发送给外部应用程序。
通常,异步事件触发器由以下几个组成部分:
- 触发器:事件的来源,比如对象存储的文件上传完成事件;
- 规则:定义何时触发器应该接收事件;
- 处理程序:事件触发后处理事件的代码,通常是 AWS Lambda 函数。
Serverless 环境中的异步事件触发器
在 Serverless 技术中,Lambda 函数是最常用的处理程序。Lambda 函数是云业务中最受欢迎的微服务之一,由于其高弹性和低成本,它可以在数秒内响应请求,也可以在几毫秒内完成请求。
触发器和规则通常由云商提供,开发者只需要编写自定义函数即可。与 AWS Lambda 类似,其他的服务也提供了类似的能力,比如在 Google Cloud Platform GCP 中,触发器称为 Cloud Pub/Sub,规则称为 Cloud Scheduler。
除了 Lambda 函数作为处理程序外,Serverless 环境中还有其他的事件驱动函数。在 Azure 中,事件驱动函数称为触发器。此外,还有其他云厂商的解决方案,如 IBM 的 OpenWhisk。
如何使用异步事件触发器
为了从 Serverless 中使用异步事件触发器功能,您需要遵循以下四个简单的步骤:
创建一个事件源。这是一个负责将事件发送到触发器的 AWS 服务。一个示例是 Amazon S3,它允许您在存储桶中上传或删除对象时触发 Lambda 函数。
创建一个触发器。触发器定义了 Lambda 函数应响应的事件类型和发生事件的频率。
编写 Lambda 函数代码以对事件做出响应。
部署 Lambda 函数。
实例代码
在此,我们提供一个示例代码,它在文件上传成功后会发送一封电子邮件通知。本代码基于 AWS Lambda 函数和 Amazon S3 服务。
首先,您需要确保已具备 AWS CLI 工具,并且已安装并配置。您可以使用以下命令检查:
aws --version
然后,您需要创建一个名为 lambda_function.py
的 Python 文件,其中包括以下代码:
-- -------------------- ---- ------- ------ ---- ------ ----- ------ -- -------------- ---------- ------ - ------------------------ --- - ------------------- ------------------- - -------- -- ------ -- ------ --- --------------------- --------- --------------- ------ - - ------------------ - --- --- ------ ---- --- ----- ------ - ------------------------------------------- --- - ------------------------------------------ - ---- ----- ------------ -------- - ------------------ ---- --------------- ------ -------- - -------- -- ---- ----- ------------ --- ------------------ ----- -------- - --------------- ---------------------------------------- ------------- -------------- -------------------------- -- --------- ---------- - ------- ----- -------- -- -- -------- ---------- ------- -- ------- - ------- - ------- -- --- ---- --- ---- -------- -- --- -- ------- ------ - ------ - --- - ---- ---------- ------- -- ------- - ------- ----- --- ---- --- ---- -------- -- --- -- ---------------- ------------ - ------ - --- - --- - --------- - ------ - --- - --- - ----------- ---------- ------- - - - - ------ --------
请注意,此 Lambda 函数引用 Python 代码和 AWS SDK。Python 代码是在 AWS Lambda 中运行的 Lambda 函数,AWS SDK 用于将电子邮件发送到您的设备,确保您与 AWS 服务的内部通信仅限于 Python 函数定义的范围。
随后,在终端中使用以下命令创建部署包:
zip deploy.zip lambda_function.py
接下来,您需要使用 AWS CLI 在 AWS 中创建 Lambda 函数。
aws lambda create-function \ --function-name s3EventNotification \ --zip-file fileb://deploy.zip \ --handler lambda_function.lambda_handler \ --runtime python3.8 \ --timeout 10 \ --environment Variables={AWS_REGION=eu-west-1} \ --role arn:aws:iam::123456:role/LambdaExecutionRole
其中:
--function-name
: 已部署的 Lambda 函数名称--zip-file
: 部署包的名称和位置--handler
: Lambda 函数代码和处理程序的入口点--runtime
: 指定代码的运行时--timeout
: Lambda 函数运行时限制--environment
: Lambda 函数环境中的变量--role
: Lambda 函数运行时身份验证,各位读者需要根据各自 AWS 账户情况进行更改
最后一步就是创建一个事件源和触发器,使之与 Lambda 函数相关联。
在 Amazon S3 控制台中,选择要监视更新的 S3 bucket,并转到此选定 S3 bucket 的 “Properties” 界面。
在 “Events” 部分,您可以为 S3 bucket 设置事件通知(向其他 AWS 服务发送通知)。单击“添加通知”,您将在 “属性配置” 界面中看到以下选项窗口:
为属性配置创建一个名称,则指定 Lambda 函数作为目标,并选择要监视的事件类型及其配置。最终点击 “保存”。
现在,您已经设置了事件通知,它将通知指定的 Lambda 函数,每当在 S3 bucket 中创建新对象时。Lambda 函数将在您的指定电子邮件地址中向您发送电子邮件通知。
要完成 Serverless 应用程序的开发流程-从构建到部署到监测,您还需要考虑其它细节。
结论
本文提供了在 Serverless 环境下使用异步事件触发器的详细指南和示例代码,您可以在涉及大量事件处理的项目中使用该功能加快响应速度,从而提高整体性能。
尝试运用在示例代码中给出的思路,您可以将其扩展到在各类场景下使用异步事件触发器的开发之中,该技术可以为您带来更好的性能表现和更高的开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67359d630bc820c5824f798e