AWS Lambda-理论,相识

AWS Lambda快速浏览


这是什么


AWS Lambda:这是一项计算服务,使您可以为几乎任何类型的应用程序或服务器服务运行代码-全部无需管理。 AWS Lambda为您执行所有管理,包括服务器和操作系统维护,资源分配和自动扩展,代码监视和日志记录。 您所要做的就是以AWS Lambda支持的一种语言提交代码。

为什么要使用它?


  • 您只需为服务运行的时间付费。
  • 速度 Lambda本身会上升并且工作非常快。
  • 方便。 Lambda具有许多与AWS服务集成的功能。
  • 性能。 并行执行,取决于区域,最多可以执行1000到3000份。 并且,如果您愿意,可以通过写支持来提高此限制。

这种方法有其缺点,您无法控制在其上执行代码的操作系统,也无法控制CPU,内存和资源。 所有这些都是由AWS完成的。

您所能做的就是从受支持的AWS Lambda中选择一种语言。

可以吗


以下是AWS Lambda的主要功能的简要列表。 接下来,我们将按顺序考虑所有事项。



1.触发器


触发因素是lambda的“病原体”。 从某种意义上说,lambda可以与PHP进行比较,因为它对我们来说可以运行并死亡 。 接下来,我们将详细考虑工作机制。 现在,您需要了解lambda是应触发器请求执行的功能。

以下是所有可能的触发器的列表:

API网关
AWS IoT
Alexa技能套件
Alexa智能家居
应用程序负载均衡器
云前
Cloudwatch活动
Cloudwatch日志
代码提交
Cognito同步触发
强力莫德
运动学
S3
社交网络
SQS

对于它们中的每一个,您将需要配置可用于这些触发器的唯一参数。 您还可以在一个Lambda上配置多个触发器。 lambda是同步执行还是异步执行取决于触发器的类型。
注意:请注意,可以通过在手动模式下使用AWS CLI和AWS开发工具包传递所有必需的参数来执行lambda。 包括它是否将同步运行

让我们看一个例子:


1.网关API-允许您在http请求中提取lambda,并要求将结果返回给用户。 这样的操作不能异步执行,因为 需要一个答案。 对于同步操作,某些功能不可用。

2. SQS-例如,如果我们的lambda处理来自SQS的消息,则您无需在任何地方返回结果,并且可以异步执行结果。 通过异步执行,出现了几个新功能,例如,我们可以在出现错误的情况下配置重复执行,或将此类请求进一步发送到“死” SQS队列。

2.对AWS服务的权限


这些是lambda具有默认访问权限的AWS服务。 这是什么意思? 您始终可以将AWS开发工具包连接到将要编写的功能,而无需任何键或任何授权参数,就可以使用可用的服务。 您可以在用于此Lambda的IAM角色中定义所有可用服务。

所使用的每种语言都有自己的SDK,可以与主要的AWS服务进行通信。
注意:对于每个Lambda,您都将由运行Lambda的人员配置IAM角色

3. VPC


您可以为lambda配置虚拟网络,例如,以安全地连接RDS

4.在线编辑


AWS Lambda还提供了直接从浏览器界面中编辑功能代码的功能。



5.记录


所有对lambda的请求都记录到CloudWatch中 ,有关运行时和内存的数据也记录在其中,该数据对于设置限制非常有用。 此外,该代码还可以记录您自己的数据(例如,通过console.log在Node.js中)。

此外,您始终可以在“ 监视”选项卡上查看有关lambda使用情况的统计信息。

6.环境变量


您有机会将环境变量安全地传输到代码中,这使您可以在不交付代码的情况下配置系统的重要部分。 可以通过密钥对环境变量进行加密。
注意:请注意,这里有一个预定义的环境变量列表

7.代码


现在最有趣的部分是lambda本身由几个部分组成。

1. 图层 -底层。 不必要,但是如果您需要添加一些库来使用lambda,则需要将它们与主代码分开放置,这样可以大大节省主代码的数量和函数本身的速度。

AWS Lambda中的图层与docker中的图层有些相似,因为它们对于功能而言是永久的,并且需要分别进行更改。 它们也可以在其他lambda中重用。

