关键字: [yt, Amazon Lambda, Amazon Lambda, Serverless Applications, Event-Driven Computing, Api Gateway, Observability Tools]
本文字数: 500, 阅读完需: 2 分钟
在一场亚马逊云科技的网络研讨会上,演讲者介绍了”无服务器入门”。演讲者阐述了如何利用Lambda、API Gateway和DynamoDB等亚马逊云科技服务构建无服务器Web应用程序。他详细解释了无服务器应用程序无需配置基础架构、可自动扩展、按使用量付费,并且高度可用且安全的优势。该演讲重点介绍了亚马逊云科技Lambda如何实现构建事件驱动的应用程序,无需管理服务器,可根据工作负载自动扩展,只为消耗的资源付费,并通过亚马逊云科技的共享责任模型提供高可用性和安全性保障。
以下是小编为您整理的本次演讲的精华,共200字,阅读时间大约是1分钟。
Amazon Lambda提供直接使用Lambda API、同步模型、异步模型和流/轮询模型的方式。同步模型是推送模型,例如当用户通过API网关请求数据时,响应会保持打开状态,直到Lambda函数执行完成并返回响应。异步模型则是调用者传递事件,Lambda立即返回而不等待执行完成,例如当Amazon SNS主题收到消息或Amazon S3对象发生变化时。流/轮询模型是从Amazon DynamoDB或Amazon Kinesis流中轮询数据,并将数据集合传递给Lambda服务,由其函数进行处理。
除了Web应用程序之外,Amazon Lambda还有许多其他常见用例,如移动后端、数据处理(实时事件或MapReduce应用程序)、聊天机器人(Amazon Alexa技能可使用Alexa Skills Kit SDK与Lambda函数交互)和IT自动化(例如,策略引擎可在发生违规或需要测试资源时调用Lambda函数)。
在定价和资源分配方面,Amazon Lambda采用了精细的计费模型。用户可以按100毫秒的增量购买计算时间,每次调用也会收取少量费用。没有每小时、每天或每月的最低费用,也不会为闲置的资源付费。值得一提的是,亚马逊云科技最近推出了”Provisioned Concurrency”功能,在某些情况下可以减少Lambda的支出,同时也可以减少冷启动时间。每个客户每月还可免费获得100万次调用和40万GB秒的计算时间。
Lambda通过内存控制来分配计算能力。分配的内存越多,相应的CPU、核心和网络能力就越大。这意味着,如果代码受CPU、网络或内存绑定的限制,为Lambda函数分配更多内存实际上可能会更加经济。用户可以根据自己的业务需求,选择执行速度最快的内存分配以提供最佳用户体验,或选择较低的内存分配以节省成本。这完全取决于优先考虑因素。
在权限模型方面,Amazon Lambda包括函数策略和执行角色两个方面。函数策略允许控制哪些资源、服务和用户可以调用Lambda函数。资源策略可用于跨账户访问,并适用于同步和异步调用。执行角色则决定了Lambda函数在运行时可以访问哪些资源。例如,可以为Lambda函数提供对DynamoDB表的读取访问权限,而不提供写入访问权限。这允许创建非常精细的安全模型,并遵循最小特权原则。
在构建无服务器Web应用程序时,将严重依赖Amazon API Gateway。API Gateway是一项完全无服务器的服务,用户只需为实际使用的部分付费,无需供应或管理任何运行时。它允许为多个微服务创建统一的API前端,这些微服务可以是一组Amazon Lambda函数、Amazon Fargate作业或其他资源。API Gateway提供DDoS保护和节流功能,可以保护后端,在遭受攻击时节省成本。它还提供工具,允许对请求进行身份验证和授权,以便在调用者未经授权时不会调用Lambda函数(从而避免产生费用)。最后,API Gateway允许对API使用进行节流、计量和货币化,以便为第三方开发者提供API。
API Gateway提供三种主要API类型:边缘优化API(利用CloudFront减少TLS连接开销,为全球分布的客户端设计)、私有API(仅在VPC和连接到VPC的网络中可访问,用于构建内部或私有微服务API)和区域API(适用于一般用例,如果构建的Web应用程序没有其他约束,通常应选择区域API)。
2020年3月,HTTP API for Amazon API Gateway正式推出。与REST API相比,HTTP API可实现高达67%的成本节省和50%的延迟减少,而且配置也更加简单,让开发者可以将更多时间集中在为用户构建应用程序上。如果不需要REST API提供的所有功能,HTTP API就是未来Web应用程序的核心选择。
静态资产(如HTML、CSS、JavaScript或单页应用程序)可以托管在Amazon Amplify控制台上。身份验证可由Amazon Cognito管理。客户端连接到Amazon Cognito进行身份验证,然后使用身份验证信息通过HTTPS向Amazon API Gateway发出动态API调用。在后端,API Gateway将该请求传递给Amazon Lambda函数,由其执行对Amazon DynamoDB表的读取、写入或更新操作。
除了Web应用程序之外,还有一些其他常见的无服务器架构值得一提:
值得注意的是,事件也可以是时间的流逝。可以使用CloudWatch Events,当计划的时间到达时,调用Lambda函数。这通常非常有用于需要每小时、每天、每周或其他重复执行的IT基础设施管理任务。
我们已经讨论了单个Lambda函数,但是业务工作流通常不是单一的、按顺序执行的。例如,应用程序可能需要多个分支决策路径、需要一起完成的多步骤流程,以及处理失败的能力。Amazon Step Functions可以帮助实现这一点,它是一种零管理的工作流管理服务,当然也是无服务器的。
Amazon Step Functions使开发者可以使用可视化工作流轻松协调分布式应用程序和微服务的组件。这让开发者可以与业务分析师达成一致,确保即将编写的代码实际上支持所需的业务流程。Step Functions记录了每个步骤的状态、输入和输出,因此当出现问题时,可以利用完整的事件数据快速诊断和调试问题。
正如所提到的,Step Functions具有多种服务集成,可以帮助更有效地完成工作。它们包括直接向Amazon SNS主题发送消息、将消息放置在SQS队列中、在Amazon SageMaker上调用人工智能或机器学习作业、在Amazon Glue中运行ETL管道、使用Amazon Batch运行长时间计算作业、在Elastic Container Service或ECS或Fargate上启动容器,或者使用Amazon EMR进行数据减少作业。
Amazon Step Functions与服务集成为与下游服务的集成提供了更简单的方式,让开发者可以编写更少的代码。如果没有服务集成,必须自己编写轮询模型,编写和维护代码来获取作业状态、检查是否完成、如果没有完成则等待并重试,并处理失败情况。但是,可以通过直接服务集成大大简化这个工作流。此工作流同步运行Amazon Batch作业。该Batch作业将有两个结果之一:成功或产生错误。每个结果都会将其结果发布到配置的SNS主题,工作流就完成了。
在构建无服务器Web应用程序时,开发者将希望利用现有的工具。有多种不同的方式来构建,工具将帮助决定从何处开始。建议是从框架开始。选择哪个框架并不重要,重要的是要选择一个。应该选择与熟悉的编程语言或现有团队知识最相符的框架。亚马逊云科技提供了Amazon Amplify、Amazon Chalice和Amazon Serverless Application Model(我们将在后面详细介绍)等框架。也可以查看第三方服务,看看是否更符合需求。
Amazon Serverless Application Model(简称SAM)是一个优化的Amazon CloudFormation扩展,旨在帮助构建无服务器应用程序。这意味着它只是CloudFormation的一个超集,任何有效的CloudFormation都是有效的SAM,但它还添加了特殊的无服务器资源类型,如函数、API、表、Lambda层和无服务器应用程序。
这是一个Amazon SAM模板的示例。在仅20行代码中,定义了一个Lambda函数、该函数的IAM角色、一个Amazon API Gateway,以及一个DynamoDB表。这个简洁的模板产生了一个完整的架构。
Amazon SAM不仅仅是CloudFormation的转换。Amazon SAM还提供了命令行界面或SAM CLI。这是一个支持无服务器应用程序的本地开发、调试、测试、部署和监控的工具。当说到本地开发时,它还支持本地API网关代理样式和Lambda服务API测试。没错,可以在本机上运行Amazon API Gateway,以确保它产生预期的响应。它使用开源的docker Lambda映像来模拟Lambda的执行环境,包括Amazon Linux 2环境、超时、内存限制和运行时。它还可以直接从CloudWatch Logs实时查看生产日志。
让我们使用另一个演示来展示如何使用 Amazon Web Services SAM CLI 轻松开始构建无服务器应用程序。安装 Amazon Web Services SAM CLI 的说明将在聊天中为您提供链接。
安装完 SAM CLI 后,只需键入 sam init。这让用户可以选择 亚马逊云科技 快速入门模板或指定自定义模板位置。我们将选择快速入门模板,运行时是 Node.js。用户可以选择最熟悉的任何运行时。我们接受默认的项目名称,SAM 为我们创建应用程序。
我们将切换到应用程序文件夹,构建应用程序,然后开始将其部署到 亚马逊云科技 账户。我们将使用 SAM 的引导部署选项,让我们继续:
SAM 的引导部署选项将引导我们完成将应用程序上传到 亚马逊云科技 账户所需的参数。我们将接受所有默认值,包括堆栈名称、区域、在部署前不确认更改、允许 SAM CLI 为我们创建 IAM 角色,并将这些参数保存到配置文件中。这意味着将来只需运行 sam deploy 即可上传。
让我们看看 SAM CLI 为我们构建了什么。在 SAM 模板中,我们看到有一个单一的 Amazon Lambda 函数,即 HelloWorld 函数。我们还看到在 events 部分,它连接到一个接受 HTTP GET 方法并调用函数的 /hello API 网关端点。在模板的后面,我们看到了输出,包括 HelloWorldApi URL,这给了我们调用函数所需的 URL,我们可以用它来测试。
如果我们查看应用程序,我们会看到有一个单一的处理程序函数,它接受传入的事件,创建一个响应对象并将其返回给 API 网关,以传递回调用者。现在应用程序已经完成部署,我们看到提供了包含所需 URL 的 HelloWorldApi 输出。我们可以复制此输出并将其粘贴到首选的 HTTP 客户端中。用户可以使用 Postman 或浏览器(如果愿意的话)。当访问此端点时,我们看到了所期望的。返回了一个带有 message: hello world 的 JSON 对象。
有关 SAM 的更多信息,鼓励用户查看 aws.amazon.com/serverless/sam。如幻灯片所示,另一个帮助用户开始使用自己的无服务器 Web 应用程序的工具是 Amazon Serverless Application Repository。在这里,用户可以发现、部署和发布无服务器应用程序,最近还宣布了组织支持。用户可以在组织内的账户之间共享创建的应用程序,但它也是一个学习工具。用户可以查看发布到无服务器应用程序存储库的应用程序的源代码,了解其他开发人员如何使用选择的框架和运行时构建他们的无服务器应用程序。
现在我们已经选择了一个框架并将函数部署到 亚马逊云科技 账户,了解该函数在账户中的行为就变得很重要了。让我们通过可观察性来做到这一点。可观察性回答了这个基本问题:我们如何衡量这一点?我们如何衡量正在执行的代码的性能影响?我们的立场是,指标、日志和跟踪是普遍的权利。
为了支持用户,亚马逊云科技 为 CloudWatch 构建了指标。CloudWatch 指标为用户提供了 7 个内置指标:调用计数、持续时间、任何错误、任何节流调用、迭代器的年龄、任何死信队列错误和并发度。用户还可以从 Lambda 函数代码中调用 put_metric_data 来获取自定义指标,这些自定义指标将出现在 CloudWatch 中。
CloudWatch还为 API 网关提供了 7 个内置指标。这些指标跟踪 API 调用计数、请求延迟、400 系列错误、500 系列错误、集成延迟、缓存命中计数和缓存未命中计数。错误和缓存指标支持平均值和百分位数,因此用户可以了解一般用户的情况,但也可以在高百分位数的情况下了解如何更好地优化调用。
指标可以衡量正在发生的事情,但日志可以让用户了解发生的事情及其上下文。CloudWatch 日志提供 API 网关日志记录,包括错误和信息日志,并可选择记录方法请求和正文内容。这对于用户在试图了解子生产环境中发生的情况很有用。用户可以在阶段中全局设置这些日志记录选项,或者覆盖它们,以便只有某些 API 方法启用了此日志记录。
Lambda 日志记录直接从代码中提供基本日志记录,使用语言的等价物,如 console.log 或 Python 中的 print、Go 中的 go print。用户还可以使用嵌入式指标格式进行结构化 JSON 日志记录,为用户提供更易于机器读取的日志。CloudWatch 日志的日志透视功能允许用户基于日志过滤器构建指标,并跳转到生成指标的日志,让用户了解调用在总体上的情况。最后,用户可以将 CloudWatch 日志导出到 Amazon ElastiCache 或 S3,以便使用 Cabana、Amazon Athena 或 Amazon QuickSight 等工具搜索和探索发生的情况。
这就是指标和日志。但对于跟踪,亚马逊云科技 还提供了 Amazon X-Ray。Amazon 云科技 X-Ray 是一种跟踪服务,用于分析和排查无服务器应用程序的故障。它可以通过两种方式调用:
API 网关在 HTTP 调用中插入跟踪头,并将数据报告回 X-Ray 本身。这允许用户汇总 HTTP 调用和完成或支持这些调用的 Lambda 函数,以便用户可以对用户请求进行端到端跟踪。
在这张幻灯片中,我们看到了一个 X-Ray 跟踪的示例。这是 S3 示例 Amazon Lambda 函数,我们看到它的第一次尝试花费了 1.8 秒才完成。我们进一步看到该尝试分解为初始化和 S3 API 调用,结果是 404,我们看到 put_object 调用的状态被高亮显示,没有成功。我们可以从这里开始调查。
亚马逊云科技 X-Ray 不仅提供每个函数的追踪,还提供了一段时间内追踪的分析。在这张幻灯片中,我们可以看到收到了一组超过10,000条追踪,但我们能够根据指定的一些条件将它们过滤为两组。例如,这可以用于蓝绿测试或A/B测试,让我们观察对整个应用程序的不同更改如何导致不同的调用错误或执行时间。
在进入问答环节之前,我们回顾一下今天学到的内容。首先,我们讨论了什么是无服务器,当我们说一个应用程序是无服务器时,指的是什么?我们阐述了一些关键无服务器概念,以构建第一个无服务器Web应用程序。我们介绍了使用Amazon Lambda的执行模型,以及在特定用例下将选择哪一种。我们涵盖了定价和资源分配,让您可以根据业务需求调整Lambda函数。我们讨论了Amazon Lambda函数的权限,了解可以调用函数的内容以及函数在执行期间可以访问的内容。我们介绍了Amazon API Gateway,这是您无服务器Web应用程序的前端,允许您处理来自客户端的传入请求。我们介绍了一些工具,以及您在构建无服务器Web应用程序时应该使用框架的原因。最后,我们讨论了指标、日志和跟踪的可观察性。
如果您想了解更多关于亚马逊云科技无服务器的信息,我们鼓励您访问aws.amazon.com/serverless。您将希望将此页面加入书签并经常返回,因为在构建过程中,您可以在这里获得对出现的问题的答复,并更好地了解不同的无服务器服务是如何集成的。如果您还没有选择框架,我们建议您查看Serverless Application Model(SAM)。此幻灯片上的URL将带您进入SAM主页,在那里您可以了解如何创建应用程序、如何部署应用程序以及我们提供的新功能。
我们感谢您今天与我们同在。很高兴能与您在一起。现在,我们想开放提问环节。
这场网络研讨会深入探讨了无服务器计算的世界,重点是利用亚马逊云科技 Lambda 和相关服务构建 Web 应用程序。首先,它将无服务器定义为一种范式,其中基础设施供应、扩展和管理都是自动处理的,允许开发人员专注于应用程序逻辑。无服务器的主要优势包括敏捷性、减少运营开销、更快的上市时间和成本优化。
亚马逊云科技 Lambda 作为核心的无服务器计算服务被介绍为一个事件驱动的函数即服务平台。该研讨会探讨了 Lambda 的执行模型、定价考虑因素、权限以及与 Amazon API Gateway 的集成,用于构建 Web 应用程序。它还涵盖了诸如亚马逊云科技 Serverless Application Model (SAM) 之类的工具,以及通过指标、日志记录和与亚马逊云科技 X-Ray 等服务的跟踪实现可观察性。
该研讨会强调了无服务器架构的好处,例如自动扩展、按使用付费计费、高可用性和安全性。它提供了实际演示和指导,介绍如何利用亚马逊云科技服务开始无服务器 Web 应用程序开发,使开发人员能够更高效、更经济地构建和部署应用程序。
总之,该研讨会为与会者提供了对无服务器概念、亚马逊云科技 Lambda 和相关服务的全面理解,使他们能够利用无服务器计算的力量构建现代、可扩展和经济高效的 Web 应用程序。
亚马逊云科技(Amazon Web Services)是全球云计算的开创者和引领者。提供200多类广泛而深入的云服务,服务全球245个国家和地区的数百万客户。亚马逊云科技致力于成为企业构建和应用生成式AI的首选,通过生成式AI技术栈,提供用于模型训练和推理的基础设施服务、构建生成式AI应用的大模型等工具、以及开箱即用的生成式AI应用。深耕本地、链接全球 – 在中国,亚马逊云科技通过安全、稳定、可信赖的云服务,助力中国企业加速数字化转型和创新,并深度参与全球化市场。