完整的AWS Lambda初学者手册

2020-10-08 07:16:15

欢迎来到无服务器世界。您将听到的第一件事是AWS Lambda-并且您将继续听到有关它的消息!虽然架构可以在不涉及lambdas的情况下是无服务器的,但它通常是无服务器应用程序中的关键组件。在这个由3部分组成的AWS Lambda手册系列的第一篇文章中,我们将介绍什么是AWS Lambda,并回顾各种术语的基础知识、如何创建Lambda函数以及如何运行它。

AWS Lambda是一个事件驱动型无服务器计算平台,可响应事件启动服务-有关Lambda触发器的更多信息,请参阅我们的完整Lambda触发器指南系列的第1部分和第2部分。您的代码只是作为一个文件放在那里,而AWS会一直关注您设置的触发事件。当该事件发生时,将执行您的代码并执行所需的操作。它被认为是“无服务器的”,因为在用户出去寻找它之前,服务器是不存在的--这就是功能即服务(FAAS)的缩影。

Lambda的另一个好处是由AWS管理的自动可伸缩性,这意味着您不需要考虑基础设施。该服务将自动适应不断增长的需求,同样,也将缩减规模以节省资源。所有这些都使AWS Lambda成为减少资源和预算浪费的绝佳解决方案。

在开始讨论如何设置和配置Lambda之前,下面是常用和谈论的定义和术语。

Lambda函数:在应用程序中执行特定任务的一组相关语句。它由代码和与其关联的任何依赖项组成。每个Lambda函数都有其相关的配置信息(名称、描述、入口点和资源要求)。

触发器:调用函数(运行您提供的代码)的一组活动。活动可以是任何东西,比如进入S3存储桶的新对象、关闭的网站或服务、API调用等。

实际函数:这是构成函数的运行时代码。AWS支持Python、Node.js、C#、Go和Java8作为运行时环境。

资源:可以为每个函数分配一定的角色,赋予函数特定的权限,如读取S3存储桶内容、将结果写入数据库等。

触发器显示在左侧,在这种情况下,API网关触发器处于活动状态。资源显示在右侧,在本例中是CloudWatch日志和DynamoDB。

事件源:发布事件的实体。事件源可以是产生触发函数运行的事件的AWS服务或开发人员创建的应用程序。

调用:调用调用以执行特定的Lambda函数。这些是函数代码开始运行的触发器。调用可以是同步的,也可以是异步的。

事件源映射:AWS服务的配置,其中事件源绑定到特定的Lambda函数。它允许在发生特定事件时自动调用Lambda函数。

Lambda执行模型:当您创建Lambda函数时,您可以指定配置信息,例如允许函数使用的内存量和最大执行时间。调用该函数时,AWS Lambda会根据您提供的配置设置启动执行上下文。

冷启动:当Lambda函数在长时间不使用后被调用时,会发生冷启动,这会导致调用延迟增加(稍后将详细介绍)。

Lambda函数由代码和相关依赖项组成,其中还包含配置信息。还提供了API,以便您可以更新一些配置数据。Lambda功能配置信息附带以下关键元素:

计算所需的资源:指定您希望为Lambda函数分配的内存量。AWS Lambda按照与通用AWS EC2实例类型(如M3类型)相同的比例,按内存比例分配CPU能力。

最大执行时间(超时):指定以防止Lambda函数不停止运行。由于您要为用于运行Lambda函数的AWS资源付费,因此这一点尤为重要。到达超时时,AWS Lambda将终止您的Lambda函数的执行。建议的设置是根据预期的执行时间计算的。

IAM角色(执行角色):AWS Lambda在执行Lambda功能时代表您执行的角色。

处理程序名称:运行代码的入口点方法,任何事件源依赖项都包含在Lambda函数中。您将能够了解更多详细信息,以及使用此工具监控和调试AWS Lambda的质量特性。

让我们创建一个简单的Lambda函数,该函数由API调用调用,也就是说,我们生成一个URL,当在浏览器中输入该URL时,它将调用该函数。我们的输入将通过此URL传递给函数,输出将返回并显示在浏览器中。

在Lambda控制台面板中,单击Create Function。为您的函数命名,在我们的示例中,它是DemoFunction。还要选择运行时Python3,因为我们将在本例中使用该特定语言。最后,为函数的角色指定一个名称,然后从策略模板中选择简单微服务权限。

