AWS-云开发者的-Python-精要-全-
AWS 云开发者的 Python 精要(全)
原文:
zh.annas-archive.org/md5/aef7dae7a15f3d0beb4ccd10abbf8b22译者:飞龙
前言
云计算是实现应用程序最受欢迎的方法之一,具有巨大的优势。有多个云服务提供商,例如 AWS、GCP 和 Azure。AWS 是最常用的云服务提供商之一,许多公司正在迁移到那里。云的使用量显著增长,开发者需要具备云知识。
大多数应用程序正在迁移到云端。AWS 提供了不同的服务来实现 Python 应用程序,因此对于没有 AWS 背景的人来说,配置和选择正确的服务是一个挑战。通过购买本书,您将走上正确的道路,并开始学习如何使用 AWS 服务实现酷炫的 Python 应用程序。
本书面向的对象
本书是为云计算开发者、软件开发人员和打算在 AWS 上开发 Python 应用程序并了解适当 AWS 服务概念的 IT 专业人士编写的。您应该具备 Python 编程经验,以便在 AWS 上实现应用程序。
本书涵盖的内容
第一章, 在 AWS 上使用 Python。本章将教您如何安装和使用 Python IDE,并了解 AWS 云的优势。
第二章, 创建 AWS 账户。要开始云计算,AWS 需要一个账户来实现 Python 编程。在本章中,您将学习如何创建 AWS 账户。
第三章, 使用 Lambda 进行云计算。Lambda 是实现 Python 函数的一种非常有效的方法。本章将帮助您了解 Lambda 服务,并展示如何实现代码。
第四章, 在 EC2 上运行 Python 应用程序。EC2 是您可以在云上配置的关键服务之一。本章将帮助您了解 EC2 服务,并展示如何配置服务器以及随后部署 Python 应用程序。
第五章, 使用 PyCharm 运行 Python 应用程序。调试 Python 应用程序对于测试应用程序非常重要。本章将帮助您以简单的方式在本地调试 Python 应用程序。
第六章, 在 Elastic Beanstalk 上部署 Python 应用程序。Elastic Beanstalk 是一个有用的服务,允许部署应用程序。本章将帮助您了解 Elastic Beanstalk 服务,并展示如何创建服务以及随后部署 Python 应用程序。
第七章, 通过 CloudWatch 监控应用程序。CloudWatch 允许您在 AWS 中监控您的应用程序。本章将帮助您了解 CloudWatch 服务,并展示如何监控 Python 应用程序。
第八章,使用 RDS 进行数据库操作。RDS 用于在 AWS 中创建数据库。本章将帮助您了解 RDS 服务,并展示如何通过 Python 应用程序创建数据库和执行 SQL 操作。
第九章,在 AWS 中创建 API。API 是应用程序的重要接口。本章将帮助您在 AWS 中创建 API 并将 API 发布以访问 Python 应用程序。
第十章,使用 Python 与 NoSQL(DynamoDB)。NoSQL 用于存储非结构化和半结构化数据。本章将帮助您创建 NoSQL 数据库并在 DynamoDB 上执行 SQL 操作。
第十一章,使用 Python 与 Glue。Glue 是 AWS 中的无服务器数据集成服务。本章将帮助您将 Python 应用程序嵌入到 Glue 服务中。
第十二章,AWS 参考项目。实施一个示例项目是了解应用程序编程的最佳方式。本章将帮助您使用最佳实践实施示例 AWS 项目。
要充分利用本书
您需要了解 Python 编程语言的基础知识,才能在 AWS 上实施应用程序。
| 书中涵盖的软件/硬件 | 操作系统要求 |
|---|---|
| Python | Windows、macOS 或 Linux |
| 亚马逊网络服务(AWS) |
下载示例代码文件
您可以从 GitHub 下载本书的示例代码文件github.com/PacktPublishing/Python-Essentials-for-AWS-Cloud-Developers。如果代码有更新,它将在 GitHub 仓库中更新。
我们还有其他来自我们丰富的书籍和视频目录的代码包,可在github.com/PacktPublishing/找到。查看它们吧!
下载彩色图像
我们还提供了一份包含本书中使用的截图和图表彩色图像的 PDF 文件。您可以从这里下载:packt.link/hWfW6
使用的约定
本书使用了多种文本约定。
文本中的代码:表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个示例:“从命令行执行python --version。”
代码块按以下方式设置:
from flask import Flask
app = Flask(__name__)
@app.route('/')
当我们希望您注意代码块中的特定部分时,相关的行或项目将以粗体显示:
from flask import Flask
app = Flask(__name__)
@app.route('/')
任何命令行输入或输出都按以下方式编写:
wget https://raw.githubusercontent.com/PacktPublishing/Python-Essentials-for-AWS-Cloud-Developers/main/fileprocessor.py
粗体: 表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词会以粗体显示。以下是一个例子:“在左侧点击实例,然后点击启动实例。”
小贴士或重要提示
它看起来像这样。
联系我们
我们始终欢迎读者的反馈。
一般反馈: 如果您对本书的任何方面有疑问,请通过电子邮件发送至 customercare@packtpub.com,并在邮件主题中提及书名。
勘误: 尽管我们已经尽最大努力确保内容的准确性,但错误仍然可能发生。如果您在这本书中发现了错误,如果您能向我们报告,我们将不胜感激。请访问www.packtpub.com/support/errata并填写表格。
盗版: 如果您在互联网上发现我们作品的任何非法副本,我们将不胜感激,如果您能提供位置地址或网站名称,请通过电子邮件联系 copyright@packt.com 并提供材料链接。
如果您有兴趣成为作者:如果您在某个领域有专业知识,并且您有兴趣撰写或为书籍做出贡献,请访问authors.packtpub.com。
分享您的想法
一旦您阅读了Python Essentials for AWS Cloud Developers,我们非常乐意听到您的想法!请点击此处直接进入本书的亚马逊评论页面并分享您的反馈。
您的评论对我们和科技社区非常重要,并将帮助我们确保我们提供高质量的内容。
下载本书的免费 PDF 副本
感谢您购买本书!
您喜欢在路上阅读,但无法携带您的印刷书籍到处走?您的电子书购买是否与您选择的设备不兼容?
不要担心,现在每本 Packt 书籍都附赠一本无 DRM 的 PDF 版本,无需额外费用。
在任何地方、任何设备上阅读。直接从您最喜欢的技术书籍中搜索、复制和粘贴代码到您的应用程序中。
优惠远不止这些,您还可以获得独家折扣、时事通讯和每天收件箱中的优质免费内容。
按照以下简单步骤获取优惠:
- 扫描二维码或访问以下链接

https://packt.link/free-ebook/9781804610060
-
提交您的购买证明
-
就这些!我们将直接将您的免费 PDF 和其他优惠发送到您的电子邮件。
第一部分:Python 安装和云
在本部分,您将学习如何安装和使用 Python IDE,并了解云基础知识。为了通过 Python 编程在 AWS 中进入云计算,我们还将开设一个 AWS 账户。
本部分包含以下章节:
-
第一章,在 AWS 上使用 Python
-
第二章, 创建 AWS 账户
第一章:在 AWS 上使用 Python
在本章中,我们将简要介绍云。然后我们将解释如何设置 Python 以及如何在命令行以及通过 集成开发环境(IDE)运行您的第一个应用程序。我们将涵盖以下主要主题:
-
什么是云?
-
理解云的优势
-
安装 Python
-
安装 PyCharm
-
创建新项目
云计算是实现您应用程序的最流行方法之一,它具有巨大的优势。有多个云服务提供商,例如 亚马逊网络服务(AWS)、谷歌云平台(GCP)和 Azure。AWS 是最广泛使用的云服务提供商之一,许多公司正在迁移到那里。云的使用正在显著增长,预计开发者对云有良好的理解。通过购买这本书,您正在走上正确的道路,并开始学习如何使用 AWS 实现酷炫的 Python 应用程序。
大多数公司正在迁移到云,因为它们具有显著的优势。了解为什么以及如何使用这些服务是很重要的。
什么是云?
云是使用 IT 基础设施和服务的流行方式,这些服务和 IT 提供商管理机器、网络和应用。基本上,您不需要任何本地基础设施,云服务提供商拥有他们的数据中心,通过互联网提供所需的服务。例如,如果您需要服务器,您不需要购买机器,也不需要设置其网络和电源。云服务提供商为您提供服务,您可以通过互联网使用它们。
理解云的优势
以下方面解释了为什么公司迁移到云以获得更好的基础设施:
-
良好的灾难恢复计划:云服务提供商在不同地区拥有多个数据中心。如果一个地区出现问题,系统可以在另一个地区恢复。
-
更好的可扩展性和稳定性:在 AWS 中,您有不同的服务来升级和降级您的应用程序。您需要做的只是根据使用情况配置扩展选项。
-
更快的生产时间:AWS 有超过 100 个服务,这些服务具有巨大的能力。当您有任何用于生产的应用程序时,您不需要从头开始,例如配置服务器或准备基础设施。
-
按需付费模式以降低成本:您不需要签订承诺支付的合同;您也可以只使用服务一天然后关闭它。
-
监控和日志优势:最大的云服务提供商都有监控和日志服务;您可以将这些服务集成到您的应用程序中。
-
减少 DevOps 工作量:AWS 为 DevOps 提供了许多优势。例如,您可以快速配置服务器,并通过简单的配置部署和监控您的服务。
-
多种安全服务以保护数据安全:有不同服务来保护你的服务和数据安全。
云服务带来了许多优势。在使用云服务时也有一些重要的考虑因素:
-
安全性:保护你的服务很重要,AWS 提供了不同的服务来保护你的数据,例如防火墙配置。在使用 AWS 服务时,你必须评估安全需求。
-
成本管理:你可以轻松创建和扩展你的服务,这是一个非常大的优势。需要注意的是,当你创建这些服务时,它们会带来成本,如果你没有考虑特定服务的成本,这可能会让你感到意外。在创建服务时检查其成本,并在服务超出预算时创建一些警报。
AWS 有超过 100 个服务,根据你的需求选择正确的服务来实现你的应用非常重要。在这本书中,你将学习如何创建 AWS 账户和所需的 AWS 服务,这些服务允许你运行 Python 应用。为了在 AWS 中运行和部署 Python 应用,你将学习如何配置 AWS 服务并在之后部署它们。
Python 也是最受欢迎的编程语言之一。它易于学习,并且应用范围广泛。在 AWS 中,由于 Python 的广泛使用,大多数与应用相关的服务都支持 Python,并且在使用 Python 时这些服务都很稳定。AWS 总是根据他们的服务调整 Python 用例,这是一个很大的优势。
这本书是为希望开发 Python 应用并在 AWS 上学习适当 AWS 服务概念的云开发者、软件开发人员和 IT 专家而编写的。你应该具备 Python 知识,这本书将专注于在 AWS 中创建 Python 应用。重点将放在创建和提供 AWS 服务的详细信息上,而不是深入研究 Python 语法细节。因此,你将增加你的技能集。
在阅读这本书时,遵循练习非常重要。这不仅仅是一本理论和定义的书。你将看到代码示例来展示你所学的知识。我建议你自己实现相同的示例,以帮助你更好地学习和将相同的方法应用于你的云项目中。这个想法可能会减缓你的进度,但你在使用 AWS 进行专业工作时,将更好地学习和轻松记住这些概念。
在这本书的结尾,你将使用 Python 在 AWS 上实现一个毕业项目,将不同的 AWS 服务连接到一个应用中。这个项目帮助你使用同一应用中的不同服务,并理解它们之间的联系;你将通过另一个实践练习巩固你的学习。
一旦你创建了 AWS 账户,你将根据一个月内的使用情况付费。你总是必须小心你在 AWS 中使用和创建的内容。另一个需要注意的点是,一些 AWS 服务在有限使用范围内是免费的。在使用任何 AWS 服务之前,请检查费用。请注意,在练习时你需要支付 AWS 费用。你可以在此链接查看价格:aws.amazon.com/pricing/。
让我们深入了解 AWS 上的 Python 编程。
安装 Python
要安装 Python,执行以下步骤:
-
访问 Python 下载页面,
www.python.org/downloads/,并选择正确的操作系统。 -
下载安装包并在之后运行:

图 1.1 – 安装 Python
安装完成后,你将有一个 Python 3.X 文件夹。Python 文件夹包含以下内容:

图 1.2 – 安装文件夹内容
我们将遵循 macOS 的步骤;它与其他操作系统非常相似。让我们实现 'Hello World' 应用程序:
- 双击
IDLE应用程序并运行示例'HelloWorld'应用程序:

图 1.3 – Python 命令行
如果你看到这个输出,恭喜!你成功安装了 Python 编译器。作为下一步,我们将安装 IDE 以简化应用程序开发。
安装 PyCharm
PyCharm 是用于开发 Python 应用程序的最强大的 IDE 之一。对于示例,我们将使用 PyCharm;如果你更喜欢,你也可以使用其他 IDE。你必须执行以下步骤:
- 访问下载页面,
www.jetbrains.com/pycharm/download,并选择正确的操作系统:

图 1.4 – PyCharm 下载页面
我推荐下载 社区版。否则,它将是 30 天的试用版。
- 下载安装包并在之后运行它。一旦点击 下载,它将直接将安装包下载到计算机上:

图 1.5 – 下载文件夹
当你检查安装文件夹时,你将能够看到安装程序。将 PyCharm 安装到你的机器上。
创建新项目
在 PyCharm 安装完成后,我们将创建一个新的项目以实现我们的第一个 Python 代码片段:
- 打开 PyCharm,你将看到 项目 部分:

图 1.6 – PyCharm IDE
- 添加项目名称:

图 1.7 – 创建新项目
- 项目已准备好实施。右键单击然后点击 运行 'main':

图 1.8 – 示例项目
- 命令运行应用程序:

图 1.9 – 运行应用程序
恭喜!您已在 PyCharm 中创建了您的第一个项目。
摘要
在本章中,我们探讨了云基础和优势。之后,我们安装了 Python 以及最受欢迎和实用的集成开发环境之一,PyCharm。PyCharm 将成为我们实现 AWS 应用程序的主要工具。
在下一章中,我们将注册 AWS 以在云上拥有一个账户。
第二章:创建 AWS 账户
在本章中,我们将创建一个 AWS 账户。本书包含示例和多个用例,因此创建一个账户以便跟随后续章节中的 AWS 练习将很有用。让我们学习如何创建 AWS 账户。
本章涵盖了以下主题:
- 创建 AWS 账户
创建 AWS 账户
要创建 AWS 账户,请执行以下步骤:
-
在
aws.amazon.com/打开 AWS 网站,以创建账户。 -
点击页面顶部右侧的 创建 AWS 账户 按钮。