2.函数环境 -代码必须必须包含一个函数,该函数将在每次启动lambda (处理程序)时直接执行。 关于她下面。 在她面前是我们所要求的环境。 事实是,资源管理以一种方式实现,即该环境在完成后会与功能分开存储一段时间。 在下一次启动时,它将继续进行,而无需花费时间和资源进行初始化。 因此,所有可能的事情都需要初始化为函数本身,例如配置,连接库等。

3.处理程序 -直接执行的代码本身(取决于语言)的定义不同。 例如,以Node.Js为例。 为了执行代码,您需要:

  1. js文件-1个
  2. exports.yourFunction =()=> {//您的代码}-1个

默认情况下,将启动index.js并在其中查找一个称为“ handler”的函数。 然后执行它。 您的函数可能在代码中是异步的。 这不会影响lambda的同步执行。

下面是一个示例代码,我将尝试描述那里发生的事情:

//AWS SDK  ,     e var AWS = require('aws-sdk'); //   //   ,    //   API Gateway. // ,    http  exports.handler = async(event, context) => { // event       // context     aws lambda : //   ,      console.log('testing cloud watch'); // ^       Cloud Watch   return { //     http ,     statusCode: 200, body: 'Hello world', headers: {} }; }; exports.handler = (event, context, callback) => { //    callback, // -      callback( null, //<-  ,       { //     statusCode: 200, body: 'Hello world' } ); }; 

8.版本控制


该服务支持便捷的版本控制。 简而言之,我们可以为每个下载的副本发布一个版本。 并添加指向某个版本的别名。 如何运作? 请参见下表。



因此,现在让我们弄清楚需要做些什么才能获得图中所示的内容


状态一


  1. 创建我们的lambda的第一个版本。 与第一个版本一起,我们创建一个指向“ $ LATEST”版本的指针。 它始终指示添加的最新版本。
  2. 添加别名“ Dev” 。 在这里,我们选择绑定的位置,我们有几个选项-创建一个指向特定版本号的指针,在我们的例子中是“ 1” ,将指针绑定到“ $ LATEST” ,或者绑定到另一个别名。 在这种情况下,我们附加到“ $ LATEST”指针,现在我们的“ Dev”别名将始终指向最后一个分支,因此我们可以始终在开发环境中使用最新版本的lambda测试我们的应用程序。 如果突然需要检查它在旧版本上的工作方式,只需在触发器中切换别名或更改别名中版本的链接,而无需触摸我们的应用程序
  3. 添加舞台别名并将其绑定到我们的lambda的第一个版本
  4. 添加别名“ Prod”,并重复我们对“ Stage”所做的操作

注意: 这里描述了如何在实践中使用别名。 关于lambda的实用部分将与SQS一起在下一篇文章中

因此,现在我们有点难以理解,实际上3个别名是指一个版本,尚不清楚。 但是什么都没有,一切都井井有条

第二状态


  1. 创建我们的lambda的第二个版本(可以添加“ Hello world”的第二个输出)。 在这里,我要指出, “ $ LATEST”此刻将立即查看第二个版本。 由于“ Dev”“ $ LATEST”相关联 ,因此他还将查看第二个版本。
  2. 接下来,我们希望我们的舞台讨论第二个版本。 现在,它与版本“ 1”绑定在一起。 在这里,我们需要手动更改“ Stage ”指示的版本。
  3. 欢喜 我们得到了图表中第二个状态。 也就是说,我们的“产品”着眼于第一个版本,而“ Dev”“ Stage”则着眼于第二个版本。

第三国


现在,要获得第三个状态,我们只需要在代码中添加几行,便会有lambda的第三个版本。 现在, “ Dev”会看着她。

总结一下


那么我们有什么呢?

一点。 快点 比较便宜。 自动缩放。 版本化。 功能。
在本文中,我们仅考虑了理论部分,即对该服务的熟悉程度。 与上一篇文章中的SQS相同。 在下一篇文章中,我们将考虑这两种服务如何相互交互,并以实用的形式学习如何配置和使用它们。

Source: https://habr.com/ru/post/zh-CN457100/


All Articles