单击Create Function(创建函数),您将进入下一个屏幕,您可以在其中提供实际代码。我们正在从头开始编写此API,但是您可以浏览来自Amazon存储库的大量模板。

下一页将有一个内联文本编辑器,其中包含一个简单的python函数。将其替换为以下内容:

导入jsonprint(';加载函数';)def lambda_handler(event,context):=firstName=event[';first';]导入jsonprint=event[';last&39;]返回';问候,';+firstName+';';+lastName+';!';

第一行用于使用Python中的JSON库解析JSON。Lambda_handler函数获取事件作为其参数之一;该事件带来一组数据。函数内的第一行和第二行提取标记为First和Second的所有数据,并将它们存储到各自的变量中。

最后一行返回一条消息,这就是我们将在浏览器中看到的内容。

我们可以在这里添加API Gateway触发器,但为了清楚起见,我们单独添加。现在,我们可以单击Save并进入测试阶段。

要测试您的功能,只需单击右上角显示‘TestEvent’的位置,然后单击Configure Test Event。

在这里,我们将第一次遇到JSON有效负载。在模板TestEvent中。

现在我们已经保存了测试事件。单击上一个菜单中的测试。成功执行后,您应该会看到:

如前所述,我们的用户将通过访问某个URL来调用该函数。要启用此功能,请转到您的AWS服务下的API网关控制台,然后单击入门或新建API选项。

我们的接口名为dashbird-api。在单击创建API之后。您将获得API有权访问的资源(在下一个菜单中列出):

由于没有资源,我们只能得到正斜杠。但是您可以通过使用Actions下拉列表并选择Create Resource来创建新资源。

在资源列表中,您可以选择此新资源(名为Greetings),单击Actions并选择Create Method。我们的HTTP请求方法将是一个GET请求,因为我们的目标是从调用函数中获得适当的响应。

该方法将有一个Lambda集成选项,选择该选项,然后输入您在前面步骤2中选择的函数名称。此外,从步骤2的屏幕截图中记下函数的ARN(右上角),它有字符串eu-center-1表示它所在的区域。确保也为Lambda区域选择了相同的区域,如上所示。然后,它将请求调用函数的许可;授予许可,现在我们就可以进行最后的修改了。

我们仍然需要确保正确传递输入参数。为此,我们需要修改上面的集成请求阶段。您可以单击它进行修改:

保持所有内容不变,除了在菜单的最底部,您可以在这里找到Body Mapping模板,在这里我们可以描述我们的输入模板。模板的类型为application/json:

美元符号和input.params()部分充当占位符,帮助我们定义正确请求的结构。现在我们可以保存更改,然后单击Actions并选择Deploy API选项。它将要求提供一个阶段名称;给它一个合适的名称(在我们的例子中称为prod)。一切都准备好了!我们现在可以实时运行此功能。

可以使用与其关联的唯一URL调用该函数。在API控制台中,我们首先选择了Resources,然后选择Stage子菜单。然后下拉到问候语,然后选择GET选项。

它将为您提供一个调用URL,您可以单击该URL以运行函数。但是,如果您没有提供任何输入,则在第一次尝试时可能会收到一条错误消息。您可以通过如下方式修改URL来纠正此问题:

将最后一部分添加到URL将导致函数成功执行:

当然,上面只是使用一种方法的一个示例,因此在为您自己的应用程序创建Lambda时,记住其他可用的选项很重要。

编写代码:支持的语言有Node.js、Java、C#、Python和Go。这些语言使用特定的工具来创作代码。其中一些是AWS Lambda控制台、Eclipse IDE等。

部署包:部署代码和创建Lambda函数要求您首先将代码和依赖项打包到部署包中,以便开发Lambda函数。完成后,您需要将部署包上传到AWS Lambda,这样您就可以创建Lambda函数。以特定方式组织代码和依赖项是构建部署包的第一步。根据您选择用来创作代码的语言,部署包说明可能会有所不同。

创建Lambda:您可以选择AWS Lambda控制台、AWS CLI和AWS SDK来创建Lambda函数。

在我们的AWS Lambda初学者手册系列的下一部分中,我们将解释AWS Lambda定价,分享一些您可能不知道的事实和很棒的使用案例。敬请关注!

在与4,000多名客户和30多万个Lambda函数合作后,在Dashbird学到的经验教训集合