注册 AWS 界面将打开。


-
如 图 2.2 所示,有两个需要填写字段:
-
根用户电子邮件地址:根用户是所有子账户的所有者,能够访问所有资源并管理它们。您可以为根用户使用单个电子邮件地址。除此之外,根用户对所有服务都有完全访问权限。这是您在保护账户时需要考虑的事情。
-
AWS 账户名称:AWS 账户名称是一个非正式名称,它出现在账户 ID 旁边。您可以在创建 AWS 账户时命名它。您可以在根账户下拥有多个账户以实施不同的项目。在某些情况下,您需要将服务和成本分开。在这种情况下,创建多个账户可能是一个好办法。
-
点击 验证电子邮件地址 按钮。
- 在填写 根用户电子邮件地址 和 AWS 账户名称 字段后,您将通过电子邮件收到一个验证码。应在 验证码 输入字段中填写此代码。点击 验证。

图 2.3 – 添加验证码
- 下一步是定义访问密码。填写 根用户密码 和 确认根用户密码 字段,然后点击 继续(第 1 步/5 步)。


- 填写所需个人信息。


- 在填写个人信息后,填写信用卡信息。
重要提示
我建议使用预算有限的卡,因为如果你不小心打开了成本高昂或持续运行的 AWS 服务,这张有限额的卡可以防止你过度消费。


在您输入信用卡信息后,您可能会根据您的银行账户要求确认。
- 确认后,您将被要求选择一个支持计划。出于学习目的,您可以使用 基本支持 - 免费 计划,因为它推荐给新用户。

图 2.7 – 支持计划
恭喜!在选择支持计划后,你将拥有一个 AWS 账户,以便开始使用云服务。
摘要
在本章中,我们探讨了 AWS 账户的创建。AWS 账户将帮助你进行云环境中的 Python 练习。需要注意的是,AWS 是一项付费服务,你必须考虑你将要使用的成本。在下一章中,我们将探讨 Lambda 等流行服务。
第二部分:使用 Python 深入探索 AWS
在本部分,你将深入探索 Python 编程中最常用的 AWS 服务,例如 Lambda、EC2 和 Elastic Beanstalk。然而,还会提到一些其他 AWS 服务,如 S3,以获得更广泛的知识。
本部分包含以下章节:
-
第三章,使用 Lambda 进行云计算
-
第四章,在 EC2 上运行 Python 应用程序
-
第五章,使用 PyCharm 运行 Python 应用程序
-
第六章,在 Elastic Beanstalk 上部署 Python 应用程序
第三章:使用 Lambda 的云计算
在本章中,我们将学习 Lambda 的基础知识,并实现一个将在 AWS Lambda 中运行的 Python 应用程序。为此,我们将使用我们的 AWS 账户。
本章涵盖了以下主题:
-
云计算
-
什么是 Lambda?
-
使用 Lambda 的示例应用
-
Lambda 中的重要配置
-
Lambda 框架
-
Lambda 返回值
-
Lambda 中的日志记录
-
使用 Lambda 和 S3 提交元数据解析应用
云计算
云计算允许你使用计算机资源,如磁盘和内存,而无需管理基础设施。云的概念对于让你专注于应用程序非常重要。当你使用自己的基础设施时,你需要购买或租用一台计算机,安装所有必要的软件,连接电缆,并确保计算机免受物理和软件攻击。很明显,这需要大量的时间;因此,你的重点将是减少应用程序的配置时间。使用云计算,你不会有这种头痛。云服务提供商承担了大部分责任,并为你设置和维护数据中心。你需要做的是进行一些配置并将你的应用程序部署到数据中心。这使得你的生活更轻松;云服务提供商专注于基础设施,而你专注于应用程序。这是云计算的最大优势。
什么是 Lambda?
Lambda 是一种计算服务,允许你运行 Python、Java、Node.js、Ruby、.NET 和 Go 代码,而无需配置和管理任何服务器。在 AWS 中,它是 AWS 堆栈中最常用的服务之一。你需要做的只是开发和运行你的代码。Lambda 在成本方面也有一些优势。
Lambda 是 AWS 创建的容器,用于执行你的应用程序。当你创建一个 Lambda 函数时,AWS 会为你创建这个容器。因此,你不需要配置实例并在容器中安装编译器。唯一的责任是在选择 Lambda 时运行你的代码。
Lambda 的优势
Lambda 的优势如下:
-
没有必要配置服务器
-
它是一种按使用付费的模式
-
它支持不同的运行时,如 Python、Java 和 C#
-
由于它已经准备好开发,因此无需安装软件开发工具包
-
它具有可扩展性功能——如果你的流程需要更多资源,Lambda 会自动扩展它
-
它为你的运营管理节省了大量时间
-
它能够持续监控你的 Lambda 函数
Lambda 的限制
Lambda 的限制如下:
-
超时限制:如果你有长时间运行的功能,Lambda 不是最佳选择。目前,Lambda 的超时限制为 15 分钟。如果持续时间超过 15 分钟,你将收到超时错误。
-
内存限制:当你运行函数时,进程需要根据流程分配内存。如果你的进程需要大量的内存,你会收到一个错误。除此之外,Lambda 的成本与执行时间和使用的内存量相关。
你可以在 AWS Lambda 配额页面查看最新的限制:docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.xhtml。
在本节中,我们探讨了 Lambda 的一些优缺点。当你需要快速运行任何类型的应用程序,而不需要服务器或详细的安装时,它非常有用。现在,我们将实现一个简单的应用程序来学习 Lambda,并利用这些优势为我们带来好处。
一个使用 Lambda 的示例应用程序
我们将分步骤在 Lambda 中执行一个示例应用程序。要在 Lambda 上运行 Python 应用程序,请按照以下步骤操作:
-
前往 AWS 管理控制台。
-
在搜索框中输入
lambda并点击 Lambda 服务:

图 3.1 – AWS 管理控制台
-
点击创建函数。
-
在创建函数页面,选择使用蓝图,在蓝图内选择hello-world-python应用程序:

图 3.2 – 创建函数
- 在下一屏幕上,输入 Lambda 函数的名称并选择安全设置:

图 3.3 – 命名函数
当你运行一个 Lambda 函数时,你需要定义 Lambda 可以使用的角色,以便能够执行一些操作,这可以在执行角色下完成。该角色定义了你在 AWS 中的权限以及如何访问其他 AWS 服务。例如,如果 Lambda 需要访问数据库,那么它应该有数据库访问安全角色。在这种情况下,Lambda 将拥有运行示例 Python 函数的基本权限。
一旦你创建了 Lambda 函数,你将拥有要测试的基本 Python 代码:

图 3.4 – 一个 Lambda 函数示例
- 点击测试按钮。当你点击它时,你也可以设置参数:

图 3.5 – 运行 Lambda 函数
在运行测试后,Lambda 将运行,你将能够看到结果:

图 3.6 – Lambda 函数的输出
我们已经创建了一个 Lambda 函数示例。一旦你实现了应用程序,正如你所看到的,运行应用程序非常简单。
Lambda 中的重要配置
当你创建一个 Lambda 函数时,需要完成不同的配置才能高效地运行它:

图 3.7 – Lambda 配置
我们将使用这些配置来演示下一个例子。在开始示例之前,让我们先看看这些配置的定义:
-
内存:此配置用于定义应用程序的内存限制。你需要找到这个值的可行量。如果你定义了一个很大的量而实际上并未使用,这会影响成本。另一方面,如果你定义的内存量小于实际使用量,你的应用程序会抛出内存不足异常。
-
超时:我们提到 Lambda 函数在超时方面有限制。你可以在 Lambda 函数应该工作的持续时间限制下提供。
-
/tmp文件夹用于临时存储,Lambda 处理完成后需要删除。 -
触发器:触发器允许你选择一个运行 Lambda 函数的 AWS 源。例如,S3,AWS 中的对象存储机制,可以是 Lambda 函数的触发器。我们可以在 Lambda 中添加 S3 配置,这样当对象/文件上传到 S3 时,就会触发 Lambda。
-
执行角色中的
PUT权限。 -
目标:当 Lambda 完成处理时,它可以向其他服务发送信息,例如队列。
-
环境变量:这允许你在 Lambda 应用程序中添加一个环境变量。例如,你可以将数据库 URL 添加到这个配置中。如果数据库 URL 发生变化,你不需要更改代码。
-
CRM和订单管理,这允许你分类你的函数并便于搜索。这也用于成本管理。 -
虚拟私有云(VPC):VPC 允许你在你定义的虚拟网络环境中创建 AWS 服务。你可以将 AWS 服务分离到不同的网络设置中。正如你在以下图中看到的,可以在不同的环境中创建两个实例:

图 3.8 – 一个 VPC
- 监控和操作工具:Lambda 默认收集应用程序日志,并且可以通过 CloudWatch 进行监控,这有助于你监控应用程序。此工具默认启用,但你也可以禁用它。
Lambda 的配置在创建新函数时非常重要。了解不同配置用于何种原因是有益的,这样你可以正确地使用 Lambda。
Lambda 骨架
当你通过 Python 实现 Lambda 函数时,你需要遵循一些规则以便执行应用程序。当 Lambda 函数运行时,它会调用handler方法,如下所示:
def lambda_handler(event, context):
...
return some_value
如你所见,第一个参数是event对象。一个event对象由 JSON 组成,以便将数据作为参数处理。你可以在以下示例中看到参数:
{
"Temperature": 10,
"Wind": -5
}
第二个参数显示了 Lambda 运行时的信息。你可以在以下位置看到一些运行时字段:
-
function_name(函数名称) -
function_version(函数版本) -
memory_limit_in_mb(Lambda 函数内存限制)
我们已经了解了 Python Lambda 函数的主要结构。在下一节中,我们将看到如何从 Lambda 返回一个值。
Lambda 返回值
在 Lambda 中,您可以返回一个简单的消息或一个复杂的 JSON 事件。在以下示例中,您可以看到 Lambda 的一个示例返回消息:
def handler_name(event, context):
message = 'Weather details. Temperature: {} and Wind: {}!'.format(event['Temperature'], event['Wind'])
return message
在这个例子中,Lambda 以 Temperature 和 Wind 作为输入,并将这些参数作为消息返回。在以下示例中,您可以看到更复杂的返回值:
def handler_name(event, context):
return {
"statusCode": 200,
"Temperature": 10,
"Wind": -5
}
如此例所示,返回值由一个简单对象组成,该对象将被调用者解析。例如,如果 Lambda 被某个 Python 应用程序调用,则在 Lambda 完成处理后,此对象将被返回。通常,此参数允许您以不同的行为运行 Python 应用程序。在下一节中,我们将了解如何在 Lambda 中记录信息。
Lambda 中的日志记录
使用日志功能来跟踪应用程序非常重要。在某些情况下,您可能需要获取有关应用程序的信息;或者,您可能通过 Lambda 处理数据,并可能得到一个异常结果。因此,日志有助于检查信息,以了解应用程序中的真正问题。
您可以在 Lambda 中使用多个日志库,包括这个:docs.python.org/3/library/logging.xhtml
在以下示例中,只需添加一个日志并返回一个值:
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def handler_name(event, context):
logger.info('Process has finished and result will be returned')
return {
"statusCode": 200,
"Temperature": 10,
"Wind": -5
}
我总是推荐在应用程序中添加一些日志;这是成为一名优秀开发者的最佳实践之一。除此之外,我们还将更深入地了解 CloudWatch,这是 AWS 中的日志和监控服务。
使用 Lambda 和 S3 提交元数据解析应用程序
我们将在 Lambda 中执行另一个应用程序。在这种情况下,Lambda 将由 S3 触发。S3 是一个对象存储服务,您可以上传不同类型的文件,如图像、CSV 和文本文件。在这个例子中,当您将文件上传到 S3 时,该服务将触发 Lambda 函数,该函数反过来将提供有关文件元数据的信息。让我们一步一步实现应用程序:
-
登录 AWS 管理控制台。
-
在搜索框中输入
lambda并转到 Lambda 服务。 -
点击 创建函数。
-
在 创建函数 页面上,选择 从头开始创建,然后在 运行时 字段中选择 Python 3.9:

图 3.9 – 创建函数
- 在
S3TriggerLambdaReadRole中。该角色需要从 S3 服务中读取文件:

图 3.10 – 权限
- 点击页面底部的 创建函数 按钮:

图 3.11 – 创建函数
-
为了读取对象元数据,将以下代码片段粘贴到 Lambda 函数中,然后点击 部署 按钮:
import json import urllib.parse import boto3 print('Loading function') s3 = boto3.client('s3') def lambda_handler(event, context): #print("Received event: " + json.dumps(event, indent=2)) # Get the object from the event and show its content type bucket = event['Records'][0]['s3']['bucket']['name'] key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8') try: response = s3.get_object(Bucket=bucket, Key=key) print("CONTENT TYPE: " + response['ContentType']) return response['ContentType'] except Exception as e: print(e) print('Error getting object {} from bucket {}. Make sure they exist and your zbucket is in the same region as this function.'.format(key, bucket)) raise e
您也可以从 AWS 找到原始代码块:docs.aws.amazon.com/lambda/latest/dg/with-s3-example.xhtml。
Boto3用于管理 Python 的 AWS 服务。我们创建了一个 S3 客户端来访问和管理 S3 服务。
当你将文件放入 S3 时,应用程序会被触发。在代码片段中,代码从bucket变量中获取存储桶信息。urllib库允许你解析 S3 密钥,以便通过get_object方法检索 S3 对象。然后,我们打印内容类型。
你也可以在 Lambda 中看到最新的代码片段:

图 3.12 – 带有代码的 Lambda 函数
- 是时候创建一个 S3 对象了。在 AWS 服务搜索框中输入
s3:

图 3.13 – 搜索 S3
-
前往S3服务。
-
在S3服务中,点击创建****存储桶按钮:

图 3.14 – 创建 S3 存储桶
- 给 S3 存储桶起一个独特的名字。存储桶就像一个文件夹,你可以授权它上传文件,例如图片和 CSV 文件。请注意,存储桶名称应该是唯一的:

图 3.15 – 输入存储桶名称
现在,你应该能看到一个存储桶列表以及你创建的存储桶:

图 3.16 – 存储桶列表
我们已经创建了一个 S3 存储桶。现在,我们需要进行一些小配置,以便在文件上传到 S3 时触发 Lambda 函数:
- 点击存储桶链接。对于这个示例,我们需要点击inputforlambda123。它根据用户在最初输入的创建名称而变化:

图 3.17 – 存储桶列表
- 点击属性选项卡:

