通过 AWS Lambda 使用您的第一个微服务
本指南适用于哪些人?
当我们谈论学习 AWS 时,我们经常谈论如何使用它来开启系统管理或运营方面的新职业。当然,该平台不仅仅用于“后端”或“系统”工作。像 AWS Lambda 这样的服务需要集成到前端,而且由于 AWS 的使用非常广泛,因此 Web 开发人员熟悉其工作原理非常重要。本指南适用于想要了解更多有关微服务架构但尚未准备好从头开始学习整个 AWS 平台的 Web 开发人员。先决条件
微服务这个词听起来很复杂,但您无需成为专家即可开始使用它们。不过,您需要做一些事情才能开始使用:- AWS 账户- 您可以在此处免费创建一个。
- 使用的微服务- 我们之前发布了有关使用 AWS Lambda 创建无服务器联系表单的指南。这就是我们将集成到我们的页面中的内容(我们建议您在阅读本指南之前先阅读该指南),但我们讨论的原则和概念也将适用于基于 AWS Lambda 和 API Gateway 的其他微服务。
- 一些 JavaScript 知识 - 我们将使用 JavaScript 从浏览器与我们的微服务进行交互,因此您应该熟悉 DOM 交互和 AJAX 请求等中级概念,以便充分利用本指南。
我们会做什么?
在本指南中,我们将把现有的联系表单微服务集成到网页中。在开始之前,请务必遵循我们的无服务器联系表单创建指南。该指南处理 AWS 上的“后端”设置,本指南将解释如何将其集成到现有站点中。完成后,您将拥有一个联系表单,该表单调用 AWS Lambda 函数,允许您的用户通过您网站上的表单向您发送电子邮件。什么是微服务?
这个问题可能需要一个指南来回答,但在开始之前,了解这一点很重要。微服务架构意味着您的基础架构(托管应用程序的服务器)由小型、大多独立的部分组成,每个部分负责特定的任务。编写应用程序时,您使用函数来执行某些任务并在代码库中分离职责。打个粗略的比方,微服务之于基础架构,就像函数之于您的代码一样。假设您的应用程序崩溃了。如果您的代码库足够大,则可能需要大量工作来隔离和修复问题 - 并且您可能无法让您的应用程序重新上线,直到您完成。使用微服务架构 - 使用单独的基础架构来处理不同的任务 - 您通常可以在修复一个特定问题时让应用程序的其余部分保持运行。问题被隔离,对其余代码几乎没有影响。您可能听说过无服务器或函数即服务之类的术语。Lambda 是亚马逊对这些概念的实现,微服务架构是它可以用来改进您的网站或应用程序的一种方式。集成您的第一个微服务
如果您尚未在 AWS 中创建基础设施,请务必先创建。您可以在此处找到有关设置无服务器联系表单的指南。如果您正在创建第一个 AWS 帐户(或使用过去 12 个月内创建的帐户),我们使用的所有服务都将包含在免费套餐中,因此您无需支付任何费用即可继续试用。AWS 基础设施充当您的“后端”,但您还需要一个表单来允许用户输入信息。这是一个简单的网页,我们将用它来说明如何使其工作:如果您想继续操作,请将上面的代码粘贴到文本编辑器中并在浏览器中打开它。您将看到类似以下内容:现在让我们逐步分解脚本的每个部分。这并不是最有效的实现,但我编写了代码来明确显示所有组成部分。有些框架可以做同样的事情,但这里的目标是通过一系列易于遵循的步骤来说明发生了什么。我们不会介绍页面的 HTML 结构,因为那部分将由您在设计应用程序时决定。首先,我们需要启用表单,使其在提交时执行某些操作:这可能看起来很熟悉 - 我们只是在表单上添加了一个事件侦听器。提交后,将调用sendDataToLambda函数。在代码的后面,我们定义了该函数。您可以忽略函数开头的e.preventDefault()行 - 它可以防止页面在提交时重新加载,从而使测试更容易 - 然后继续到我们创建的前三个变量:这部分也应该看起来很熟悉。提交表单后,我们需要做的第一件事就是获取每个输入字段的值。由于我们创建 Lambda 函数的方式,它需要三个值:用户的电子邮件地址、电子邮件的主题和邮件正文。到目前为止,我们一直在处理您可能以前见过的概念,但接下来,我们将开始了解 Lambda 如何发挥作用。此行定义了我们的端点。如果您做过很多 Web 开发,那么您可能之前使用过 API(例如 Google Maps 或 Yelp)。我们的无服务器联系表单的工作方式非常相似。当我们创建 Lambda 函数时,我们将 API Gateway 服务设置为其 触发器。您可以将 API Gateway 视为托管 API 服务。它侦听 HTTP(S) 请求,并在收到请求时执行某些操作。在本例中,它调用我们的 Lambda 函数来发送电子邮件。要查找您的终端节点,请在 AWS Web 控制台中导航到API Gateway。在左侧菜单中,选择我们创建的“联系人”API, 并点击阶段。选择“prod”阶段,然后复制 页面顶部蓝色框中显示的调用 URL 。这是您的 URL 的基础 - 您还需要添加资源。如果您按照我们的初始指南进行操作,我们将其命名为“/ ContactFormLambda ”,但如果您将其命名为其他名称,则可以在 “ contact ”API 下的资源部分中找到它。总而言之,您的端点由调用 URL 和资源名称组成。如果您尝试从浏览器运行您的函数并收到“缺少身份验证令牌”错误,那么这是一个首先检查的好地方。接下来,我们将构造一个对象:这个对象就是我们将用作对 API 网关的 HTTP 请求的主体。我们正在使用我们的 Lambda 函数期望接收的三个必填字段,以及我们之前从用户输入字段中获得的值。下一步是实例化(创建)我们的请求。这可能看起来不熟悉,所以让我们分析一下为什么我们这样做:这是一个Request对象,它特定于Fetch浏览器 API。如果您熟悉 AJAX,您可能使用过 jQuery 的.ajax()方法或浏览器的本机XMLHttpRequest (XHR) 对象来发出服务器请求。Fetch 可以完成大部分相同的任务,但它更现代一些,而且在我看来,更容易使用。我们正在创建一个新的Request实例,它需要两个参数。首先,发出请求的端点(我们的 API 网关路由);其次,包含有关请求的一些信息的对象。由于我们要将数据发送 到端点,因此我们使用“POST”方法。我们还需要将请求的主体转换为字符串,以便 Lambda 能够理解它(我们的 Lambda 函数需要一个字符串,但在调用时会将其解析为 JSON - 有关如何发生这种情况的详细信息,请参阅 Lambda 代码)。我们使用的另一个设置“no-cors”模式用于本地开发。它允许我们测试代码,同时避免使用 Fetch API 的一些默认安全功能。我们将在下一节中详细讨论这意味着什么。最后,我们将所有内容放在一起进行 Fetch 调用:这是我们发出请求的地方,由我们上面创建的Request对象描述。第二行和第三行是我们处理错误的地方 - 使用此语法是因为 Fetch 使用 JavaScript Promise 解析。对于您的应用程序,您可能希望在此处编写一些自定义代码,但我们只是为了示例而记录结果。就是这样!有了这些代码,您可以在表单中输入一些测试数据并提交。完成这些操作后,检查您通过 AWS 验证的电子邮件帐户,您应该会看到一条包含您提供的信息的新消息:最后几点说明 - 您 需要在电子邮件字段中输入有效的电子邮件地址。SES 会验证此部分,如果未检测到有效格式,您将收到错误消息。您还会注意到,提交表单后,应该记录到控制台的响应数据不完整。例如,您将看到“ status ”属性为 0,而不是实际的 HTTP 状态代码(200 或 5xx)。这是由于我们在请求中设置的“no-cors”模式,我们将在下文中讨论。部署到生产环境
如果您只想查看工作原理,此设置非常适合测试。但是,如果您准备在自己的网站上开始使用无服务器联系表单,则需要执行更多步骤。首先,从 Request 对象中删除 模式:“no-cors” 。通常,您无法从本地计算机发出跨源请求,因为其源设置为“null”。将此选项添加到请求中允许我们在本地进行测试,但无需从您自己的网站进行调用。事实上,将其留在生产环境中可能会阻止您准确处理 Fetch 响应中的错误 - 这会导致您获得不透明(空)响应,并且您将无法访问 HTTP 状态代码或错误消息等内容。最后,将 API Gateway 中的“Access-Control-Allow-Origin”标头更改为您的域名。要找到此设置,请 在 API 网关控制台中 打开“/ContactFormLambda”资源,单击页面顶部的 “操作”菜单,然后选择“启用 CORS”。 此页面上的最后一个字段将允许您将此标头设置为您将使用联系表单的站点的域名:那么这为什么重要?
我们之前谈到了微服务架构的好处 - 它将你的服务分开,这样如果一个服务失败,你的整个应用程序就不会崩溃。例如,除了你的联系表单之外,你还可以创建另一个从数据库读取的微服务。如果其中一个服务崩溃,另一个可以继续运行,而无需你登录服务器并重新启动应用程序。另一个好处是开发速度。“正常”架构需要更多测试,以确保新代码不会干扰现有应用程序。例如,使用微服务,联系人电子邮件和数据库读取是完全独立的。你可以对一项服务进行更改,测试该服务并立即部署它。可以在任何时候添加新服务,而不必担心它们是否会导致重大更改。微服务(例如我们创建的联系表单)也很容易集成到AWS 静态网站中。在过去的几年里,静态网站生成器变得非常流行,原因很充分 - 它们速度快、易于维护,并且相对容易创建一个外观漂亮的网站,而无需太多代码。微服务允许您运行后端,而无需进行所有维护,这可能会让人们对非托管主机望而却步。它们还在创建网站时提供了一个很好的折中方案 - 也许您不需要完整的 PHP 或 Rails 应用程序,但静态网站还不够。使用 AWS Lambda 的微服务允许您通过创建类似上述脚本并将其嵌入到静态页面中来处理传统的“服务器端”操作。下一步是什么?
Web 开发和 AWS 等复杂平台之间的联系并不总是一目了然。AWS 通常被认为是一种面向管理员的服务,但只要具备一点知识,在自己的项目中开始使用它并不难。我想澄清一点——我们在这里创建的并不是一个完整的微服务架构。这只是一个示例,说明如何构建一个 微服务架构,并且只显示了一个组件。但使用 AWS Lambda,创建更多服务(如我们的联系表单提交)比以往任何时候都更容易。由于 Lambda 以服务的形式提供函数,因此您可以将更多精力放在代码上,而不是运行它的基础设施上。您可以按照我们的指南创建无服务器联系表单并对其进行修改以执行其他任务——使用 AWS 简单通知服务 (SNS) 发送短信可能是下一步的好选择。AWS 提供数十种服务,因此如果您环顾四周,您一定会找到一些有趣的东西来玩。最好的学习方法是边做边学。您可以阅读世界上所有的文档,但除非您亲自动手,否则很难真正发展您的技能。如果本指南让您对 AWS 的强大功能感到兴奋,那么您可以免费或几乎不花钱地尝试很多项目。我们在此处创建的微服务包含在 AWS 免费套餐中 - 该套餐适用于新 AWS 账户,有效期为自创建之日起 12 个月。AWS 还发布了一个静态网络托管指南 ,涵盖每月 0.50 美元(是的,就是 几美分)的设置费用。重要的是进入那里并使用这些服务 - 知识和技能将随着经验而来。当然,如果您想要更正式的培训计划,这就是我们在这里的目的。我们的使命是帮助各种技能水平的人通过真实场景和实践培训学习云计算。如果您有任何问题,请在评论中告诉我们,或者更好的是,注册一个免费的社区帐户,了解您的云学习之旅将带您去哪里。进一步阅读
虽然本指南的范围仅限于微服务实现,但我们使用了一些可能需要额外研究的 Web 技术和概念。以下是一些比我们在此处提供的更深入的了解链接:That's So Fetch (感谢 Jake Archibald)了解 CORS AWS Lambda Deep Dive免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~