AWS Serverless架构:使用AWS从传统部署方式向Serverless架构迁移(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-24 18:26:37

点击下载

作者:(印)Mohit Gupta(莫希特·古普塔)

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

AWS Serverless架构:使用AWS从传统部署方式向Serverless架构迁移

AWS Serverless架构:使用AWS从传统部署方式向Serverless架构迁移试读:

内容简介

Serverless无服务器应用可以说是当今的行业热点,用户无须提前部署配置服务器,只需要进行功能开发和代码编写,就可以在AWS Lambda服务的支持下进行应用程序的快速部署,并且资源可以根据使用情况自动地进行弹性伸缩。Serverless不仅仅是AWS Lambda,还有像Amazon Athena、AWS Glue、Amazon Kinesis等Serverless框架的服务。Serverless的使用场景非常广泛,从微服务架构到数据批处理、流处理、运维自动化和移动计算,都可以看到Serverless的身影。

本书对Serverless这个领域进行了充分介绍,逐步指导读者在AWS云平台上部署第一个Serverless项目,并探索更多的Serverless服务,可以帮助读者快速掌握该项技术。

Copyright © Packt Publishing 2018. First published in the English language under the title ‘Serverless Architectures with AWS-(9781789805024)’.

本书简体中文版专有翻译出版权由Packt Publishing授予电子工业出版社。

版权贸易合同登记号 图字:01-2019-4934

图书在版编目(CIP)数据

AWS Serverless架构:使用AWS从传统部署方式向Serverless架构迁移/(印)莫希特·古普塔(Mohit Gupta)著;史天,张媛译.—北京:电子工业出版社,2019.12(云计算技术实践系列丛书)

书名原文:Serverless Architectures with AWS: Discover how you can migrate from traditional deployments to serverless architectures with AWS

ISBN 978-7-121-38116-4

Ⅰ.①A… Ⅱ.①莫…②史…③张… Ⅲ.①云计算—研究 Ⅳ.①TP393.027

中国版本图书馆CIP数据核字(2019)第258746号

责任编辑:刘志红(lzhmails@phei.com.cn)  特约编辑:李 姣

印  刷:

装  订:

出版发行:电子工业出版社

     北京市海淀区万寿路173信箱 邮编 100036

开  本:787×980 1/16 印张:12.25 字数:254.8千字

版  次:2019年12月第1版

印  次:2019年12月第1次印刷

定  价:98.00元

凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。

质量投诉请发邮件至zlts@phei.com.cn,盗版侵权举报请发邮件至dbqq@phei.com.cn。

本书咨询联系方式:(010)88254479,lzhmails@phei.com.cn。译者序一

当Amazon Web Services(AWS)在2014年发布AWS Lambda服务的时候,相信很多人都被这种全新的云原生架构震撼到了,发现原来云计算还可以通过这样的方式打开。

在传统的应用程序开发和部署过程中,大家都必须要考虑服务器方面的规划,比如选择什么类型的服务器作为应用服务器或者数据库,需要多少台实例来构建整个集群,为实例配置什么规格的磁盘等。这样,除了业务上的开发和维护之外,研发和运维团队还需要投入大量精力对基础设施进行计划和测试,才能保证最后应用程序得以很“适合”地部署,并服务客户。

所以,Serverless概念一经提出后,所有人眼前一亮。Serverless或者说无服务器架构,并不是说应用和服务不再需要服务器了,而是通过这种方式将用户从繁杂的服务器维护管理工作中解脱出来,在不考虑服务器的情况下快速构建并运行应用程序和服务。团队可以更加专注于他们自己的核心产品开发,而无须担心在云中服务器的管理和运行。这样既减少了开销,又能够将更多时间和精力放在开发可扩展且可靠的出色产品上,提升灵活性和创新能力,并加速产品上市,可谓一举多得。

目前,Serverless服务已经成为了云计算厂商的标配,通过这几年的探索与实践,人们逐渐找到了非常丰富的Serverless应用场景,既可以用来作为Web应用程序、移动应用、IoT的后端,也可以作为数据的提取、转换、加载(ETL),或者流数据的实时分析等,大家将会在越来越多的场景中看到Serverless的身影。

本书的重点放在基于AWS的无服务器解决方案上,不仅介绍了AWS Lambda和Amazon API Gateway这样经典的Serverless服务,更是深入研究了广泛意义的Serverless模型,并介绍了AWS无服务器生态系统,涵盖了Amazon Simple Storage Service(S3)、Amazon DynamoDB、Amazon Simple Queue Service(SQS)、Amazon Athena、AWS Glue和 Amazon Kinesis等。同时,在每个章节都有对应的示例和练习,读者可以在上手实验的过程中,加深对内容的记忆和理解。

一如既往,感谢编辑们和肖总的悉心指导和帮助,他们不辞辛苦地对本书进行了大量的校对和编辑工作,最终确保了本书的顺利出版。感谢爱人再次牺牲掉很多休息时间,又一次共同投入翻译工作中。最后,感谢家人的鼓励和支持,他们经常关心本书出版的进度。

由于本人水平有限,书中难免会出现错误或者不妥之处,欢迎批评指正,谢谢。史 天2019年9月译者序二

为什么要翻译这本书?这要从我现在的工作内容说起。

目前我在一家云管理服务初创公司做技术咨询和交付,帮助不同的客户去做业务和数据上云的架构设计与实施,以及对现有的应用进行云化改造。很多情况下,客户之所以要上云或者进行云原生应用开发,就是因为要节省成本,控制预算,缩短应用上线的周期,并且快速迭代,尤其是创业公司,更需要好钢用在刀刃上。在这样的一个需求背景下,研究Serverless无服务器架构是非常有必要的。无服务器计算是云原生架构,无须预置或维护任何服务器,也无须安装、维护或管理任何软件或运行。

在AWS的无服务器平台上,可以使用一系列完全托管的服务构建和运行无服务器应用程序,并轻松地进行应用程序的集成和扩展。通过AWS Lambda可定义、协调和运行生产级容器化应用程序和微服务,为实际业务逻辑提供支持。本书内容非常落地,从无服务器框架开始说起,通过一些常见的业务场景,比如Web图像处理、数据分析、实时数据洞察等,抽象出具体的无服务器架构实现方式,包括服务逻辑、数据流向和实施步骤,帮助读者理解并实践无服务器应用程序的构建。

虽然本书主要着眼于AWS云计算平台,但其核心还是通过具体的业务场景帮助大家理解什么是无服务器架构,以及如何充分利用无服务器架构的优势来构建自己的应用程序。

因时间和能力所限,书中难免有不当之处,请各位读者给出宝贵的建议,我们将不断努力完善,谢谢。张 媛2019年9月前 言

下面简要介绍本书作者和审校人员、本书目标、适合的读者,以及完成所有练习和思考题需要的硬件和软件参考配置要求。

关于本书

本书将首先介绍无服务器(Serverless)架构模型,并帮助我们学会使用AWS及AWS Lambda。无论是否使用AWS Lambda服务,我们还将学习AWS无服务器平台的其他功能,并了解AWS如何支持企业级无服务器应用程序。

本书将指导我们部署第一个无服务器项目,并探索Amazon Athena的概念和功能。它是一种交互式查询服务,能够使用标准SQL轻松地分析Amazon Simple Storage Service(Amazon S3)中的数据。我们还将了解AWS Glue,这是一种完全托管的ETL(提取、转换和加载)服务,使数据目录管理变得简单,并且经济、高效。接下来,我们将了解如何利用Amazon Kinesis的Kinesis Data Streams、Kinesis Data Firehose和Kinesis Data Analytics服务释放实时数据分析和洞察的潜力。最后,结合Amazon Kinesis与AWS Lambda,创建轻量级无服务器数据分析架构。

通过对本书的学习,我们将能够创建并运行无服务器应用程序,充分利用AWS服务提供的高可用性、安全性、高性能及可扩展性。

关于作者和审校人员

Mohit Gupta是一名解决方案架构师,专注于云技术和大数据分析领域。他拥有超过12年的IT经验,并且自2012年以来一直致力于AWS和Azure的研究。他帮助客户在不同的云计算平台(包括AWS和Azure)上设计、构建、迁移和管理他们的工作负载和应用程序。他于2005年从Kurukshetra大学获得计算机科学学士学位。此外,他还拥有许多行业领先的IT认证。你可以在LinkedIn上联系到他(mogupta84),或者可以关注他的推特@mogupta。

Amandeep Singh是Pitney Bowes India Pvt Ltd.的杰出工程师。他在Pitney Bowes和戴尔研发中心等公司工作,拥有超过13年的丰富开发经验。他目前致力于设计企业级规模的基于云的分布式解决方案。他是AWS认证的解决方案架构师,帮助Pitney Bowes以更简单、智能的微服务形式将曾经的单体架构平台迁移到AWS上。他始终坚信DevOps原则和微服务模式。你可以在LinkedIn上联系到他(bhatiaamandeep)。

本书目标

● 探索AWS服务以支持无服务器环境。

● 设置AWS服务以使应用程序可扩展且高可用。

● 部署具有无服务器架构的静态网站。

● 构建你的第一个无服务器Web应用程序。

● 研究已部署的无服务器Web应用程序中的更改。

● 应用最佳实践以确保整体架构的安全性、可用性和可靠性。

本书适合的读者

你如果想学习开发无服务器应用程序,并拥有一些编程经验,那么本书的内容将非常适合你。阅读本书之前,不必具有丰富的AWS使用经验,但具备Java或Node.js的基本知识将是一个优势。

实验和练习

本书会采用动手实践的方法来教读者学习如何设计和部署无服务器架构,包含多个使用真实业务场景的实验,以便我们可以在相关环境中练习和应用新技能。

硬件要求

为获得最佳的学习体验,推荐使用以下硬件配置。

● 处理器:Intel Core i5或同类产品。

● 内存:4 GB RAM。

● 存储:35 GB可用空间。

软件要求

需要预先安装或配置以下软件。

● 操作系统:Windows 7或更高版本。

● AWS免费套餐账户。

● 端口22和80的网络访问。

约定

文本中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和推特如下约定所示。“你还可以从s3_with_lambda.js文件中复制此代码。”

代码块的设置如下:

新术语和重要内容会以粗体显示。在截图中看到的内容(例如,在菜单或对话框中),会以如下文本形式显示:“单击Next,并按照说明创建存储桶。”

其他资源

本书的代码包托管在GitHub上,请参考https://github.com/TrainingByPackt/Serverless-Architectures-with-AWS。

你还可以通过https://github.com/PacktPublishing/从很多书籍和视频目录中获取其他代码包,快去看一下吧!1 AWS、AWS Lambda和无服务器应用程序

学习目标

在本章结束时,将能够:

● 理解什么是无服务器(Serverless)模型;

● 描述AWS生态系统中不同的无服务器服务;

● 创建并执行AWS Lambda函数。

本章将介绍基于AWS的无服务器体系结构的基础知识。1.1 无服务器概述

想像一下,你所在公司的关键应用程序存在着性能方面的问题。该应用程序需要供客户7×24小时访问使用,在工作时间内,CPU和内存使用率已经达到了100%。这直接导致客户访问的响应时间增加。

大约10年前,解决这类问题的方案是为应用程序及数据库采购和部署新的硬件资源,再安装所有必需的软件和应用程序代码,然后进行所有功能和性能的质量分析工作,最后迁移应用程序。这类方案的成本可能达到数百万、数千万元的资金开销。然而,如今针对这个问题,客户可以借助新技术通过不同的方法来解决——无服务器就是其中之一。

在本章中,我们将首先解释无服务器模型,并开始使用AWS和AWS Lambda服务,以及在AWS平台上构建无服务器应用程序所需的各种模块。最后,学习如何创建和运行Lambda函数。1.2 无服务器模型

要理解无服务器模型,首先要理解如何构建传统应用程序,如移动应用程序和Web应用程序。图1-1显示了一个传统的本地数据中心应用程序架构,你需要处理应用程序开发和部署过程的每个层级,包括硬件设置、软件安装、数据库、网络、中间件和存储设置。此外,需要一个工程师团队来配置和运维这套架构,而这项工作非常耗时,并成本高昂。此外,这些服务器的生命周期一般只有5~6年,这意味着最终每隔几年就需要升级一次基础设施。图1-1 传统的本地数据中心应用程序架构

这还远没有结束,因为还必须执行常规的服务器维护,包括设置服务器重启周期和执行常规补丁更新。即使做了所有这些基础工作,并确保系统正常运行,在实际过程中,系统仍然会发生故障,并导致应用程序宕机。

无服务器模型完全改变了这种模式,因为它抽象了所有关于数据中心配置和管理、服务器和软件的复杂性。接下来,让我们进一步地了解它。

无服务器模型是指对最终用户(如开发人员)完全隐藏服务器管理和维护工作的应用程序。在无服务器模型中,开发人员可以专注于业务代码和应用程序本身,他们不需要关心将执行或运行应用程序的服务器,或者关于这些服务器的性能,或者它们的任何限制。无服务器模型是高度可扩展的,并且非常灵活。使用无服务器模型,你可以专注于对你来说更重要的事情,这很可能是去解决业务问题。无服务器模型使用户可以专注于应用程序架构,而无须考虑服务器。“无服务器”一词可能会令人困惑。无服务器并不意味着根本不需要任何服务器,而是不需要考虑配置服务器、管理软件和安装补丁等工作。“无服务器模型”意味着采用不需要自己管理的服务器。如果无服务器架构实施得当,可以在降低成本和提供卓越运营方面提供巨大优势,从而提高整体生产力。但是,在应对无服务器框架所带来的挑战时,你也必须小心,需要确保应用程序不出现性能、资源瓶颈或安全性方面的问题。

图1-2显示了组成无服务器模型的不同服务。在这里,我们使用不同的服务来做不同的工作。首先采用Amazon API Gateway,这是[1]一个完全托管的REST API接口管理服务,它可以帮助开发者创建、发布、维护、监控和保护API。然后,我们选用AWS Lambda作为后端计算服务,该服务执行应用程序代码,并完成所有计算工作。计算完成后,数据将存储在Amazon DynamoDB数据库中,该数据库也是一个完全托管的服务,可提供快速、可扩展的数据库管理系统。最后,我们还使用了Amazon S3存储服务,你可以在其中存储所有原始格式的数据,并可用于数据分析。图1-2 无服务器模型

无服务器模型近来已经变得非常流行,许多大型组织已经将其完整的基础设施转移到无服务器架构,并成功运行它们,而且能以更低的成本获得更好的性能。目前有许多优秀的无服务器框架设计,使得构建、测试和部署无服务器应用程序变得更加简单。但是,我们在本书的重点将放在基于Amazon Web Services(AWS)的无服务器解决方案上。Amazon Web Services是亚马逊(Amazon.com)的子公司,提供按需的云服务平台。1.2.1 无服务器模型的优势

使用无服务器模型有诸多好处。

● 无须管理服务器

配置和管理服务器是一项复杂的任务。在开始使用服务器之前,可能需要几天甚至几个月的时间来配置和测试这些新服务器。如果在一个特定的时间周期内没能正常完成,它可能成为将软件发布到市场的潜在性障碍。无服务器模型可以屏蔽开发团队的所有系统工程工作,为项目提供极大的便利。

● 高可用性和容错性

无服务器应用程序具有内置支持高可用性(HA)的架构,因此,你无须担心这些功能的实现。例如,AWS使用区域(Region)和可用区(Availability Zones,AZ)的概念来维护所有AWS服务的高可用性。可用区在区域内是处于相互隔离的位置,你可以通过以下方式开发应用程序:如果其中一个可用区出现故障,应用程序将继续在另一个可用区内运行。

● 灵活扩展

我们都希望开发的应用程序能够获得成功,这需要确保在应用程序必须进行扩展之前准备就绪。显然,我们不希望在最开始就使用规格非常高的服务器(因为这会迅速增加成本),而是希望在我们想要或者需要时才这样做。使用无服务器模型可以非常轻松地扩展应用程序。无服务器模型在你定义的限制下运行,因此,将来你可以轻松突破这些限制,只需在控制台界面上单击几下,就可以调整应用程序的计算能力、内存或IO需求,并且这可以在几分钟内完成。同时,这也有助于控制成本。

● 提高开发生产力

在无服务器模型中,无服务器服务供应商可以轻松设置硬件、网络,以及安装和管理软件。开发人员只需要专注于实现业务逻辑,而不必担心底层的系统工程工作,从而提高开发人员的工作效率。

● 无空闲容量

使用无服务器模型,无须提前配置计算和存储容量。我们可以根据应用程序的需要进行扩展和收缩。例如,运行一个电子商务网站,那么在节日期间可能需要比其他时候更高的容量。因此,你只需要在特定的某段时间内扩展资源。

此外,如今的无服务器模型(如AWS)可以使用按实际使用量付费(pay-as-yougo)模式,这意味着你不需要为任何没有使用的容量支付费用。这样,当服务器空闲时,不需要支付任何费用,对于成本控制非常有帮助。

● 更快的上市时间

使用无服务器模型,可以在几分钟内开始构建应用程序,因为基础设施可以随时供你使用,你只需要单击几下即可扩展或收缩底层硬件。这会节省很多系统工程工作的时间,并且可以更快地启动应用程序。这也是很多公司采用无服务器模型的关键因素之一。

● 分钟级部署

如今的无服务器模型通过完成所有繁重琐碎的工作并消除任何底层基础设施的管理需求来简化应用程序部署,这些服务都遵循DevOps最佳实践原则。1.3 AWS简介

AWS是一个由亚马逊(Amazon)提供的高可用、高可靠、可扩展的云服务平台,可提供广泛的基础设施服务。这些服务按需提供给客户,并在几秒钟或几分钟内可用。AWS是最早提供按实际使用量付费(pay-as-you-go)定价模式的平台之一,不需要预付费,而是根据客户对不同AWS服务的使用情况进行支付。AWS定价模型根据客户需要提供计算、存储和网络资源。

AWS平台概念于2002年首次提出,Amazon Simple Queue Service(Amazon SQS)是第一个AWS服务,于2004年发布。经过多年的发展,AWS的概念被重新定义,AWS平台于2006年正式重新启动,结合了三款最初发布的服务产品:云存储Amazon Simple Storage Service(Amazon S3),SQS和EC2(Amazon Elastic Compute Cloud)。多年来,AWS已成为几乎所有用户都在使用的平台。从数据库到部署工具,从目录到内容交付,从网络到计算服务,目前AWS提供了100多种不同的服务,并且AWS正在快速开发更多高级功能,如机器学习、数据加密和大数据等。AWS平台的产品和服务已经成为顶级企业客户的热门选择之一。截至撰写本书时,全球范围内估计有超过100万的客户信任并使用AWS以满足他们的IT基础设施需求。1.3.1 AWS无服务器生态系统

我们先快速浏览下AWS无服务器生态系统,并进行简要介绍,在以后的章节中,我们还会详细讨论这些服务。

图1-3显示了AWS无服务器生态系统,它由8种不同的AWS服务

[2]组成。

● AWS Lambda

AWS Lambda是一种计算服务,可以响应不同的事件(如应用程序内的活动、网站,单击或连接设备的输出)运行代码,并自动管理代码所需的计算资源。AWS Lambda是无服务器环境的核心组件,并与不同的AWS服务集成以完成所需的工作。

● Amazon Simple Storage Service(Amazon S3)

Amazon S3是一种存储服务,我们可以随时从网络上的任何位置存储和检索任何数据量的数据。Amazon S3是一种高可用性和容错存储服务。

● Amazon Simple Queue Service(Amazon SQS)

Amazon SQS是一种分布式消息队列服务,支持互联网的计算机之间的消息通信。Amazon SQS使应用程序能够将消息提交到队列,然后另一个应用程序可以在以后接收该消息以进行处理。

● Amazon Simple Notification Service(Amazon SNS)

Amazon SNS是消息通知服务,用于协调向订阅者的消息传递。它采用发布/订阅(pub/sub)的异步通信形式。

● Amazon DynamoDB

Amazon DynamoDB是一个托管的NoSQL数据库服务。

● Amazon Kinesis

Amazon Kinesis是一个完全托管的、用于实时数据处理的可扩展服务。

● AWS Step Functions

AWS Step Functions可以轻松协调分布式应用程序的组件。假设希望在应用程序的一个组件成功执行后开始运行另一个组件,或者希望并行运行两个组件,就可以使用AWS Step Functions轻松协调这些工作流。这样可以节省自己构建此类工作流所需的时间和精力,帮助我们更专注于业务逻辑。

● Amazon Athena

Amazon Athena是无服务器的交互式查询服务,我们可以使用标准SQL轻松地分析Amazon S3中的数据。它允许快速查询存储在S3中的结构化、非结构化和半结构化数据。使用Amazon Athena,无须在本地加载任何数据集或编写复杂的ETL(提取、转换和加载)任务,因为它提供了直接从S3读取数据的功能。我们将在第4章《Amazon Athena和AWS Glue无服务器数据分析与管理》中介绍有关AWS Athena的更多信息。图1-3 AWS无服务器生态系统1.4 AWS Lambda

AWS Lambda是一个无服务器计算平台,我们可以使用它来执行代码以按需构建应用程序。它是一种可以运行后端代码的计算服务,而无须在后台配置或管理任何服务器。

Lambda服务会根据使用情况自动进行弹性扩展,并具有内置的容错性和高可用性的特点,因此无须担心使用AWS Lambda的HA或DR(Disaster Recovery,灾难恢复)方案。只需要负责管理代码,因此可以专注于业务逻辑,并完成相应的工作。

将代码上传到Lambda后,Lambda服务会处理运行代码需要的所有关于容量、扩展、补丁和基础设施的问题,并向Amazon CloudWatch发送实时指标和日志来为客户提供性能的可视化。[3]Lambda服务可以为函数(function)分配不同的内存(128 MB~3 GB),根据内存分配,服务会将对应的CPU和网络资源分配给函数。我们也可以把AWS Lambda理解为代码中的一个函数,它允许通过事件触发然后无状态地执行。同时,这也意味着我们无法登录实际的计算实例或自定义底层硬件。[4]

使用Lambda,只需为代码运行的时间和请求次数付费。一旦函数执行完成,Lambda服务进入空闲模式,则不需要为这些空闲时间进行付费。AWS Lambda遵循非常细粒度的定价模型,计算时间以100 ms为单位。它还提供一个免费套餐,我们可以免费使用Lambda,直到达到特定的请求数量上限为止。我们将在后面的章节中更详细地研究AWS Lambda的定价。

AWS Lambda是一个很棒的工具,可以基于事件触发运行云中的代码。然而,我们需要记住的是,AWS Lambda自身是无状态的,这意味着我们应该以无状态的方式开发代码。如果需要保存状态或者数据,可以使用Amazon DynamoDB等数据库。多年来,AWS Lambda在许多无服务器场景(如Web应用程序、数据处理、物联网、基于语音的应用程序和基础设施管理等)中变得越来越流行。1.4.1 AWS Lambda语言支持

Lambda是无状态且无服务器的,我们应该以无状态的方式开发代码。如果想使用其他第三方服务或者库,AWS允许打包这些文件夹和库,并将它们以ZIP文件形式提供给Lambda,从而可以使用其他想要使用的语言。

AWS Lambda支持使用以下几种语言编写的代码:

● Node.js(JavaScript);

● Python;

● Java(Java 8兼容);

● C#(.NET Core);

● Go;

● PowerShell。注:AWS Lambda可能随时更改支持的语言列表,请访问AWS网站以获[5]取最新信息。1.4.2 练习1:运行第一个Lambda函数

在本练习中,我们将创建一个Lambda函数,指定内存和超时设置,并执行该函数。我们将创建一个基础Lambda函数来生成1到10之间的随机数。

以下是练习的各个步骤。

1.打开浏览器,并转到URL https://aws.amazon.com/console/,登录AWS管理控制台(参见图1-4)。图1-4 AWS管理控制台

2.单击页面左上角的Services,如图1-5所示,在列出的服务中查找Lambda或在搜索框中直接键入Lambda,然后在搜索结果中单击Lambda服务。图1-5 AWS服务

3.单击Create a function,服务欢迎页面如图1-6所示,在AWS Lambda页面上创建第一个Lambda函数。图1-6 服务欢迎页面

4.在Create function页面上,函数创建页面一如图1-7所示,选择Author from scratch从头开始创作。图1-7 函数创建页面一

5.在Author from scratch窗口中,填写以下详细信息,函数创建页面二如图1-8所示。图1-8 函数创建页面二

Name:函数名称,输入myFirstLambdaFunction。[6]

Runtime:选择(Node.js 10.x或者Node.js 8.10)运行语言。运行时窗口下拉列表显示了AWS Lambda支持的语言列表,你可以使用列出的选项编写Lambda函数代码。在本练习中,我们将在Node.js中编写代码。

Role:选择Create new role from one or more template(s),用AWS策略模版创建新角色。在本节中,你将指定一个IAM角色。

Role name:角色名称输入lambda_basic_execution。

Policy templates:选择Simple Microservice permissions。

6.单击Create function,可以看到如图1-9所示的信息。图1-9 函数创建成功

此时已经成功创建了第一个Lambda函数!但我们还没有根据自己的需求更改代码和配置,接下来让我们继续前进。

7.转到Function code函数代码部分,函数代码窗口如图1-10所示。图1-10 函数代码窗口

8.使用Edit code inline在线编辑选项编写一个简单的随机数生成器函数。

9.以下是练习示例Lambda函数的代码。我们在此声明了两个变量:minnum和maxnum。然后,使用Math类的random()方法生成随机数。最后,调用callback(null,generatednumber)。如果出现错误,则返回null给调用者;否则,变量generatednumber的值将作为输出传递,代码如下。

10.在Basic settings设置窗口中,在Description描述字段填写myLambda Function_settings,在Memory内存字段中选择128 MB,在Timeout超时字段中选择3s,如图1-11所示。图1-11 基本设置窗口

11.准备就绪!单击屏幕右上角的Save保存按钮,如图1-12所示。恭喜!刚刚成功创建了第一个Lambda函数。图1-12 保存Lambda函数

12.现在,要运行并测试函数。首先,需要创建一个测试事件,这允许设置要传递给函数的事件数据。单击屏幕右上角Select a test event选择测试事件旁边的下拉列表,然后选择Configure test event配置测试事件,如图1-13所示。图1-13 Lambda函数测试窗口

13.弹出窗口时,单击Create new test event创建新测试事件并为其命名(如myTestEvent),然后单击Create创建测试事件,测试事件配置窗口如图1-14所示。图1-14 测试事件配置窗口

14.单击测试事件旁边的Test测试按钮,可以在事件执行成功后看到如图1-15所示窗口。图1-15 测试事件执行窗口

15.展开Details详细信息选项卡,将看到函数执行的更多详细信息,如实际执行时间、计费时间、实际使用的内存和已配置的内存等,如图1-16所示。图1-16 测试事件执行详情页面

我们无须管理任何底层基础设施,例如EC2实例或Auto Scaling[7]组,只需提供代码,然后让Lambda完成剩下的工作。1.4.3 思考题1:计算两个数字平均值的平方根

请创建一个新的Lambda函数,可以计算两个输入数字平均值的平方根。例如,两个输入的数字是10和40,我们知道它们的平均值是25,然后25的平方根是5,所以函数执行的结果应该是5。这是一个基本的Lambda函数,可以使用简单的数学函数编写。

以下是完成题目的参考步骤:

1.参考我们之前刚刚完成的练习。

2.转到AWS Lambda服务并创建一个新函数。

3.提供函数名称、运行时和角色,如上一练习中所述。

4.在Function code函数代码部分,编写代码以计算两个输入数字平均值的平方根。完成编写后,保存代码。

5.创建测试事件并进行测试。

6.执行函数。注:有关此思考题的解决方案,请参见附录。1.4.4 AWS Lambda的限制

AWS Lambda可以根据账户级别对资源施加了某些限制。AWS Lambda一些值得注意的限制如下:

● 内存分配。你可以为Lambda函数分配内存,最小值为128 MB,最大值为3 008 MB。根据内存分配,Lambda服务会将对应的CPU和网络资源分配给你的函数。因此,如果Lambda函数是资源密集型的,那么可能需要分配更多内存。相应地,Lambda函数的成本根据分配给函数的内存量而变化。

● 执行时间。目前,Lambda服务限制函数的最长执行时间为15 min。如果函数在此期间仍没有执行完成,则会自动超时。

● 并发执行。Lambda服务允许在给定区域内的所有函数中最多1 000次并发执行(默认限制)。根据使用情况,可能希望为函数设置并发执行限制,否则,总体成本可能很快就会上升。注:如果想了解有关Lambda函数限制的更多信息,请参考https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/limits.html#limits-list。1.4.5 AWS Lambda定价

AWS Lambda是一种无服务器计算服务,只需按使用量付费即可,而不必为任何空闲时间付费。Lambda也提供了一组免费套餐,我们将在下一节讨论。

要了解Lambda的AWS计费模型,首先需要了解GB-s的概念。

1GB-s是指每秒使用1 GB的内存。因此,如果代码在前2 min内[8]使用1 GB内存,然后在接下来的3 min内使用3 GB内存,则累计内存使用量将为1×120+3×180=660 GB-s。Lambda定价取决于以下两个因素:注:本书中讨论的AWS服务的价格是本书在撰写期间的价格,AWS价格可能随时发生变化,更多最新的价格信息,请参考AWS网站https://amazonaws-china.com/cn/lambda/pricing。

● 总请求数:即每次针对事件通知或调用而执行Lambda函数的总次数。作为免费套餐的一部分,每月前100万个请求是免费的,超过免费等级限制后每100万个请求收费0.20美元。

● 总执行时间:持续时间从代码开始执行时算起,到其返回或终止为止,舍入到最近的100 ms。价格取决于为函数分配的内存量,如图1-17所示。如果想了解总执行时间的成本如何随分配给Lambda函数的内存总量而变化,请参考https://amazonaws-china.com/cn/lambda/pricing。1.4.6 Lambda免费套餐

作为Lambda免费套餐的一部分,每月前100万个请求免费,并且每月可以有400 000 GB-s的免费时间。由于函数持续时间成本随分配的内存大小而变化,因此,为Lambda函数选择的内存大小决定了它们在免费套餐中运行的时间。图1-17 AWS Lambda价格注:Lambda免费套餐每月会进行调整,Lambda免费套餐在AWS免费套餐12个月期限到期后不会自动过期,而是无期限地提供给现有和新的AWS客户。1.4.7 思考题2:计算Lambda费用

假设有一个Lambda函数,分配了512 MB的内存,一个月内有2 000万次函数调用,每个函数调用持续1 s,请计算Lambda费用。

以下是计算成本的方法:

1.注意免费套餐提供的每月计算价格和时间。

2.以s为单位计算总执行时间。

3.以GB-s计算总执行时间。

4.以GB-s计算每月计费,参考公式如下:月度计费计算(GB-s)=总计算-免费套餐计算

5.以美元计算每月计算费用,参考公式如下:月度计算费用=月度计费计算(GB-s)×月度计算价格

6.计算每月可结算请求,参考公式如下:月度计费请求=总请求数-免费套餐请求数

7.计算每月的请求费用,参考公式如下:月度请求费用=月度计费请求×月度请求价格

8.计算总成本,参考公式如下:二月度计算费用+月度请求费用注:有关此思考题的解决方案,请参见附录。1.4.8 其他成本

在估算Lambda成本时,也需要了解一些额外成本。Lambda在与其他AWS服务(如DynamoDB或S3)集成时,可能还会承担一部分其他成本。例如,如果使用Lambda函数从S3存储桶读取数据并将输出数据写入DynamoDB表中,那么从S3读取数据及DynamoDB的写入吞吐量会产生相应的费用。我们将在第2章《AWS无服务器平台》中学习有关S3和DynamoDB的更多信息。

总之,单次运行Lambda函数本身可能不会产生很多费用,但需要考虑可能使总体成本上升的每月数百万的请求和众多Lambda函数。1.5 小结

在本章中,我们首先重点介绍了无服务器模型AWS及AWS Lambda的入门知识,这是AWS上无服务器应用程序的第一个构建块。其次,我们研究了无服务器模型及其用例的主要优点和缺点,进一步解释了无服务器模型,并开始使用AWS无服务器的服务。最后,我们创建并执行了第一个AWS Lambda函数。

在下一章中,我们将介绍AWS无服务器平台的功能,以及无论是否使用AWS Lambda,AWS如何支持企业级无服务器应用程序。从计算到API Gateway、从存储到数据库,内容将覆盖许多在AWS上构建和运行无服务器应用程序的完全托管服务。[1]译者注:目前Amazon API Gateway也支持WebSocket API的管理,请参考https://docs.aws. amazon.com/zh_cn/apigateway/latest/developerguide/apigateway-websocket-api-overview.html。[2]译者注:AWS无服务器平台除了这8个服务,还包含其他许多种不同的服务,并且在持续地创新、开发中,请参考https://amazonaws-china.com/cn/serverless/。[3]译者注:更多关于Lambda函数的信息请参考https://docs.aws.amazon.com/zh_cn/lambda/ latest/dg/lambda-introduction-function.html。[4]译者注:AWS Lambda还包含请求费用,原书此处没有说明,这里根据实际情况进行补充,更多关于AWS Lambda的定价信息请参考https://amazonaws-china.com/cn/lambda/pricing/。[5]译者注:AWS Lambda目前原生支持Java、Go、PowerShell、Node.js、C#、Python和Ruby代码,并提供Runtime API,允许你使用任何其他编程语言来编写函数,请参考https://docs.aws.amazon.com/zh_cn/ lambda/latest/dg/lambda-runtimes.html。[6]译者注:AWS Lambda 运行时是围绕不断进行维护和安全更新的操作系统、编程语言和软件库的组合构建的,原书中Node.js 6.10运行时已经弃用,请参考https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/runtime-support-policy.html。[7]译者注:关于Auto Scaling的更多信息请参考https://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html。[8]译者注:原书此处示例内存为5GB,超过最大值3008 MB,这里根据情况进行了适当的调整。2 AWS无服务器平台

学习目标

到本章结束时,你将能够:

● 理解Amazon S3和无服务器部署;

● 使用Amazon API Gateway并将其与AWS Lambda集成;

● 使用完全托管的服务,如Amazon SNS、Amazon SQS和Amazon DynamoDB。

本章将介绍如何使用AWS构建和运行无服务器应用程序。2.1 概述

在上一章中,我们专注于理解无服务器模型,并开始使用AWS和AWS Lambda,这是AWS上无服务器应用程序的第一个构建块。此外,我们还了解了无服务器模型与传统产品开发的区别。

在本章中,我们将了解更多其他AWS功能,如Amazon S3、Amazon SNS和Amazon SQS。你可能听过或者有机会使用过不同的AWS无服务器技术,也可能简要地了解过不同的AWS服务,如S3存储、API Gateway、SNS、SQS和DynamoDB服务。我们将在本章中详细讨论它们。2.2 Amazon S3

Amazon S3(Amazon Simple Storage Service)是一个云存储平台,可在任何地方存储和检索任意数量的数据。Amazon S3提供了无与伦比的持久性、可扩展性和可用性,能以最安全的方式存储数据。我们可以通过简单的接口访问存储服务,这些界面可以是REST或SOAP。Amazon S3是被其他服务支持最多的平台之一,既可以将S3用作独立的存储服务,也可以将其与其他AWS服务进行集成。

Amazon S3是一个对象存储服务,它将数据存储为“存储桶”(bucket)中的对象。存储桶是对象的容器,可用于各种用途。通过存储桶,可以在最高级别组织Amazon命名空间,并在访问控制中发挥关键作用;也可以在存储桶中存储任意数量的对象,对象大小从1B~5 TB不等;也可以对存储桶中的对象执行读取、写入和删除操作。

S3中的对象由元数据和数据组成。数据是被存储在对象中的内容。在存储桶中,对象由键(key)和版本ID唯一标识,其中键是对象的名称。

在S3中添加新对象时,将会生成一个版本ID并将其分配给该对象。版本控制允许维护对象的多个版本,在使用前需要启用S3的版本控制。注:如果禁用版本控制并尝试复制具有相同名称(键)的对象,则它将会覆盖现有对象。

通过存储桶、键和版本ID的组合,可以唯一标识Amazon S3中的每个对象。

例如,如果存储桶名称是aws-serverless,对象名称是CreateS3Object.csv,则以下URL是S3中对象的完全限定路径,如图2-1所示。图2-1 用于访问aws-serverless存储桶中名为CreateS3Object.csv对象的完全限定路径2.2.1 Amazon S3的主要特征

现在,让我们了解Amazon S3服务的一些关键特性。

● 持久性和高可用性

Amazon S3提供持久的基础设施来存储你的数据,并承诺提供11个9(99.999999999%)的持久性。Amazon S3在全球多个地区提供服务,并在每个区域内都提供地理冗余,因为数据会自动存储在同一个区域的多个可用区。此外,还可以选择跨区域的数据复制。如前所述,我们也可以维护多个版本的数据用于恢复。在图2-2中,可以看[1]到当区域source-region-A中的S3存储桶发生故障时,Route 53将重新定向到区域source-region-B中的复制副本。注:地理冗余可以复制数据并将此备份数据存储在其他物理位置中。你可以随时从此备份物理位置获取数据,以防主站点出现故障。

● 可扩展性

Amazon S3是一种高度可扩展的服务,它可以根据业务需求轻松扩展或收缩。假设现在迫切需要对500 GB的数据进行分析,并且在进行分析之前必须将这些数据引入AWS生态系统。不用担心,因为我们可以快速创建一个新存储桶,并开始将数据上传到其中。所有可扩展性工作都在后台进行,不会对业务产生任何影响。图2-2 Amazon S3地理冗余

● 安全性

在Amazon S3中,可以启用服务器端加密,这会在数据写入S3存储桶时自动加密数据。当有人想要读取数据时,数据就会解密。Amazon S3还支持通过SSL进行数据传输加密,还可以使用AWS Identity and Access Management(IAM)服务配置存储桶策略,以管理对象权限,并控制对数据的访问。我们将在本章后面的章节更详细地介绍权限管理。注:由于它是服务器端加密,因此不需要用户干扰。所以,当用户试图读取数据时,服务器自动解密数据。

● 最受支持的集成

我们既可以将Amazon S3用作存储数据的独立服务,也可以将它与其他AWS服务(如Lambda、Kinesis和DynamoDB)进行集成。我们将在本章后面的章节介绍其中一些与AWS服务的集成,并作为练习的一部分。

● 节省成本

与其他AWS无服务器服务一样,Amazon S3也适用于“按实际使用量付费”(pay-as-you-go)模式。这意味着我们不需要预付费,只需要根据实际使用情况付费。由于Amazon S3是无服务器产品,我们无须管理任何底层硬件或网络资源,所以也无须采购和管理昂贵的硬件设备,Amazon S3有助于你降低成本。

● API访问

我们可以非常方便地通过REST API向Amazon S3端点发出请求。2.2.2 部署静态网站

通过Amazon S3,我们可以以较低成本托管整个静态网站,同时利用高可用且可扩展的托管解决方案来满足各种流量需求。2.2.3 练习2:在S3存储桶中设置静态网站(使用Route 53管理域名)

在本练习中,我们将考虑执行以下操作。

● 创建S3存储桶并配置所需的权限;

● 将用于网站的默认页面文件上传到S3存储桶;

● 配置S3存储桶。

那么,让我们开始吧。以下是执行此练习的步骤。

1.登录AWS账户。

2.单击左上角Services服务旁边的下拉列表,然后输入S3,如图2-3所示。

3.这将打开Amazon S3页面,单击Create Bucket创建存储桶,如图2-4所示。图2-3 通过下拉选项搜索Amazon S3服务图2-4 创建Amazon S3存储桶

4.这将打开Create bucket创建存储桶对话框,需要提供以下信息。

存储桶名称:输入唯一的存储桶名称。本书中,我们使用了www.awsserverless.tk,因为我们将使用S3存储桶来托管网站。根据AWS的操作指南,存储桶名称在Amazon S3中的所有现有存储桶名称中必须是唯一的。因此,需要选择存储桶名称。

区域:单击Region区域旁边的下拉列表,然后选择要创建存储桶的区域。我们将使用默认区域US-East(N.Virginia)。

如果想从其他存储桶复制这些设置并应用于新存储桶,则可以单击Copy settings from an existing bucket从现有存储桶复制设置。在此处,我们将自己配置存储桶的设置,因此将此选项留空,如图2-5所示。

5.单击Next。我们将进入Properties属性窗口。在这里,如图2-6所示,我们可以设置S3存储桶的以下属性:

● Versioning版本。

● Server access logging服务器访问日志记录。

● Tags标签。图2-5 创建存储桶菜单:名称和区域图2-6 创建存储桶菜单:配置选项

● Object-level logging对象级日志记录。

● Default encryption默认加密。

● 在本练习中,我们使用默认属性,并单击Next按钮。

6.下一个窗口是Set permissions设置权限。在这里,我们将存储桶的读写权限授予其他AWS用户并管理公共访问权限。我们可以在图2-7中看到,在默认情况下,存储桶的所有者具有读写权限。如果想将此存储桶的权限授予其他AWS账户,可以单击添加Add Account账户。图2-7 创建存储桶菜单:设置权限

7.取消所有复选框,因为我们将使用此S3存储桶托管网站。

8.使用Manage system permissions管理系统权限默认选项,然后,单击Next按钮转到Review审核页面。在这里可以查看S3存储桶的所有设置。如果要更改内容,请单击Edit编辑按钮并进行更改。或者,单击Create Bucket创建存储桶,如图2-8所示。图2-8 创建存储桶菜单:审核

9.单击新创建的存储桶,然后单击第二个选项卡Properties属性,并启用Static website hosting静态网站托管,如图2-9所示。

10.选择Use this bucket to host a website,使用此存储桶托管网站选项。输入index文件的名称,此文件将用于显示网站的主页。还可以添加error.html文件,该文件将在出现错误时显示页面,这里我们没有为练习添加error.html文件。还可以设置重定向规则,以将对象的请求重定向到同一存储桶中的另一个对象或外部URL。单击Save保存按钮将其保存,如图2-10所示。图2-9 在属性下启用静态网站托管选项图2-10 静态网站托管菜单注:记下页面顶部的Endpoint端点信息,这将是你的网站的URL。在图2-10中,它是http://www.awsserverless.com.s3-website-useast-1.amazonaws.com/。

11.接下来,单击Overview概述选项卡。

12.在Overview选项卡中,单击Upload上传文件。单击Add files添加文件,将index.html页面(在代码包中的Chapter02文件夹可以找到)作为对象上传到S3存储桶中。现在,单击Next按钮,如图2-11所示。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载