图 3.18 – 存储桶的功能
-
在属性页面的底部,找到事件****通知选项卡。
-
点击创建事件****通知按钮:

图 3.19 – 事件通知选项卡
- 在表单中,填写事件名称并在事件类型部分选择事件类型。对于这个示例,我们将选择所有对象创建事件选项。因此,当创建对象时,Lambda 函数将被触发:

图 3.20 – 事件配置
- 在页面底部,在目标部分下选择将被触发的 Lambda 函数,然后点击保存****更改按钮:

图 3.21 – 事件目标
你应该在 AWS 控制台中看到成功消息:

图 3.22 – 事件目标
你还可以通过 Lambda 双重检查事件是否已成功创建。当你点击相应的 Lambda 函数时,它会显示事件源:

图 3.23 – 带有触发器的 Lambda
目前,你可以在左侧看到作为触发器的 Lambda 函数。是时候测试我们的 Lambda 触发器了:
- 打开你创建的 S3 存储桶并导航到它。之后,点击上传按钮:

图 3.24 – S3 存储桶
- 点击添加文件按钮,允许您从您的计算机添加任何类型的文件。在这个例子中,我们上传了一个 RTF 文件。您也可以上传图片、PDF 或您想要的任何文件:

图 3.25 – S3 上传页面
以下截图显示您已成功将testTriggr.rtf文件上传到 S3。S3 还提供了有关文件的一些详细信息,例如类型、最新修改时间以及大小。如果您有更多文件,您可以在对象面板下看到文件列表:

图 3.26 – S3 文件列表
由于我们已经将文件上传到 S3,Lambda 函数应该可以工作。现在是时候检查它是否如此了。导航到 Lambda 函数:

图 3.27 – Lambda 函数
- 点击监控选项卡,您应该能够看到 Lambda 已被调用:

图 3.28 – Lambda 中的监控
我们也可以通过 CloudWatch 检查详细的日志。正如我们之前提到的,CloudWatch 可以帮助您检查 AWS 服务的日志。
- 在同一页面上,点击在 CloudWatch 中查看日志。您将被重定向到 CloudWatch 服务:

图 3.29 – CloudWatch 服务
- 当您点击日志流下的链接时,您将能够看到在 Lambda 函数中实现的日志:

图 3.30 – CloudWatch 日志
您还可以上传不同类型的文件以测试 Lambda 函数以及 CloudWatch 日志。
我们实现了一个简单的与 S3 集成的 Python 应用程序。当您将文件添加到存储机制中时,它会触发 Lambda 函数以处理该文件。正如您在这个示例中所看到的,您可以在不配置服务器和安装 Python 库的情况下测试您的 Python 代码。Lambda 自带日志记录、监控和对象存储功能。
摘要
在本章中,我们深入探讨了 Lambda,它是 AWS 中最重要的服务之一。Lambda 可以帮助您在不配置服务器的情况下部署和运行应用程序,从而简化部署时间。我们还提到了 S3 服务,它用于对象存储,并且与 Lambda 有良好的集成。在下一章中,我们将探讨如何在 AWS 服务器上配置服务器并运行 Python 应用程序。
第四章:在 EC2 服务器上运行 Python 应用程序
在本章中,我们将学习如何在弹性计算云(EC2)服务中运行 Python 应用程序。EC2 是一种 AWS 服务,允许你在云中配置服务器。你可以找到不同类型的服务器选项。你需要进行一些配置并在云中运行服务器。当你有 Lambda 时,你可能想知道为什么还需要 EC2。Lambda 非常有效,但有一个持续时间限制。如果你运行函数超过 15 分钟,它将给出超时。如果你的应用程序因为一个巨大的过程需要运行几个小时会发生什么?Lambda 不起作用,你需要自己的服务器。使用 EC2 的另一个原因可能是,如果你需要非常特殊配置或安装,需要在特定服务器上完成;你也需要服务器。基于这类需求,你需要在云中拥有自己的服务器。我们将在 EC2 中配置服务器并运行 Python 应用程序。
本章涵盖了以下主题:
-
什么是 EC2?
-
EC2 购买选项
-
EC2 实例类型
-
配置 EC2 服务器
-
连接到 EC2 服务器
-
在 EC2 服务器上运行简单的 Python 应用程序
-
在 EC2 服务器上使用 Python 应用程序处理 CSV 文件
-
AWS CLI
什么是 EC2?
AWS EC2 是一种提供安全且可扩展的云服务器机的服务。EC2 的主要优势是,从 AWS 管理控制台管理服务器非常容易。当你配置本地服务器时,配置安全策略、磁盘管理、备份管理等并不容易。AWS 加速了所有这些。当你配置 EC2 时,AWS 提供不同的合同供你选择,所有这些类型都会影响成本。
为了选择正确的服务,你需要了解你将要使用哪些服务,你需要多少资源,以及你真正需要哪种类型的存储。这些事情将帮助你降低成本并有效地使用 EC2。
EC2 购买选项
我们现在将探讨 EC2 合同的类型。
按需
在这个方案中,你不需要为特定的时间段签订合同。AWS 根据你使用服务器的时间来收费。你可以随时配置服务器、关闭它并释放服务器。这是一个按使用付费的模式。
保留
你需要与 AWS 签订 1-3 年的合同。需要注意的是,AWS 为保留承诺提供折扣。
Spot
让我们想象一下,你有一个具有灵活开始和结束时间的应用程序。你可以为服务器支付任何你愿意支付的价格。让我们想象一下,你有一个运行五小时的数据处理应用程序,运行时间并不重要。你可以在月初或月末运行;这不是问题。你可以配置一个 Spot 实例,这可以显著降低你的成本。
专用
这在您的组织拥有软件许可证并迁移到 AWS 时很有用。这些服务器仅用于您的组织。因此,您可以保留分配给公司的许可证。
EC2 实例类型
AWS 根据您的技术需求提供不同类型的服务器。服务器类型选择是管理您的预算并有效地使用 EC2 服务器最重要的因素之一。如果您需要使用内存处理应用程序,如 Spark,则最好配置一个内存优化服务器。另一方面,如果您需要一个需要更多存储的服务器,您可以使用存储优化服务器。
以下截图显示您可以在 AWS 中选择超过数百种服务器类型:

图 4.1 – EC2 实例类型 [来源 – aws.amazon.com/]
自动扩展
如果您需要一个集群环境,最好定义一个自动扩展策略来有效地管理资源。
让我们考虑一个每天运行一次以处理大量数据的批量处理作业。您配置了多台机器。但是当系统空闲时,您将不必要地被收费。然而,如果您定义了自动扩展策略,系统将在空闲时关闭。这种配置将降低您的成本。以下图显示了启动实例的最小大小和期望容量的最大大小:

图 4.2 – 自动扩展
自动扩展是 EC2 的最重要的功能之一。您需要考虑 EC2 的使用并配置自动扩展功能。
在本节中,我们了解了 EC2 的最重要的功能。在下一节中,我们将配置 EC2 服务器。
在 AWS 上配置 EC2 服务器
我们将逐步配置 EC2 服务器。有不同类型的 EC2 机器;我们将配置一个免费服务器。我建议您完成工作后终止服务器,因为我们只是将 EC2 用于学习目的。
要在 AWS 上配置 EC2 服务器,请执行以下步骤:
-
前往 AWS 管理控制台。
-
搜索 EC2 并访问标题为 EC2 的链接:

图 4.3 – AWS 管理控制台
- 为了启动一个实例,点击左侧的 实例,然后点击 启动实例:

图 4.4 – 创建实例
- 在新面板中,您可以给 EC2 实例命名。您可以看到我们将其命名为 Test_Python。在此启动页面上,AWS 推荐使用 Linux 机器,它位于免费层。免费层意味着您不需要向 AWS 支付费用。我们将继续使用该选项:

图 4.5 – 实例功能
- 您现在可以看到密钥对(登录)面板。密钥对用于通过 SSH 密钥以安全的方式连接到服务器。为了创建一个新的 SSH 密钥,请点击创建新 密钥对:

图 4.6 – 创建新的密钥对
- 我们需要给密钥对起一个名字。除此之外,您可以将密钥对类型和私钥文件格式保留为默认设置。点击创建 密钥对:

图 4.7 – 命名密钥对
一旦您点击创建密钥对,它将下载文件。请保留此文件;它将用于连接到机器。密钥对名称下拉菜单也将与您的创建一起选择。当您在上部区域创建新的密钥对时,新的密钥对名称将可见,您可以在下面的屏幕截图中看到。对于本例,我们的密钥对是key_for_test_python:

图 4.8 – 密钥对已就绪
在下一步中,我们将创建并分配一个虚拟专用云(VPC)和子网:

图 4.9 – VPC 和子网
VPC 允许 AWS 服务在逻辑隔离的网络中运行。它是保持服务安全的关键服务之一。您可以通过 VPC 配置轻松隔离服务器。以下图示说明了 VPC 和 EC2 的设置:

图 4.10 – VPC [来源 – https://aws.amazon.com/]
如您所见,一旦您将服务器之一添加到 AZ 2 的 VPC 子网中,这意味着 EC2 实例在逻辑上与其他实例隔离。因此,您可以添加访问控制以保持服务器安全。
子网也是 VPC 的一个重要组成部分。每个 VPC 都包含一个子网,它定义了 VPC 的 IP 范围。在以下图中,您可以看到每个子网的 IP 范围:

图 4.11 – 子网 [来源 – https://aws.amazon.com/]
我们已经了解了 VPC 和子网。现在,我们需要为 EC2 实例定义一个 VPC:
- 在AWS 管理控制台的搜索框中输入
VPC:

图 4.12 – AWS 管理控制台中的 VPC
- 点击创建 VPC:

图 4.13 – 创建 VPC
- 一旦您点击按钮,在 VPC 设置下,默认选择VPC 和更多。此选项允许您创建带有子网的 VPC,您可以在以下屏幕截图的右侧看到。使用此选项,您可以一起创建 VPC 和子网:

图 4.14 – 添加 VPC 详细信息
- 在此页面的底部,点击创建 VPC按钮:

图 4.15 – 创建 VPC
当您点击创建 VPC时,VPC 开始创建,您可以看到进度状态:

图 4.16 – VPC 创建过程
创建完成后,您可以在 VPC 控制台中看到 VPC 和子网:

图 4.17 – VPC 和子网
到目前为止,我们已经创建了一个 VPC 和一个子网。我们可以继续创建 EC2:
- 再次打开 EC2 启动页面。在这种情况下,VPC 和子网是默认选择的。点击 编辑:

图 4.18 – 网络设置
- 为了连接到该机器,我们需要选择一个公共子网并启用 自动分配公共 IP。您可以在 子网 下拉菜单中看到公共子网选项。通常,不建议将生产应用程序放在公共子网中。由于我们正在实施测试项目,我们可以继续这样做:

图 4.19 – 启用公共 IP
- 在页面底部,点击 启动实例:

图 4.20 – 启动实例
当我们点击左侧的 实例 链接时,我们能够看到我们创建的实例列表。恭喜,您已经创建了您的第一个服务器!

图 4.21 – 运行实例
您已成功以高效的方式创建了一个服务器。在接下来的部分,我们将连接到该服务器。
连接到 EC2 服务器
在这个阶段,我们将通过 SSH 连接到 EC2 服务器:
- 在实例列表中,有一个 连接 按钮。点击它:

图 4.22 – 连接实例
- 在 SSH 客户端 选项卡下,您可以看到连接到 EC2 机器的步骤:

图 4.23 – 连接步骤
- 在这个例子中,我将使用 Mac 终端来通过 SSH 连接到该机器。我在示例中复制了命令并将其粘贴到终端中。您也可以使用不同的 SSH 应用程序,如 PuTTY 和 WinSCP。请确保 PEM 密钥文件位于您执行命令的同一位置,或者您已设置正确的 PEM 密钥文件路径:

图 4.24 – 通过终端连接
- 输入
yes以确认与该机器的连接:

图 4.25 – 机器确认
恭喜!您已连接到该机器。

图 4.26 – 连接到机器
您已成功连接到服务器。在下一节中,我们将安装 Python。
在 EC2 服务器上运行简单的 Python 应用程序
我们将在 EC2 上运行一个简单的 Python 应用程序。首先,检查 Python 版本:
- 从命令行执行
python --version:

图 4.27 – 检查 Python 版本
- 在命令行上运行
python命令:

图 4.28 – 连接到 Python 编译器
- 运行一个简单的代码片段,例如
print 'Hello EC2',您将看到编译器执行该命令并打印它:

图 4.29 – 运行简单代码
我们已经执行了一个简单的 Python 应用程序。在下一节中,我们将在 EC2 上运行一个简单的项目。
在 EC2 服务器上使用 Python 应用程序处理 CSV 文件
在上一章中,我们在 Lambda 中处理了 CSV 文件。在本节中,我们将在 EC2 中运行相同的应用程序,但会有一些不同:
-
登录到 EC2 机器。
-
创建一个文件夹以保存要处理的
csv文件。 -
运行
mkdir csv命令以在 Ubuntu 上创建一个csv文件夹:

图 4.30 – 创建文件夹
在运行mkdir命令后,您可以使用ls命令来列出您的目录。如您所见,csv文件夹已创建。
- 通过执行
cd csv来定位csv文件夹:

图 4.31 – 定位 csv 文件夹
- 在 EC2 机器上创建一个示例
CSV文件。
我已经在以下 URL 中为您上传了一个示例 CSV 文件。运行以下代码以下载示例 CSV。wget命令允许您从特定链接下载文件:
wget https://raw.githubusercontent.com/PacktPublishing/Python-Essentials-for-AWS-Cloud-Developers/main/sample.csv

图 4.32 – 下载示例 CSV 文件
现在您已经下载了文件,您就可以创建 Python 代码来处理 CSV 文件。
-
运行以下代码以下载 Python 代码:
wget https://raw.githubusercontent.com/PacktPublishing/Python-Essentials-for-AWS-Cloud-Developers/main/fileprocessor.py

图 4.33 – 下载 Python 代码
以下代码非常简单;代码导入csv库并打印 CSV 中的前五行:

图 4.34 – Python 代码
- 下一步是运行 Python 代码以查看结果。执行
python fileprocessor.py以运行应用程序。运行应用程序后,您将看到结果:

图 4.35 – 运行 Python 代码
在本节中,我们看到了如何在 AWS EC2 服务器中运行一个简单的 Python 应用程序。现在,我们将涉及到 Python 的 AWS SDK。
AWS CLI
使用awscli访问 AWS 服务。在本节中,我们将安装awscli,然后配置 EC2 机器以从 EC2 上传文件:
- 为了从
awscli访问 S3,我们需要创建一个 IAM 角色并将其附加到 EC2。连接到 AWS 管理控制台,输入IAM,然后点击IAM:

图 4.36 – 控制台中的 IAM
- 在左侧面板上点击角色,然后点击创建角色:

图 4.37 – 创建角色
- 选择EC2作为通用用例,然后点击下一步:

图 4.38 – 选择服务
- 现在,我们需要给予所需的权限。由于我们将访问 S3,请勾选AmazonS3FullAccess复选框。此策略将允许用户上传和读取 S3 下的对象。选择策略后,您可以点击下一步按钮:

图 4.39 – 选择策略
- 给角色命名并点击创建角色按钮以创建角色:

(a)

(b)
图 4.40 – 命名角色
- 在附加角色的最后一步,点击 操作 下拉按钮,转到 安全,并选择 修改 IAM 角色:

图 4.41 – 添加角色
- 在下一屏幕上,选择 EC2ROLE,以便附加到 EC2,然后点击 更新 IAM 角色:


我们已创建并附加了所需的角色以登录到 EC2 机器:


现在,我们将文件上传到 S3。
在 EC2 机器下创建一个文件。touch 命令可以帮助您创建一个空文件。可选地,您也可以使用其他应用程序创建文件:

图 4.44 – 创建文件
我们可以通过 AWS CLI 将此文件上传到 S3。在上一章中,我们创建了一个 S3 桶。您可以使用此桶或创建一个新的桶来测试 AWS CLI S3 命令。让我们将文件上传到 S3 桶。上传文件的格式如下:
Format : aws s3 cp from to
aws s3 cp file.txt s3://inputforlambda123

图 4.45 – 上传文件
我们成功上传了文件。我们能够通过控制台检查 S3 桶是否已上传。从 S3 控制台打开桶并检查:


正如您所看到的,文件已上传到 S3 桶中。
当您想通过命令访问 AWS 服务并执行一些任务时,AWS 客户端非常有用。在本节中,我们学习了如何通过命令行将文件复制到 S3 桶中,这可以节省大量时间。
摘要
在本章中,我们学习了 AWS EC2 服务,该服务用于在云上创建服务器。您可以以高效的方式创建服务器,并用于不同的目的,例如应用程序服务器、Web 服务器或数据库服务器。我们还创建了一个 EC2 服务器作为示例,并在 EC2 上运行了我们的 Python 应用程序。在下一章中,我们将探讨如何通过 PyCharm 调试我们的 Python 应用程序。
第五章:使用 PyCharm 运行 Python 应用程序
在本章中,我们将使用 PyCharm 运行 Lambda 应用程序。在开发过程中,通过 PyCharm 运行 Lambda 应用程序既有用又实用,因为它包含代码编辑器、调试器和具有开发者友好的图形用户界面的常用开发工具。PyCharm 的这些功能帮助我们轻松地找到代码中的错误。
本章涵盖了以下主题:
-
安装 AWS Toolkit
-
配置 AWS Toolkit
-
在 AWS 中创建一个示例 Lambda 函数
-
使用 AWS Toolkit 运行 AWS Lambda 函数
安装 AWS Toolkit
在本节中,我们将安装 PyCharm 的 AWS Toolkit。AWS Toolkit 是 PyCharm 的一个扩展,用于开发、调试和部署您针对 AWS 的应用程序。让我们开始吧:
-
在您的计算机上打开 PyCharm。
-
从PyCharm下拉菜单中打开首选项并选择插件:

图 5.1 – 首选项
- 在搜索区域输入
AWS Toolkit并点击安装:

图 5.2 — 安装 AWS Toolkit
- 安装完成后,IDE 将要求您重新启动它。点击重新启动****IDE按钮:

图 5.3 – 重新启动 IDE
我们已在 PyCharm 中安装了 AWS Toolkit。作为下一步,我们将配置我们 AWS 账户的凭证。
配置 AWS Toolkit
我们将配置 AWS Toolkit 以将其连接到我们的 AWS 账户。我们将首先设置我们 AWS 账户的凭证:
- 重新启动 IDE 后,您将在页面右下角看到文本AWS:未选择凭证。点击此文本:

图 5.4 – AWS:未选择凭证
- 点击后,您将看到AWS 连接设置菜单出现。我们现在将配置凭证。为了让 IDE 连接到 AWS,我们需要提供 AWS 访问密钥和秘密密钥:

图 5.5 – 点击区域
在上一章第四章,在 EC2 上运行 Python 应用程序中,我们通过 IAM 服务创建了一个 S3User。对于我们的当前用例,我们将遵循相同的步骤来创建一个具有 Lambda 访问权限的用户:
- 在 IAM 控制台中,添加一个名为
ProgrammaticUser的用户并点击下一步:权限:

图 5.6 – 添加用户
- 在下一个面板中,选择AWSLambda_FullAccess并继续创建新用户。步骤与我们在上一章中创建用户时使用的步骤相同。点击下一步:标签并继续:

图 5.7 – 添加权限
- 我们现在将提供 AWS 连接设置的访问密钥 ID 和秘密访问密钥。再次打开 PyCharm 并点击编辑 AWS****凭证文件:

图 5.8 – 编辑凭证
- 在随后出现的对话框中点击创建按钮:

图 5.9 – 创建凭证文件
- 一旦您点击 创建,您将看到一个文件,您可以在其中输入凭证。将访问密钥 ID 和秘密访问密钥放入文件并保存:

图 5.10 – 编辑凭证文件
我们已经创建了 AWS 凭证并在 PyCharm 中进行了调整。作为下一步,我们准备创建 Lambda 函数。
在 AWS 中创建一个示例 Lambda 函数
在这一步,我们将创建一个 Lambda 函数,用于从 S3 读取并打印文件。在上一章中,我们学习了如何创建 S3 存储桶和 Lambda 函数。因此,在这里我们简要说明:
- 我们将把一个示例文件复制到 S3 存储桶:

图 5.11 – S3 中的文件
- 创建一个从 S3 读取文件的 Lambda 函数。我已经将其命名为
FileProcessing;然而,您可以根据自己的喜好给它起任何名字:

图 5.12 – Lambda 函数
- Lambda 函数创建完成后,我们将从图片下方的 GitHub 链接粘贴代码到 Lambda 中。在代码块中,我们将实现一个简单的函数来读取 S3 存储桶的内容并打印出来。您可以从我分享的 Figure 5**.13 后的 GitHub 页面获取代码块。总的来说,
s3.get_object方法使用bucket和key的给定参数读取文件。一旦您在 S3 中存储了文件,内容就在BodyJSON 文件中,最后一步是打印内容:

图 5.13 – Lambda 中的代码
以下 GitHub 链接包含 S3 读取应用程序的代码块:github.com/PacktPublishing/Python-Essentials-for-AWS-Cloud-Developers/blob/main/S3Reader.py。
- 点击 测试 按钮以检查 Lambda 函数是否正在运行。当您第一次点击 测试 按钮时,需要配置示例事件:

(a)

(b)
图 5.14 – 配置和测试 Lambda 函数
我们已经创建了 Lambda 函数。在下一节中,我们将通过 AWS Toolkit 在 PyCharm 中运行此函数。
使用 AWS Toolkit 运行 AWS Lambda 函数
在本节中,我们将通过 PyCharm 运行我们的 Lambda 函数。让我们按照以下步骤进行:
- 在 PyCharm 的左侧打开 AWS Toolkit,您将能够看到 AWS Lambda 服务中定义的 Lambda 函数。看到这一点意味着我们配置的连接是有效的:

图 5.15 – 打开 AWS Toolkit 菜单
在列表中,我们可以看到我们在 us-east-2 区域创建的函数。我们现在准备运行上一节中创建的 Lambda 函数。
- 右键点击FileProcessing,然后在出现的菜单中点击运行‘[远程] FileProcess...’按钮:

图 5.16 – 运行函数
当您点击链接时,AWS Toolkit 将通过 PyCharm 运行 Lambda 函数:

图 5.17 – 函数日志
函数运行后,PyCharm 中会出现一些 Lambda 日志。如您所见,这使得开发 AWS 的 Python 应用程序变得更加容易。您可以从本地机器测试此功能,而无需登录 AWS 管理控制台。
摘要
在本章中,我们学习了如何在 PyCharm 中安装和使用 AWS Toolkit。当你在 PyCharm 中以实际的方式实现和部署 AWS 服务时,这总是很有帮助。AWS Toolkit 具有 AWS 服务集成功能;因此,您无需使用 AWS 管理控制台,可以直接在本地机器上使用 PyCharm。在下一章中,我们将探讨如何将 Python 应用程序部署到 Elastic Beanstalk。
第六章:在 Elastic Beanstalk 上部署 Python 应用程序
在本章中,我们将学习如何在 Elastic Beanstalk 上部署 Python 应用程序。Elastic Beanstalk 是 AWS 服务,允许您在云中部署网络应用程序。基本上,您不需要配置服务器;Elastic Beanstalk 在后台配置基础设施并部署您的网络应用程序。Elastic Beanstalk 的另一个优点是在用户请求量大时能够扩展您的网络应用程序。
本章涵盖了以下主题:
-
什么是 Elastic Beanstalk?
-
创建一个 Python 网络应用程序
-
在 Elastic Beanstalk 上部署简单的 Python 网络应用程序
什么是 Elastic Beanstalk?
Elastic Beanstalk 是 AWS 服务,用于在云中部署网络应用程序。它支持多种网络应用程序框架,如 Python、Java、.NET、PHP、Node.js、Ruby 和 Go。一旦部署了您的应用程序,Elastic Beanstalk 就会管理基础设施以部署、运行、扩展和监控应用程序。
Elastic Beanstalk 的功能
让我们来看看 Elastic Beanstalk 的高级功能:
-
它支持监控和日志记录;因此,您可以轻松跟踪应用程序的行为。例如,如果应用程序崩溃,您可以通过 Elastic Beanstalk 进行检查。
-
它管理基础设施的更新。在某些情况下,您的应用程序应该使用 Python 或其他库的最新改进进行更新,而 Elastic Beanstalk 与您一起管理更新。
-
它管理向上和向下扩展的功能;因此,如果您的应用程序有太多的请求,它会添加更多资源,您的应用程序可以满足这些请求。另一方面,如果需求较少,它会减少资源,有助于降低成本。
-
它支持一些财务数据或受保护的健康信息标准;因此,您可以使用 Elastic Beanstalk 用于财务应用程序以及健康信息应用程序。
我们已经了解了 Elastic Beanstalk 的基本功能,现在我们将开始使用 Python 实现一个示例网络应用程序,并通过 Elastic Beanstalk 进行部署。
创建一个 Python 网络应用程序
我们将使用 Python 创建一个示例网络应用程序。为此,Flask将作为 Python 的网络应用程序框架。
Flask 是一个用 Python 编写的网络应用程序框架。它具有作为初学者开始实现网络应用程序所需的库。在下面的代码块中,您可以看到一个使用 Flask 的示例“Hello, World!”网络应用程序:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
代码导入 Flask 库,并在本地主机端口5000上运行应用程序。当您运行它时,您将在浏览器中看到“Hello World!”。
您还可以在以下网站上查看 Flask 框架:flask.palletsprojects.com/en/2.2.x/。
作为下一步,我们将部署一个 Python 网络应用程序到 Elastic Beanstalk。
在 Elastic Beanstalk 上部署 Python 网络应用程序
在本节中,我们将部署一个示例 Python 网络应用程序到 Elastic Beanstalk:
- 在 AWS 管理控制台搜索框中输入
Elastic Beanstalk并点击Elastic Beanstalk:

图 6.1 – AWS 控制台
你将看到 Elastic Beanstalk 的主页:

图 6.2 – Elastic Beanstalk
- 在左侧点击环境以创建一个新的 Python 网络应用程序,然后点击创建新 环境按钮:

图 6.3 – 环境列表
- 在下一个面板中,我们将选择我们想要的环境类型。由于我们想要部署网络应用程序,请选择Web 服务器环境:

图 6.4 – 选择环境
- 我将文件命名为
Python Web app。你可以将其命名为任何你想要的名称:

图 6.5 – 命名应用程序
- 在命名应用程序后,向下滚动并填写环境名称输入字段。请注意,这也可以由 AWS 控制台默认命名。你有权更改它。

图 6.6 – 环境名称字段
- 当你继续向下滚动时,还有一个输入字段需要填写 –
test-training,并通过点击检查 可用性按钮来检查其可用性:

图 6.7 – 命名域名
- 一旦找到可用的域名,向下滚动,找到平台面板。在这个面板中,我们需要选择网络应用程序框架。Elastic Beanstalk 支持不同的网络环境,如 Java、PHP、Node.js、Python 等。我们将选择 Python 平台来部署 Python 网络应用程序。根据你正在使用的 Python 平台,你可以从平台分支字段中选择它。在这个例子中,我选择了在 64 位 Amazon Linux 2 上运行的 Python 3.8版本。平台版本包含根据平台的一些更新和补丁。你可以使用最新版本;例如,如果 AWS 发现安全补丁,它将创建一个新版本:

图 6.8 – 选择平台
- 向下滚动,你将看到页面上的最新面板。在这个例子中,我们将进行示例应用程序并点击创建环境:

图 6.9 – 完成平台
- 一旦点击创建环境,你将看到日志。Elastic Beanstalk 创建平台并部署示例应用程序:

图 6.10 – 平台日志
等待几分钟,以便应用程序部署完成。一旦部署完成,你将看到以下屏幕:

图 6.11 – 应用程序部署
样例应用似乎已成功部署并正常运行。点击域名链接查看运行中的应用。在前面的屏幕截图中,域名链接是test-training.us-east-2.elasticbeanstalk.com:

图 6.12 – 应用
恭喜!您已将示例网络应用部署到云端。
在本例中,我们将示例应用部署到了 Elastic Beanstalk。该示例网络应用由 AWS 实现。作为下一步,我们将实现一个简单的 Python 网络应用,并通过 Elastic Beanstalk 进行部署:
-
在 AWS 中打开 Elastic Beanstalk 服务。
-
点击左侧的环境,查看环境列表。在上一节中,我们创建了一个环境并部署了示例应用。在本例中,我们将使用相同的 Python 网络环境:

图 6.13 – 环境
- 在列表中点击Pythonwebapp-env-1,因为它支持 Python 网络应用。根据命名约定,您的环境可能不同:

图 6.14 – Python 所有环境
- 点击上传和部署按钮以遵循部署过程:

图 6.15 – Python 网络环境
- 在上传和部署窗口中,点击选择 文件按钮:

图 6.16 – 部署环境
一旦点击选择文件按钮,你的 Python 网络应用将被部署到 Elastic Beanstalk。
如您在以下屏幕截图中所见,您将选择本地文件夹:

图 6.17 – 本地文件夹
您可以部署您喜欢的任何 Python 网络框架,例如 Flask、Django 等。
在本节中,我们学习了如何将自定义 Python 网络应用部署到 Elastic Beanstalk。
摘要
在本章中,我们了解了 AWS Elastic Beanstalk 服务以及如何在云中创建 Python 网络环境。当您在云中部署网络应用时,Elastic Beanstalk 非常有用。它具有可扩展性、日志记录和监控优势。在下一章中,我们将探讨如何通过 CloudWatch 监控我们的应用。
第三部分:实现 Python 的有用 AWS 服务
在本部分,您将深入了解其他 AWS 服务,用于 Python 编程,例如监控、创建 API、数据库操作和与 DynamoDB 的 NoSQL。
这部分包含以下章节:
-
第七章,通过 CloudWatch 监控应用
-
第八章,使用 RDS 进行数据库操作
-
第九章,在 AWS 中创建 API
-
第十章,使用 Python 与 NoSQL (DynamoDB)
-
第十一章,使用 Python 与 Glue
-
第十二章, AWS 参考项目
第七章:通过 CloudWatch 监控应用程序
在本章中,我们将学习 AWS 的一个重要服务之一,CloudWatch。CloudWatch 是一个无服务器服务,允许你在 AWS 内部收集和监控应用程序日志。它与大多数 AWS 服务有广泛的集成。当你开始使用任何 AWS 服务时,它有助于通过 CloudWatch 工具观察应用程序。
在本章中,我们将涵盖以下主题:
-
什么是 CloudWatch?
-
通过 CloudWatch 收集 Lambda 日志
-
CloudWatch 日志洞察
-
CloudWatch 警报
什么是 CloudWatch?
当你部署任何应用程序时,跟踪它是否满足关于可用性、性能和稳定性的预期是很重要的。可能应用程序中发生了问题。重要的是要注意,一些 AWS 服务可能处于关闭状态或运行不正确。从客户的角度来看,这是一个非常糟糕的体验,最好在客户发现这些问题之前观察这些问题。如果你通过 AWS 服务维护应用程序,你需要使用 CloudWatch 来监控你的应用程序以观察它们的行为。
CloudWatch 是 AWS 的一个监控服务;它提供了不同的功能来观察应用程序。CloudWatch 的功能如下:
-
从 Lambda 和 EC2 等 AWS 服务收集和存储日志。
-
提供一个仪表板来监控指标和日志。
-
创建警报的能力。例如,如果一个应用程序在服务器上消耗了大量的内存,你可以创建一个警报以便被通知。
-
关联不同指标的能力。例如,你可以聚合 EC2 内存日志和 CPU 日志,以获得更好的整体情况视图。
-
利用基于机器学习的 CloudWatch 异常检测功能检测异常行为。
通过 CloudWatch 收集 Lambda 日志
在这个主题中,我们将部署一个简单的 Python 函数,以便通过 CloudWatch 服务调查日志。让我们一步一步来做:
- 在 AWS 中创建一个 Lambda 函数。在第三章,我们介绍了 Lambda,Lambda 部署的基本步骤被解释了。因此,在这里,我们将提供 Lambda 步骤的摘要。Lambda 函数的名称是
TestLogs:

图 7.1 – 创建 Lambda 函数
- Lambda 函数创建了一个基本模板,如下所示:

图 7.2 – Lambda 模板
-
将以下代码块复制到处理器:
import json import os def lambda_handler(event, context): print('ENVIRONMENT VARIABLES') print(os.environ) return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
os将导入操作系统模块;因此,你可以通过日志打印(os.environ)变量查看环境变量。一旦我们添加了代码块,Lambda 代码应该如下所示:

图 7.3 – 带日志的 Lambda
- 接下来,点击部署按钮将最新的更改部署到 Lambda,并点击测试按钮。在测试 Lambda 函数后,你能够看到执行结果:

图 7.4 – 执行结果
让我们使用 CloudWatch 服务来调查日志:
- 从 AWS 管理控制台打开 CloudWatch 服务:

图 7.5 – CloudWatch 服务
- 在左侧面板的 日志 下拉菜单中点击 日志组:

图 7.6 – CloudWatch 日志组
- 一旦点击 日志组,你将看到一个列表。这个列表代表了创建日志的运行中的 AWS 服务。在这个列表中,找到你运行的 Lambda 函数:

图 7.7 – 日志列表
- 点击 /aws/lambda/TestLogs。新页面包含 Lambda 创建的日志。你可以看到一个日志流。当 Lambda 函数运行时,日志将创建在这个列表中。列表的顶部,你可以看到最新的日志:

图 7.8 – Lambda 的日志页面
让我们点击 日志流 下的最新链接:

图 7.9 – 日志流
点击链接后,你可以看到 Lambda 创建的详细日志:

图 7.10 – Lambda 日志
这个列表显示了日志的概览。当你点击左侧的向下箭头时,面板将展开,你可以调查详细的日志。在 Lambda 中,我们已经记录了 Lambda 的操作系统变量。因此,你会看到一些详细信息,例如区域、内存大小和语言:

图 7.11 – 日志详情
恭喜!你现在可以通过 CloudWatch 服务调查 Lambda 日志了。使用 CloudWatch 调查任何 AWS 服务的日志都非常简单。在下一个主题中,我们将学习一些关于过滤日志的小技巧。
CloudWatch 日志洞察
在这个主题中,我们将查看 日志洞察。如果你有大量的日志行,搜索和找到你正在寻找的相应日志并不容易。对于这个用例,日志洞察就派上用场了。CloudWatch 日志洞察允许你使用过滤功能搜索日志。让我们看看日志洞察如何帮助我们搜索日志:
- 在左侧面板的 日志 下拉菜单中点击 日志洞察:

图 7.12 – 日志洞察
- 选择你想要调查的日志。在上一个示例中,我们运行了 TestLogs Lambda 函数,我这里也选择了那个:

图 7.13 – 日志洞察窗口
- 一旦选择,你就可以看到默认的查询:

图 7.14 – 日志洞察过滤器
- 点击
fields表示将要列出的列,而sort关键字表示排序方法,你可以使用limit关键字只查看 20 条记录:

图 7.15 – 日志
让我们在消息中添加一个额外的过滤器来搜索关键词。你可以使用以下查询格式:
fields @timestamp, @message
| filter @message like /AWS_DEFAULT_REGION/
| sort @timestamp desc
| limit 20
使用此查询,我们搜索包含 AWS_DEFAULT_REGION 的日志。粘贴并再次点击 运行查询。查询运行后,您将看到消息行减少:

图 7.16 – 过滤后的日志
当您展开消息时,您将找到您要查找的内容——在本例中是 AWS_DEFAULT_REGION:

图 7.17 – 详细日志
如您所见,日志洞察功能在搜索和过滤大量日志块中的日志方面非常有帮助。在下一个主题中,我们将探讨如何创建一个警报。
CloudWatch 警报
AWS 拥有超过 100 个服务,控制所有服务的行为了解起来并不容易。如果您的一些 AWS 服务达到特定的指标,您需要得到通知。在第四章中,我们介绍了如何使用 EC2 服务创建服务器。例如,您为 EC2 服务定义了一个服务器,有时其 CPU 使用率会超过 90%,导致一些性能问题。另一个例子是,如果您在 AWS 中超过特定成本,可以添加通知。对于这类场景,您可以定义一个指标,如果达到该指标,您将通过电子邮件收到通知。
在这个主题中,我们将创建一个警报,以在一个月内 AWS 成本超过 10 美元时通知我们。让我们实现这个应用程序:
- 在 CloudWatch 窗格下的 警报 下拉菜单中点击 在警报中:

图 7.18 – 在警报中
- 点击 创建警报。您可以选择右侧或底部的按钮:

图 7.19 – 创建警报
- 点击 选择指标 按钮:

图 7.20 – 选择指标
- 一旦您点击 选择指标 按钮,您将能够看到一系列用于缩小指标范围的类别:

图 7.21 – 指标类型
在此列表中,您可以查看不同类型的指标。计费允许您定义与成本相关的指标,而Lambda允许您定义与 Lambda 相关的指标。在这个例子中,我们将为我们的 AWS 账户定义一个月度预算。目标是如果我们的月度成本超过特定阈值,则接收警报:
- 从类别中选择 计费:

图 7.22 – 计费类别
- 点击 总估计费用。目的是如果您的总月度 AWS 成本超过目标预算,则定义一个指标:

图 7.23 – 总估计变化
- 从列表中选择 USD 并点击 选择指标。货币类型可能因您的 AWS 账户而异:

图 7.24 – 货币类型
在下一屏幕上,转到定义阈值值字段。对于此示例,我添加了10,这意味着如果一个月的总成本超过 10 美元,则会激活警报。在此面板中,您还可以更改货币类型、计算类型等。在这种情况下,最重要的值是定义目标预算以接收警报。完成此操作后,点击下一步按钮:

图 7.25 – 阈值值
- 在下一面板中,我们将定义警报端点。在这种情况下,我们选择了创建新主题单选按钮。简单通知服务(SNS)用于在服务和最终用户之间进行通信。这是在发送通知到以下 SNS下的一个选择。一旦我们选择创建新主题,我们就可以在以下电子邮件端点将接收通知…部分定义一个电子邮件地址。SNS 是一个访问点,用于过滤消息以便将它们发送到不同的订阅者,如 Lambda 或电子邮件。您可以保留主题名称不变;它与 SNS 主题名称相同。完成操作后,点击创建主题:

图 7.26 – 接收器
- 点击创建主题后,AWS 将创建一个端点以发送电子邮件:

图 7.27 – 创建端点
现在,您有一个端点,可以通过点击下一步按钮继续操作。
- 下一步是定义警报名称。在这种情况下,我将其命名为
BillingAlarmGreaterThan10,因为如果计费成本超过 10 美元,则会发送警报:

图 7.28 – 命名警报
- 下一步是检查输入并点击创建警报:

图 7.29 – 创建警报
- 如果您成功创建了警报,您将被重定向到警报列表以查看您创建的警报。我们可以如下查看警报:

图 7.30 – 计费警报类型
在本主题中,我们创建了一个警报。如果需要为 AWS 服务行为创建通知,警报非常有用。此示例将在达到定义的成本限制时发送通知。
摘要
在本章中,我们学习了 AWS CloudWatch 服务以及如何在 AWS 中调查服务日志。CloudWatch 对于日志记录非常有用;它还允许您定义一些指标和警报以监控服务。在下一章中,我们将查看 AWS 中的数据库操作。
第八章:使用 RDS 进行数据库操作
在本章中,我们将学习Amazon 关系数据库服务(Amazon RDS)的基础知识,并创建一个 RDS 实例以进行数据库操作。您可以使用 RDS 在 AWS 中创建最流行的数据库。您可以在云上创建具有可伸缩能力的 Oracle、MySQL 或 MS SQL 数据库。通常,当您需要创建数据库时,您必须使用本地系统管理基础设施。管理硬件和基础设施、安装数据库以及监控可能需要大量努力来设置。AWS 允许您选择您想要的数据库类型,然后通过简单的点击按钮创建它——这就是全部:

图 8.1 – 点击创建
在本章中,我们将使用 Python 创建数据库并执行一些操作。本章涵盖了以下主题:
-
RDS 的功能
-
配置 RDS
-
连接到 RDS
-
在数据库中创建表
-
使用 Python 进行数据库操作
-
密钥管理器
RDS 的功能
RDS 具有不同的功能,便于数据库的创建和维护。让我们看看最重要的功能:
-
易于使用:您可以通过 AWS 控制台轻松创建和维护 RDS。它还允许我们使用一些 API 功能进行一些程序化操作。例如,您可以创建和扩展数据库,并监控其使用情况。
-
可伸缩性:RDS 支持可伸缩性;如果需要支持更多容量,您可以轻松扩展数据库。然而,如果容量低于您的估计,您可以通过缩容请求来减少容量以降低成本。另一个选项是 Amazon Aurora,它允许云用户实现更高性能密集型应用,这些应用支持关系数据库管理系统(RDBMS)。
-
备份:在基础设施出现任何问题时,数据库备份非常重要。在某些情况下,备份用于创建新的数据库。RDS 支持手动和自动备份。您可以在任何时候创建快照,或者 RDS 可以定期进行快照。通常,快照存储在 AWS S3 桶中。
-
多可用区部署:RDS 可以在不同的位置提供可用性,以提高可用性。如果某个位置的基础设施出现故障,RDS 可以在另一个位置提供服务以提高可用性。这种方法适用于使用云数据库的关键应用。
-
监控:对于关键应用,监控非常重要。您可以跟踪数据库的行为,并查看是否存在任何问题。RDS 有一个支持监控的功能。例如,您可以跟踪数据库中何时发生 I/O 问题,并采取适当的行动。
-
成本选项:AWS 为使用数据库提供了不同的定价选项。其中一种流行的选项是按量付费选项。在此选项中,你不需要承诺任何长期合同。你只需为特定时期内使用的资源付费。因此,你可以按月支付账单。在其他选项中,你与 AWS 签订了一段时间的合同;然而,在这种情况下,即使你不使用数据库,你也必须为合同付费。
配置 RDS
在本节中,我们将创建一个云上的示例关系型数据库。为了在 AWS 上配置 RDS,执行以下步骤:
- 打开 AWS 控制台,在搜索框中输入
rds:

图 8.2 – 控制台上的 RDS
- 在左侧面板中点击数据库以查看数据库列表。要创建新数据库,点击创建数据库:

图 8.3 – 数据库列表
- 在新面板上,点击创建数据库,并填写新数据库所需的信息。RDS 支持多种数据库类型,如 Amazon Aurora、MySQL、MariaDB、PostgreSQL、Oracle 和 Microsoft SQL Server。在本例中,我们将使用MySQL:

图 8.4 – MySQL 选择
- 选择MySQL后,向下滚动并选择正确的 MySQL 版本。在本例中,我们将使用最新版本之一,MySQL 8.0.28:

图 8.5 – 模板选择
-
模板对于在不同的环境中工作很有用。当你选择生产模板时,它为你提供高可用性。在本例中,我们将选择免费层模板以避免任何费用。
-
向下滚动并填写设置详细信息。在设置面板中,你需要填写数据库标识符、用户名和密码:

图 8.6 – 设置
DB 实例标识符用于在云中表示数据库名称。你还可以输入主用户名和主密码详细信息。这些凭证对于安全性很重要。
向下滚动并填写有关存储和实例配置的详细信息。
- 在实例配置中,在DB 实例类别中,你可以选择处理器和内存类型。由于我们是为教育目的创建它,你可以选择具有基本硬件特征的简单实例类型。对于存储,你也可以保留 AWS 推荐的内容或使用最小值。
在存储类型中,你可以选择磁盘类型。在分配存储中,你必须指定磁盘的限制。对于本例,我们选择了200 GiB。如果需要扩展磁盘,你可以勾选启用存储自动扩展复选框。
当磁盘扩展时,你在1000中输入的值:

图 8.7 – 实例配置(第一部分)
向下滚动并填写有关连接性的详细信息。
- 在第一个选项中,AWS 询问你是否想连接到 EC2。对于此示例,我们不需要连接到 EC2,所以我们选择不连接到 EC2 计算资源。(在设置数据库后,我们将使用 Lambda 进行数据库操作。)RDS 需要在 VPC 中创建,所以在虚拟私有云(VPC)中,我们选择创建新的 VPC,它将自动创建一个 VPC。
另一个选项是选择DB 子网组。这允许你定义哪个 IP 组将要连接到数据库。在安全方面也很重要。你可以使用此选项限制 IP 范围。
公共访问允许你通过互联网启用访问。对于此应用程序,我们将使用公共访问。然而,当你设置生产数据库为公共时,你需要小心。
连接性的最后一个选项是选择VPC 安全组(防火墙)中的组。在这种情况下,你可以定义与 RDS 连接的相同安全组:

图 8.8 – 实例配置(第二部分)
滚动并填写数据库端口信息。
- MySQL 的
3306,但你也可以更改它:

图 8.9 – 数据库端口
滚动并填写认证详细信息。
- 数据库认证用于定义密码管理的方法。你可以仅使用密码,密码与 IAM 认证的组合,或密码与 Kerberos 认证的组合进行连接。让我们保持简单,只使用密码认证:

图 8.10 – 数据库认证
滚动并填写有关数据库创建的详细信息。
- 作为最后一步,你可以保持其他值不变。点击创建数据库并继续创建数据库:

图 8.11 – 数据库创建
这将带你去数据库列表,在那里你可以看到数据库正在创建中:

图 8.12 – 正在创建状态的数据库列表
经过一段时间,你可以看到数据库已准备好使用:

图 8.13 – 可用状态的数据库列表
我们将从我们的电脑连接。为了连接到数据库,我们需要启用 AWS 外部的连接。
- 点击连接性与安全选项卡。你会看到VPC 安全组;点击链接:

图 8.14 – 安全组
- 在新面板中,点击编辑入站规则。这将允许我们定义入站连接:

图 8.15 – 入站规则
- 为 MySQL/Aurora 类型添加规则并点击保存,这在下面的图中没有显示,但位于页面底部:

图 8.16 – 添加规则
这些步骤允许我们接受 AWS 外部的连接。因此,我们将通过本地电脑连接到 AWS。
恭喜!您已在云上创建了数据库。正如您在步骤中所看到的,在云上创建数据库既简单又高效。让我们在下一个主题中连接到数据库。
连接到 RDS
在本节中,我们将从数据库查看器之一连接到 RDS。为此,您可以安装一个免费的数据查看器;我将使用 MySQL 查看器。要安装 MySQL 查看器,请执行以下步骤:
-
在主页面上点击立即下载:

图 8.17 – MySQL Workbench
- 在下一页上点击下载:

图 8.18 – MySQL Workbench 下载
-
双击并安装下载的包,安装将完成。
-
安装完成后,点击+符号以连接到新数据库:

图 8.19 – 新连接
- 打开 AWS 并复制连接详细信息:

图 8.20 – 端点名称
- 在 MySQL Workbench 中填写端点和密码详细信息,然后点击测试连接:

图 8.21 – 测试连接
点击测试连接后,您将能够看到连接:

图 8.22 – 连接成功
干得好!我们已经成功从 MySQL Workbench 连接到了 RDS 数据库。让我们在下一个主题中创建一个表并插入一些记录。
在数据库中创建表
我们已在云上创建了一个数据库,并通过 MySQL Workbench 进行了连接。作为下一步,我们将通过 MySQL Workbench 创建一个表:
-
通过 MySQL Workbench 连接到数据库。
-
使用以下命令创建一个数据库,并点击如图所示的闪电符号:
CREATE DATABASE address;

图 8.23 – 创建数据库
- 执行
USE address命令以切换数据库:
USE address;

图 8.24 – USE address
- 创建一个地址表:
CREATE TABLE address (id INT, address VARCHAR(20));

图 8.25 – 创建表
我们已创建了一个地址表,接下来我们将向表中插入数据。
- 执行以下脚本以向表中插入数据:
INSERT INTO address (id,address) VALUES(1,"Germany");
INSERT INTO address (id,address) VALUES(2,"USA");

图 8.26 – 插入脚本
该表有两行,我们将从 Lambda 函数中读取这些值:

图 8.27 – 选择脚本
在本主题中,我们创建了一个简单的表并插入了记录。插入是通过 MySQL Workbench 完成的,但您也可以使用其他数据库工具。作为下一步,我们将使用 Python 读取记录。
使用 Python 进行数据库操作
在本节中,我们将使用 Python 读取一个表。为了执行 Python 函数,我们将在本地计算机上使用 PyCharm。执行以下步骤:
-
打开 PyCharm 或你喜欢的 IDE。
-
我们将安装 MySQL Connector 到 PyCharm。MySQL Connector 将用于从 Python 进行数据库操作。在 PyCharm 中,选择文件 | 新建项目设置 | 新项目…的首选项:

图 8.28 – 首选项
- 在面板中,选择Python 解释器:

图 8.29 – Python 解释器
- 要添加一个新包,点击+符号:

图 8.30 – 添加包
- 在即将出现的面板中,输入
mysql-conn来安装mysql-connector。你将能够看到mysql-connector。点击安装包来安装它:

图 8.31 – 安装 mysql-connector
- 一旦安装,你将能够在已安装的包中看到mysql-connector:

图 8.32 – 包列表
-
复制并粘贴以下代码以从数据库读取数据:
import mysql.connector #rds settings rds_host = "database-1.********.us-east-1.rds.amazonaws.com" name = "**min" password = "*****234" db_name = "address" if __name__ == '__main__': conn = mysql.connector.connect(host=rds_host, user=name, passwd=password, database=db_name, port=3306) cursor = conn.cursor() cursor.execute("select * from address") data = cursor.fetchall() print(data)
上述代码块通过执行select * from address查询连接到 RDS 数据库并从地址表读取。对于rds_host、name和password,请填写您的数据库主机和凭证:

图 8.33 – 数据库查询
- 当你点击运行时,你可以看到数据库的结果:

图 8.34 – 数据库结果
恭喜!你现在能够通过 Python 读取 AWS 数据库中的数据。你还可以通过实现insert和update查询来扩展你的查询。在本主题中,我们学习了如何通过 Python 进行数据库操作。
秘密管理器
秘密管理器是 AWS 的一项服务,允许你管理和检索数据库凭证,这在使用数据库时可能很有帮助。让我们学习如何使用秘密管理器:
- 通过控制台打开秘密管理器:

图 8.35 – 打开秘密管理器
- 点击存储新 秘密按钮:

图 8.36 – 存储新秘密
- 选择你想要存储秘密的秘密类型,并填写用户名和密码。在这种情况下,我们将选择database-1实例。填写详细信息后,点击下一步:

图 8.37 – 填写详细信息
- 你需要在秘密 名称文本框中为即将出现的路径命名:

图 8.38 – 命名秘密
- 在下一屏,你将看到使用此秘密与不同编程语言一起使用的选项。点击存储以完成:

图 8.39 – 存储秘密
- 作为最后一步,你将在列表中看到秘密:

图 8.40 – 秘密列表
恭喜!你已经学会了如何在云中安全地创建和存储秘密。
摘要
在本章中,我们学习了 AWS RDS,这是一种用于在云上创建关系型数据库的工具。你可以以高效的方式创建你的数据库。需要注意的是,你有创建不同数据库的可能性,包括 MySQL、Microsoft SQL 和 PostgreSQL。在本章中,我们在云上创建了一个 RDS 实例,并运行了一个 Python 应用程序来进行读取操作。在下一章中,我们将探讨如何在 AWS 中创建 API。
第九章:在 AWS 中创建 API
在本章中,我们将学习如何通过 API 网关创建应用程序编程接口(API)。API 网关是一个 AWS 服务,允许你创建和维护 API。使用 API 网关服务,你不需要配置服务器;AWS 在后台管理它。此外,API 网关帮助你监控传入和传出的请求。API 网关的另一个优点是在用户请求量巨大时扩展你的 API 服务。
本章涵盖了以下主题:
-
什么是 API 网关?
-
使用 API 网关创建 API
什么是 API 网关?
API 网关是一个 AWS 服务,用于创建、维护和发布 API。API 网关支持多种 API 协议,如RESTful(也称为 REST API)和WebSocket。
API 网关是后端服务的单一入口点。正如你在以下架构中可以看到的,API 网关从客户端接收请求,并将传入的请求与微服务、数据库、AWS Lambda 或其他 AWS 服务集成:

图 9.1 – API 网关架构
现在我们对 API 网关有了很好的了解,让我们来看看它的功能。
API 网关的功能
API 网关的功能如下:
-
它支持不同的协议,例如 RESTful 和 WebSocket。
-
你可以监控传入和传出的 API 请求,这增强了服务的可见性。
-
你可以轻松创建和维护 API。它可以在 AWS 管理控制台或 AWS CLI 中创建。
-
对于云服务以及 API 来说,安全性都很重要。你可以创建一个密钥来启用对 API 的安全访问。此外,你可以添加 SSL 证书来验证请求。
-
它与 AWS 服务内置集成。当你实现一个 API 时,你可以轻松地将其与 AWS 服务集成。
-
它是一个可扩展的服务,当你有更多请求时,它会添加更多资源。例如,在黑色星期五,电子商务网站上有更多的负载。在这些情况下,API 网关会自动扩展你的 API 请求。在这种情况下,你还可以定义一个跨源资源共享(CORS)策略作为安全功能,该策略控制 HTTP 请求。
在本节中,我们探讨了 API 网关的基本功能,现在我们将开始实现示例 API 应用程序。
使用 API 网关创建 API
我们将创建一个简单的 API,该 API 接受来自客户端的请求。API 接受两个数字,在 Lambda 函数中将两个数字相加,并返回计算值。AWS Lambda 将通过 Python 实现。你可以在以下架构中看到高级流程:

图 9.2 – 数据流
我们将从创建 Lambda 函数开始。在创建 Lambda 函数之后,API 网关将与 Lambda 集成进行设置。
让我们一步一步地创建 Lambda 函数:
- 打开控制台并导航到 AWS Lambda 页面:

图 9.3 – Lambda 函数
- 创建一个新的 Lambda 函数。让我们称它为
SumUpLambda:

图 9.4 – 创建新的 Lambda 函数
- 点击 创建函数 并等待几秒钟,直到函数创建完成:

图 9.5 – 点击创建函数
几秒钟后,你会看到已经使用模板代码创建了 Lambda 函数:

图 9.6 – Lambda 模板
让我们创建一个求和两个值的 Lambda 函数:
import json
def lambda_handler(event, context):
number1 = event['Number1']
number2 = event['Number2']
sum = number1 + number2
return {
'statusCode': 200,
'Sum': sum
}
此代码片段接受两个参数,例如 Number1 和 Number2。Lambda 函数计算两个值的和,并返回状态码和求和的值。当我们从 API 调用此函数时,它返回求和值以及 statusCode。
将此代码块粘贴到 Lambda 函数中:

图 9.7 – 实际 Lambda 代码
现在,让我们按照以下步骤进行:
- 点击 测试。一个新的面板打开,其中 Lambda 请求一个测试参数:

图 9.8 – 测试事件
-
如前图所示,你可以粘贴以下 JSON 来查看在集成 API 之前 Lambda 函数是否运行正常:
{ "Number1": 10, "Number2": 15 } -
点击 保存,位于 事件 JSON 面板下:

图 9.9 – 点击保存按钮
- 通过点击 部署 来部署更改:

图 9.10 – 部署 Lambda
Lambda 部署后,我们将集成 API Gateway 与 AWS Lambda。Lambda 将作为 API Gateway 的后端。
让我们一步一步地创建一个 API:
- 打开控制台并搜索
api gateway:

图 9.11 – 控制台
- 在主屏幕上,选择 REST API,然后点击 构建:

图 9.12 – REST API
- 你现在将看到一个需要填写的新屏幕。在 创建新 API 部分中,我们将选择 新 API。本节中的其他选项允许你创建示例 API 或导入预定义的 API。在 设置 部分中,我们将添加 API 名称 和 描述 详细信息。在 端点类型 下拉列表中,我们将选择 区域,用于创建在同一区域可访问的 API:

图 9.13 – API 创建表单
- 一旦你点击 创建 API(如前图所示),你将被带到一个新的页面,允许你定义自定义 SumUp API 的详细信息:

图 9.14 – API 表单
- 现在,我们将定义 API 的详细信息。点击 操作 下拉菜单并选择 创建方法:

图 9.15 – 创建方法
- 当我们创建一个方法时,我们选择 API 类型为 POST:

图 9.16 – 选择 POST
在实现 API 时,你可以选择 API 类型。以下是最常用的 API 类型:
-
GET用于从源检索数据。
-
来自 Lambda 的
SumUp。 -
PUT用于更新源中的数据。
-
DELETE用于删除源中的数据。
- 当你选择POST时,你需要选择集成类型。在这个例子中,我们将选择Lambda 函数集成类型:

图 9.17 – 设置集成类型
- 选择已实现的SumUpLambda函数,并点击保存,这在以下图中没有显示,但位于页面底部:

图 9.18 – 选择 Lambda
- 当你点击保存时,它会要求确认以允许所需的权限。点击确定,它将创建权限:

图 9.19 – 权限
设置权限后,你可以看到 API 的数据流:

图 9.20 – API 流程
现在,我们需要添加一个 CORS 策略。CORS 是一种安全策略,允许特定的源(域名或端口)浏览你的资源。让我们启用一个 CORS 策略:
- 点击操作下拉按钮以列出可用的操作,然后点击启用 CORS:

图 9.21 – 操作列表
-
填写表格并点击启用 CORS 并替换现有的 CORS 头。你可以保留表单详情不变。该表单定义了以下内容:
-
通过选择方法允许哪些方法访问 API
-
通过Access-Control-Allow-Headers需要哪些请求头
-
哪些源能够通过Access-Control-Allow-Origin调用 API
-
通过选择默认 4XX或默认 5XX端口来选择网关响应类型。你可以在这里看到列表:
docs.aws.amazon.com/apigateway/latest/developerguide/supported-gateway-response-types.xhtml。
-

图 9.22 – 启用 CORS
恭喜!你已经成功创建了 Lambda 函数和 API 网关。下一步是测试 API。
让我们测试 SumUp API:
- 点击流程中的测试按钮:

图 9.23 – 测试 API
-
在请求体字段中输入以下代码以添加 Lambda 的参数:
{ "Number1": 10, "Number2": 15 } -
点击测试并查看结果:

图 9.24 – 添加参数
这里是结果:

图 9.25 – API 响应的结果
当你检查日志时,你可以看到 API 响应的结果。正如你所看到的,值的总和是25。
在这个主题中,我们实现了一个使用 Python 在 Lambda 代码中使用的 API。正如你所看到的,在 AWS 中创建 API 是一个简单的解决方案。这样,你可以专注于后端实现,而不是关注基础设施。
摘要
在本章中,我们学习了如何使用 AWS API Gateway 服务以及如何创建一个后端服务为 Python Lambda 的 API 网关。当您需要通过 Python 实现带有后端支持的 API 服务时,API Gateway 非常有用。它具有可扩展性、日志记录和监控优势。在下一章中,我们将探讨 DynamoDB 和 NoSQL 的基础知识。
第十章:使用 Python 与 NoSQL(DynamoDB)
在本章中,我们将学习如何使用 DynamoDB 创建 NoSQL 数据库。在创建数据库后,我们将使用 Python 在 DynamoDB 中执行数据库操作。NoSQL是一种数据库类型,它比关系型数据库更灵活地管理数据。在关系型数据库中,有表和预定义的数据类型,可用于数据库操作。在 NoSQL 中,你可以根据 NoSQL 数据库存储 JSON、原始数据或键值数据。让我们深入了解 NoSQL 数据库。
本章涵盖了以下主题:
-
什么是 NoSQL 数据库?
-
什么是 DynamoDB 数据库?
-
使用 Python 进行 DynamoDB 操作
什么是 NoSQL 数据库?
NoSQL 数据库用于存储非结构化数据。这个想法来源于大数据;大多数应用程序和设备都会创建数据,如果你在之后存储和处理这些数据,那么这些数据就很有价值。数据的量每天都在增加,我们需要存储这些数据。想想新汽车;它们有不同设备来存储数据。我们可以将这个例子扩展到家电、社交媒体等等。一般来说,关系型数据库适用于结构化数据以及达到数百万级别的记录级别。因此,当涉及到处理数百万条记录以及非结构化数据时,NoSQL 数据库很有用。
下图显示了如何生成不同的数据源以存储在 NoSQL 数据库中。我们有社交媒体资源和汽车和飞机中的机器,它们生成不同的数据格式:

图 10.1 – NoSQL
有不同类型的 NoSQL 数据库。
键值数据库
在这种 NoSQL 数据库类型中,你可以根据键访问数据。例如,你有一个客户 ID 作为键,地址、年龄和家庭信息作为值。当你需要访问值时,只需提供键作为查询参数:

图 10.2 – 键值数据库
键值数据库很有用,甚至可以处理数十亿条记录。我们将在下一节中研究 DynamoDB,它是一种键值数据库。
文档数据库
文档数据库是另一种可以存储非结构化数据(如 JSON)的 NoSQL 数据库。如果你需要存储非结构化的大数据并使用不同的参数检索数据,它很有用:

图 10.3 – 文档数据库
你可以如下看到示例 JSON:
{
"employee": {
"name":"Jack",
"age":25
}
}
还有其他类型的 NoSQL 数据库,例如图数据库和列数据库,但在这本书中我们不会重点介绍它们。我建议在这里阅读更多内容:en.wikipedia.org/wiki/NoSQL。
我们已经学习了 NoSQL 数据库的定义,并查看了一些 NoSQL 数据库的类型。接下来,我们将专注于 DynamoDB,它是一种键值数据库。
什么是 DynamoDB 数据库?
DynamoDB 数据库是一个由 AWS 管理的键值 NoSQL 数据库。当您使用 DynamoDB 时,您不需要创建新的数据库。您也不需要配置服务器;它由 AWS 完全管理。这是最受欢迎的基于云的 NoSQL 数据库之一,如果您使用基于键的访问,性能非常好。主要优势是您可以以毫秒级的延迟访问数十亿条记录。
这些是 DynamoDB 的功能:
-
由 AWS 完全管理
-
无配置的自动扩展
-
与其他 AWS 服务内置集成
-
支持监控和日志记录
-
支持数据库备份和恢复
-
按使用付费模式 – 您为使用此服务所支付的金额付费
创建 DynamoDB 数据库
在本子主题中,我们将创建一个 DynamoDB 数据库。让我们一步一步地遵循说明:
- 在搜索框中输入
DynamoDB,然后点击服务部分下出现的DynamoDB选项:

图 10.4 – 控制台搜索
- 在左侧点击表,然后点击创建 表按钮:

图 10.5 – 创建表
- 填写表名、分区键和排序键详细信息以创建表:

图 10.6 – 表详情 – 第一部分
表名代表表的名称。我们将创建一个示例客户表。
分区键将被用作主键。DynamoDB 是一个键值数据库;因此,您可以根据键轻松搜索数据。在这种情况下,我们将使用customer_id作为主键。
DynamoDB 允许您使用分区键以外的排序键进行搜索。我们将在排序键字段中使用customer_mail。
- 向下滚动并填写容量模式、读取容量、写入容量、自动扩展、本地二级索引和全局二级索引。对于输入,保持以下默认值不变:

图 10.7 – 表详情 – 第二部分
容量模式定义了表的预留容量。如果您选择预配模式,AWS 会为查询预留您预定义的容量。另一个选项是定义按需以进行未计划的容量预留。
读取容量和写入容量定义了此表支持的读取和写入请求数量。
关于自动扩展,AWS 管理扩展功能。
本地二级索引和全局二级索引在您需要比主键和排序键更多的索引值时使用。本地二级索引允许您创建一个具有与基础表相同的分区 ID 但具有不同排序键的附加索引。您需要在创建表时定义此索引。另一方面,全局二级索引允许您创建一个可以具有与基础主键不同的分区 ID 和排序键的索引。
- 点击 创建表格,如您在上一张截图中所见,您将在列表中看到创建的表格:

图 10.8 – 表格列表
- 让我们通过 AWS 管理控制台插入一个条目。在 表格 列表下选择 customer:

图 10.9 – 客户表
您将看到表格的详细信息:

图 10.10 – 表格详情
- 点击 操作 下拉按钮并选择 创建条目:

图 10.11 – 创建条目
- 点击此按钮后,您将看到一个标题为 创建条目 的条目创建页面。您可以通过填写表单或直接插入 JSON 来操作。在这个例子中,我们将通过 JSON 视图 插入代码。DynamoDB 为您创建了一个模板:

图 10.12 – JSON 视图
将以下 JSON 作为示例粘贴:
{
"customer_id": {
"S": "123"
},
"customer_mail": {
"S": "serkansakinmaz@gmail.com"
},
"name": {
"S": "Serkan"
},
"address": {
"S": "Germany"
}
}
JSON 文件很简单,包含 customer_id、customer_mail、name 和 address 信息。
- 点击 创建条目:

图 10.13 – 创建条目
创建后,您将被重定向到 表格 页面:

图 10.14 – 条目列表
由于您使用的是 NoSQL,您也可以插入 JSON,这与我们之前插入的 JSON 格式不同。以下 JSON 也适用于客户表:
{
"customer_id": {
"S": "1234"
},
"customer_mail": {
"S": "jane@gmail.com"
},
"name": {
"S": "Jane"
},
"profession": {
"S": "Data Engineer"
}
}
如您所见,我们已经删除了 address 字段并添加了 profession 作为新字段,没有任何问题。
在本节中,我们已经通过控制台创建了一个 DynamoDB 表并插入了数据。如您所见,DynamoDB 是一个键值数据库,您可以插入不同的 JSON 格式,这提供了灵活性。
使用 Python 进行 DynamoDB 操作
在本节中,我们将通过 Python 读取 DynamoDB 表。为了执行 Python 函数,我们将实现一个 Lambda 函数来从 DynamoDB 读取数据。执行以下步骤:
- 我们将创建所需的权限以允许 Lambda 从 DynamoDB 读取。打开 IAM 并在左侧点击 策略:

图 10.15 – IAM 策略
- 点击 创建策略:

图 10.16 – 创建策略
-
粘贴以下策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:BatchGetItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:UpdateItem" ], "Resource": "arn:aws:dynamodb:us-east-1:961487522622:table/customer" } ] }
该策略允许您从 DynamoDB 表中读取。一般来说,以下访问策略也适用于您;然而,您需要更改您拥有的账户 ID,因为每个 AWS 账户都有一个不同的账户 ID:

图 10.17 – DynamoDB 策略
- 您可以添加策略名称并完成策略的创建。在这个例子中,我使用 DynamoDBCustomerTableOperations 作为策略名称:

图 10.18 – 策略创建
- 现在我们需要创建一个角色。这个角色将被附加到 Lambda 以访问 DynamoDB。在 IAM 服务中点击 创建角色:

图 10.19 – IAM 角色
- 由于我们需要 Lambda 的策略,所以在用途部分选择Lambda:

图 10.20 – Lambda 的 IAM 角色
- 如以下截图所示,添加我们创建的用于访问 Lambda 的策略:

图 10.21 – 选择策略
- 填写角色名称并创建角色。如您所见,我们给 Lambda 函数取的名字是DynamoDBCustomerTableRole。向下滚动并点击创建****角色按钮:

图 10.22 – 创建角色
- 将
readFromDynamoDB到函数名称和Python 3.9到运行时:

图 10.23 – 创建函数
- 在上一页的底部,有一个用于定义执行策略的面板。在执行角色部分下选择使用现有角色,并选择我们创建的角色:

图 10.24 – 选择角色
- Lambda 准备填写代码块:

图 10.25 – Lambda 函数
将以下代码粘贴到 Lambda 函数中:
import json
import boto3
def lambda_handler(event, context):
dynamodb = boto3.resource('dynamodb', region_name="us-east-1")
table = dynamodb.Table('customer')
response = table.get_item(Key={'customer_id': "123", 'customer_mail': "serkansakinmaz@gmail.com"})
item = response['Item']
print(item)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
代码导入 boto3 库,该库为 DynamoDB 操作提供了有用的函数。boto3 是一个库,它包含 AWS 服务特定的功能,以便在 AWS 上使用 Python 实现云应用程序。您可以从以下链接获取更多详细信息:boto3.amazonaws.com/v1/documentation/api/latest/index.xhtml。
作为第一步,我们通过调用 boto3.resource 函数定义 dynamodb 资源。调用之后,我们定义了我们读取的表;它是 dynamodb.Table 表。一旦定义了表,table.get_item 函数将主键和排序键作为参数,并返回查询结果。
一旦运行 Lambda 函数,您就能看到结果:

图 10.26 – 执行结果
恭喜!您能够定义角色并从 Lambda 中检索项目。如您所见,AWS 需要一些配置才能访问 DynamoDB 中的数据。
摘要
在本章中,我们学习了 AWS DynamoDB 服务以及如何在 AWS 中创建 DynamoDB 数据库。创建数据库后,我们实现了一个 Lambda Python 代码片段,用于从 DynamoDB 中读取项目。您现在也知道如何扩展 Lambda 代码以将数据插入到 DynamoDB 表中。当您需要实现一个由 AWS 管理的键值数据库时,DynamoDB 非常有用。它具有可扩展性、日志记录和监控优势。在下一章中,我们将探讨 Glue 服务。
第十一章:使用 Python 与 Glue 结合
在本章中,我们将学习如何使用 AWS Glue 创建数据集成管道。AWS Glue是一种用于提取、转换和加载(ETL)过程的数据集成服务。Glue 是一种无服务器数据集成服务;因此,您不需要创建和管理服务器,因为基础设施由 AWS 管理。使用 Glue,您可以从不同的数据源收集数据,例如 S3、数据库或文件系统,以处理和转换数据。结果存储在 S3 或数据库中,或者您可以调用 API。
本章涵盖了以下主题:
-
AWS Glue 服务是什么?
-
AWS Glue 服务创建
-
使用 AWS Glue 创建简单的 Python 应用程序
AWS Glue 服务是什么?
AWS 拥有超过 100 个服务。当您在 AWS 和其他源之间集成数据时,您可能需要从源加载数据,使用一些转换对其进行操作,并将其存储在服务中。AWS Glue 满足这些要求,并提供了一个允许准备数据的服务。在以下图中,您可以看到 Glue 的非常高级的概述。如您所见,Glue 从不同的源提取数据,执行一些转换,并将数据加载到另一个源:

图 11.1 – AWS Glue
例如,假设您有在 S3 中通过批量加载的数据。为了使其可搜索,您需要将其存储在 DynamoDB 中。在这些过程之间,有一个要求是使用一些转换过滤、清理和操作数据。对于这个要求,AWS Glue 是数据集成和某些数据操作的好选择。
AWS Glue 功能
AWS Glue 具有以下功能:
-
它根据转换工作负载自动扩展。
-
它与其他服务有更广泛的集成,例如 S3、RDS 和 DynamoDB,因此您可以使用这些服务轻松地读取数据。
-
您可以安排管道;因此,ETL 过程可以根据预定时间定期执行。
-
它具有数据目录功能,允许您存储数据结构元数据信息。
-
它能够为 ETL 管道生成代码。例如,您需要从 S3 读取 CSV 数据以加载另一个 S3 位置的 JSON 格式。Glue 自动生成代码。
-
有 Git 集成,因此您可以轻松地从 Git 拉取代码以运行 ETL 管道。
-
它提供了一个具有拖放代码实现功能的可视化界面。
在本节中,我们探讨了 AWS Glue 的功能。为了更好地理解它们,我们将使用 AWS Glue 服务将 CSV 文件转换为 JSON。
创建 S3 示例文件
在本节中,我们将创建一个简单的 S3 存储桶,用于存储 CSV 文件。让我们一步一步地按照说明进行:
-
打开 AWS S3 服务。
-
点击创建 存储桶按钮:

图 11.2 – 创建存储桶
- 在面板底部给出一个唯一的桶名称,然后点击创建桶:

图 11.3 – 输入桶
桶已创建:

图 11.4 – 桶列表
-
在您的计算机上创建一个包含以下内容的
addresses.csv文件,并将其上传到 S3 桶。请以UTF-8格式保存文件;否则,在某些 Glue 版本中可能会出现问题:id,location_id,address_1,city,state_province 1,1,2600 Middlefield Road,Redwood City,CA 2,2,24 Second Avenue,San Mateo,CA 3,3,24 Second Avenue,San Mateo,CA 4,4,24 Second Avenue,San Mateo,CA 5,5,24 Second Avenue,San Mateo,CA 6,6,800 Middle Avenue,Menlo Park,CA 7,7,500 Arbor Road,Menlo Park,CA 8,8,800 Middle Avenue,Menlo Park,CA 9,9,2510 Middlefield Road,Redwood City,CA 10,10,1044 Middlefield Road,Redwood City,CA -
在桶内点击上传按钮以上传内容:

图 11.5 – 上传 CSV
上传后,桶将包含 CSV 文件:

图 11.6 – S3 内容
我们已成功上传文件。在下一步中,我们将创建创建 Glue 作业所需的权限。
定义 Glue 作业的权限
在本节中,我们将定义 Glue 作业所需的权限:
-
打开 AWS IAM 服务。
-
在左侧点击角色:

图 11.7 – IAM 服务列表
- 点击创建角色:

图 11.8 – 创建角色
- 在用例下选择Glue:

图 11.9 – 选择 Glue
- 在下一页,选择策略名称下的AmazonS3FullAccess和CloudWatchFullAccess:

(a)

(b)
图 11.10 – S3 和 CloudWatch 访问
- 为我们创建的角色命名,然后您可以点击创建角色以完成角色创建:

(a)

(b)
图 11.11 – 角色名称和创建
我们已为 AWS Glue 作业创建了所需的角色。在下一步中,我们将使用角色和 S3 桶创建一个简单的 AWS Glue 作业。
创建 AWS Glue 服务
在本节中,我们将创建一个 AWS Glue 服务。让我们一步一步地按照说明进行:
- 在 AWS 管理控制台搜索栏中输入
AWS Glue并点击出现的AWS Glue结果:

图 11.12 – 控制台搜索
- 在左侧点击作业:

图 11.13 – Glue 作业
- 在创建作业部分,选择带有源和目标的可视化。这将创建一个可视化界面和预定义的脚本,以便将 CSV 转换为 JSON 文件:

图 11.14 – 创建作业
- 在面板右侧点击创建后,您将看到可视化编辑器:

图 11.15 – 可视化编辑器
- 在数据源 - S3 桶下点击S3 桶,您将在右侧看到数据源详细信息。它包含有关如何解析源数据的详细信息。如图所示,我们将S3 位置设置为数据路径,数据格式为CSV,分隔符为逗号分隔:

图 11.16 – 数据源
- 从面板中选择转换选项卡,你将看到以下数据映射。此映射由 Glue 生成:

图 11.17 – 映射
- 从面板中选择数据目标属性 - S3选项卡,并填写面板中的目标详细信息。由于我们将转换为 JSON,格式将是JSON。目标位置也可以是另一个 S3 存储桶;在这个例子中,我将为输入和输出提供相同的 S3 位置:

图 11.18 – 数据目标
- 选择作业详情选项卡以填写其他信息,如作业名称和脚本。你可以在步骤 9和步骤 10中看到这些详细信息:

图 11.19 – 作业详情
- 填写作业的名称和IAM 角色字段以运行 Glue 作业:

图 11.20 – 名称和角色
- 还有一个配置需要完成。向下滚动并填写 Glue 将创建的脚本文件名和脚本路径详细信息:

图 11.21 – 脚本文件名和路径
- 点击保存。正如你所见,Glue 创建了一个 Python Spark 脚本,该脚本将把 CSV 转换为 JSON。PySpark是一个数据处理库,也可以在 AWS Glue 作业中使用:

图 11.22 – 代码生成
- 在面板右侧点击运行:

图 11.23 – 运行按钮面板
经过一段时间后,你可以从运行选项卡中检查作业状态:

图 11.24 – 运行选项卡
当你检查 S3 文件夹时,文件会被转换为 JSON。以下是一些示例输出:
{"id":"1","location_id":"1","address_1":"2600 Middlefield Road","city":"Redwood City","state_province":"CA"}
{"id":"2","location_id":"2","address_1":"24 Second Avenue","city":"San Mateo","state_province":"CA"}
{"id":"3","location_id":"3","address_1":"24 Second Avenue","city":"San Mateo","state_province":"CA"}
恭喜!你现在能够将 CSV 文件转换为 JSON 文件。正如你所见,AWS Glue 创建了一个预定义的脚本以执行一些 ETL 作业。
摘要
在本章中,我们学习了 AWS Glue 服务以及如何使用 AWS Glue 创建 ETL 管道。当你需要创建数据管道时,Glue 非常高效。Glue 的一个酷特性是可视化流程生成器,它允许你通过拖放来创建流程。这使得创建和生成流程变得容易,从而节省了大量时间。此外,对于那些代码经验不多的人来说,Glue 的可视化流程简化了他们的任务。因此,如果你处理数据,Glue 是 AWS 中最好的服务之一。在下一章中,我们将使用 Python 编程语言在 AWS 中创建一个示例项目。
第十二章:AWS 上的参考项目
在本章中,我们将使用 Python 在 AWS 上创建一个示例应用程序。这是本书的最后一章。我们已经了解了不同的 AWS 服务,并使用这些服务实现了示例 Python 应用程序。在本章中,我们将使用多个服务创建一个端到端的 Python 应用程序。
本章涵盖了以下主题:
-
我们学到了什么?
-
介绍端到端的 Python 应用程序
-
Python 应用程序的编码
我们学到了什么?
AWS 拥有超过一百项服务,我们已经了解了重要的 Python 相关服务。让我们浏览这些服务:
-
Lambda:Lambda 是一种云计算服务,允许您运行 Python 应用程序。您不需要配置任何服务器;Lambda 管理基础设施。
-
EC2:EC2 在云中提供服务器机器。您可以创建服务器并安装所需的应用程序,或您想要的任何东西。
-
Elastic Beanstalk:Elastic Beanstalk 用于部署基于 Python 的 Web 应用程序。
-
CloudWatch:CloudWatch 是 AWS 上的日志和监控服务。您可以轻松跟踪您的服务。
-
RDS:RDS 是 AWS 上的关系数据库服务。如果您需要数据库,您可以轻松创建它而无需管理服务器。
-
API Gateway:API Gateway 用于创建、维护和发布应用程序编程接口。
-
DynamoDB:DynamoDB 是一种用于在 AWS 上查询和存储数十亿记录的键值数据库。它也是一个NoSQL 数据库。
-
AWS Glue:AWS Glue 是一种用于 ETL 的数据集成服务。
介绍 Python 应用程序
让我们了解 Python 应用程序的高级架构:

图 12.1 – 项目架构
应用程序收集要存储在 S3 存储桶中的图像。API 网关用于客户端和 Lambda 服务之间的集成。Lambda 检索信息并将数据放入 S3。
Python 应用程序的编码
让我们一步一步实现应用程序。
创建用于存储图像的 S3 存储桶
在本小节中,我们将创建一个 S3 存储桶来存储通过 API Gateway 上传的图像。S3 将存储图像并在请求时提供:
- 创建存储桶并点击页面底部的创建存储桶按钮:

图 12.2 – S3 存储桶
- 我们填写了
python-book-image;您可以使用任何您想要的。在添加存储桶名称后,点击创建存储桶以创建一个新的存储桶:

图 12.3 – 存储桶配置
我们已创建了一个 S3 存储桶。
创建 Lambda 代码
在本小节中,我们将实现一个 Lambda 代码,该代码接受来自 API Gateway 的图像上传请求并将图像存储在 S3 存储桶中:
- 通过 AWS 管理控制台创建 Lambda 函数。您可以在以下截图中的 Lambda 创建步骤中看到 Lambda 函数的函数名称字段和运行时:

图 12.4 – Lambda 函数
-
将以下代码粘贴到 Lambda 代码源中:
import boto3 import base64 import json def lambda_handler(event, context): try: s3 = boto3.resource('s3') s1 = json.dumps(event) data = json.loads(s1) image = data['image_base64'] file_content = base64.b64decode(image) bucket = data['bucket'] s3_file_name = data['s3_file_name'] obj = s3.Object(bucket,s3_file_name) obj.put(Body=file_content) return 'Image is uploaded to ' + bucket except BaseException as exc: return exc -
粘贴完成后,通过点击部署按钮部署 Lambda 函数:

图 12.5 – Lambda 部署
让我们看看代码的细节。首先,我们导入json、base64和boto3库。json库用于解析 JSON 格式的数据,boto3用于将文件上传到 S3 以及生成用于检索文件的 URL。此外,base64用于解码和编码图像。
以下代码行正在解析参数并将图像内容解码以存储到 S3。因此,我们可以使用存储桶名称和 S3 文件名。代码中存储桶名称表示为bucket,S3 文件名表示为s3_file_name:
s1 = json.dumps(event)
data = json.loads(s1)
image = data['image_base64']
file_content = base64.b64decode(image)
bucket = data['bucket']
s3_file_name = data['s3_file_name']
一旦我们有参数,我们可以使用boto3库将文件从本地上传到 S3:
obj = s3.Object(bucket,s3_file_name)
obj.put(Body=file_content)
我们已经实现了应用程序的代码。为了运行此代码,我们必须创建权限,其步骤将在下一小节中解释。
创建服务权限
我们现在将创建权限以将文件上传到 S3 并从 API Gateway 调用 Lambda 函数:
- 打开 IAM 角色并创建一个新的角色用于Lambda:

图 12.6 – 创建角色
- 从列表中选择AmazonS3FullAccess和CloudWatchFullAccess:

图 12.7 – 添加策略
- 点击下一步按钮:

图 12.8 – 添加策略
- 添加角色名称:

图 12.9 – 命名角色
- 通过点击创建角色按钮完成创建角色:

图 12.10 – 创建角色
- 创建角色后,您将在列表中看到该角色:

图 12.11 – 列表中的角色
在本小节中,我们创建了一个用于 Lambda 函数执行代码的角色。现在让我们将此角色附加到 Lambda 函数。
将角色附加到 Lambda 函数
我们现在将向 Lambda 函数添加权限:
- 打开 Lambda 函数并点击配置选项卡下的权限:

图 12.12 – Lambda 权限
- 编辑权限并从现有角色中选择LambdaPolicy。此角色在上一小节中已创建:

图 12.13 – 添加权限
使用此配置,Lambda 能够执行代码。现在是时候开始实现 API Gateway 了,它将使用 Lambda 函数作为后端函数。
创建用于上传图像的 API 网关
在这个步骤中,我们将创建一个 API 网关来上传图像:
- 打开 API Gateway 服务并创建一个 REST API:

图 12.14 – 创建 REST API
- 为 REST API 提供一个名称。在这个小节中,我们将使用名称
UploadImageToS3:

图 12.15 – 命名 REST API
- 在 操作 下拉列表中,点击 创建方法:

图 12.16 – 创建方法
- 从可用选项中选择 POST:

图 12.17 – POST 方法
- 我们将使用 Lambda 函数 作为集成类型,并向下滚动点击 保存:

图 12.18 – Lambda 集成
- API 已经准备好使用。启用 CORS 策略,正如我们在 第九章 中解释的那样,然后在 操作 下拉列表中点击 部署 API:

图 12.19 – 部署 API
- 我们已经准备好部署 API。添加一个阶段名称并点击 部署:

图 12.20 – 命名阶段
- 在 导出 选项卡中,有多种调用 API 的选择。我们将使用 Postman 来调用 API。Postman 是一个允许你构建和测试 API 的平台。对于这个应用程序,你也可以测试另一个平台,例如 Swagger。Postman 是使用和测试 API 的简单方法。在接下来的小节中,我们将解释如何下载和使用它。由于它在安装和使用方面更简单,我将使用 Postman。
选择 导出为 Swagger + Postman 扩展 图标;你可以导出并下载 JSON 或 YAML 格式:

图 12.21 – 导出 API
此文件将用于 Postman 测试 API。
使用 Postman 测试 API
我们已经完成了实现。在这个步骤中,我们将通过 Postman 测试 API:
-
从以下网站下载并安装 Postman:
www.postman.com/。 -
在 Postman 应用程序中,点击 导入 按钮:

图 12.22 – 导入 API
- 选择我们在 API Gateway 中下载的 JSON 文件并点击 打开:

图 12.23 – 导入 JSON
- 你将看到 API 的确认。作为最终步骤,点击 导入:

图 12.24 – 导入 JSON
- 一旦你导入了 API,你就可以调用 API。在 POST 部分,选择 raw 请求类型,并使用以下 JSON:

图 12.25 – 原始参数
-
将以下 JSON 粘贴以调用 API:
{ "image_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1H AwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=", "bucket":"python-book-image", "s3_file_name":"image.jpeg" }
让我们分解 JSON 文件:
-
image_base64代表将要保存到 S3 桶的样本图像的base64代码。你也可以使用库和在线转换器将样本图像转换为base64代码。 -
bucket参数表示 S3 存储桶的位置。 -
s3_file_name表示内容的名称和扩展名。
这可以在以下屏幕截图中看到:

图 12.26 – 请求 JSON
- 点击 发送 按钮以调用 API。一旦点击,您就可以看到 API 的响应:

图 12.27 – JSON 响应
我们已成功调用 API。现在让我们检查 S3 存储桶,看看图片是否已上传。
- 打开
python-book-imageS3 存储桶,查看上传的jpeg文件:

图 12.28 – S3 内容
- 下载文件并检查示例图片。当您下载时,您会看到一个非常小的点。您可以通过在图片查看器上点击 + 放大镜图标来将其放大,以便清楚地看到:

图 12.29 – 图片
恭喜!您已成功使用 API Gateway、Lambda 和 S3 服务上传了图片。
摘要
在本章中,我们创建了一个应用程序,使用 API Gateway、Lambda 和 S3 上传图片。图片被转换为 base64 格式以存储在 S3 中。使用 Lambda、S3 和 API Gateway 的一个最佳方面是我们没有配置任何服务器。Lambda、S3 和 API Gateway 是无服务器的,我们不需要管理基础设施。AWS 会为您管理和处理这些。
我们已经完成了所有章节,并学习了如何使用 Python 操作最常用的 AWS 服务。我希望所有章节都能为您提供关于 AWS 的良好知识。在此基础上,您还可以使用这些服务以及 AWS 内部的更多服务来实现更复杂的 Python 项目。


浙公网安备 33010602011771号