AWS-认证云从业者备考指南-全-

AWS 认证云从业者备考指南(全)

原文:annas-archive.org/md5/b26a31f63c42f54367874c8b2b9ece25

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

Amazon Web ServicesAWS)是云计算的领导者,并且成功地保持了这一地位已有多年。全球各地的公司,无论是公共部门还是私营部门,都在以日益增长的速度拥抱云技术,拥有 AWS 经验的 IT 专业人员的需求远远超过了供给。

AWS 认证云实践考试指南是帮助你准备最受欢迎的 AWS 认证考试之一的全方位资源。本学习指南将帮助你验证对 AWS 提供的核心云计算服务的理解,并学习如何为客户设计和构建云解决方案。

通过这个基础认证并不要求你了解如何构建和部署复杂的多层应用解决方案。然而,本书将提供必要的技能,帮助你理解 AWS 提供的各种服务如何用于为客户构建端到端的解决方案。此外,你还将学习云经济学、安全概念和最佳实践。

本学习指南设计为即使在通过 AWS 认证云实践考试后仍能使用,其中包含多个练习,可以作为参考,帮助你开始为客户构建实际的解决方案。每一章都在上一章的基础上进行扩展,每一个新的练习都会扩展之前配置的服务。这将帮助你了解 AWS 提供的各个服务如何用于设计端到端的解决方案。

每章后面都包含总结,并附有一组复习问题。全书最后提供了两套模拟测试,旨在测试你的知识,并帮助你进一步为正式的 AWS 认证云实践考试做准备。

本书适用人群

本学习指南专为那些希望快速提升云计算职业生涯的人设计。AWS 认证云实践考试指南适合希望学习云计算基础知识及 AWS 提供服务的 IT 和非 IT 专业人员。非 IT 专业人员不仅可以学习 AWS 提供的各种云服务的理论概念,还可以从技术角度获得配置这些服务的宝贵经验。主要在本地环境工作的 IT 专业人员将学习如何在云中配置和部署技术解决方案,并理解将本地工作负载迁移到 AWS 的策略。

本书内容

第一章什么是云计算?,讨论了云计算的基本原理,并概述了云计算的六大优势。我们还将介绍不同的云计算模型和云部署模型。

第二章AWS 简介及全球基础设施,介绍了 AWS 生态系统、其全球基础设施以及如何帮助您在全球范围内部署解决方案。我们讨论了 AWS 提供的优质支持服务,以及选择正确支持计划的重要性。

第三章探索 AWS 账户、多账户策略与 AWS 组织,详细介绍了 AWS 账户的概念,AWS 账户使您能够安全地访问广泛的 AWS 服务。我们还讨论了设置多个 AWS 账户的使用案例以及使用 AWS Organizations 服务管理多个账户的最佳实践。

第四章身份与访问管理,介绍了 AWS 的核心安全功能之一。AWS 身份与访问管理IAM)使您能够安全地管理对 AWS 服务和资源的访问。通过 AWS IAM,您可以设计策略和权限,确保根据最小权限原则对服务的访问和授权。

第五章亚马逊简单存储服务(S3),解释了 AWS 提供的各种存储选项,包括块存储、对象存储和文件存储服务。亚马逊 S3 是 AWS 的对象存储解决方案,在本章中,您将了解如何利用这个几乎无限且高度可扩展的存储服务。

第六章AWS 网络服务 – VPC、Route53 和 CloudFront,涵盖了云中的网络服务。亚马逊虚拟私有云VPC)使您能够在云中启动 AWS 资源,并将其置于逻辑隔离的虚拟网络中。我们还将讨论 AWS 的域名系统DNS)服务,帮助您注册新的域名并为您的工作负载设计流量路由服务。最后,在本章中,我们将介绍 Amazon CloudFront,它帮助您为数字资产和应用程序设计内容分发网络服务。

第七章AWS 计算服务,详细介绍了 AWS 提供的各种计算服务。这些服务包括弹性计算云EC2)服务,您可以通过它在云中启动 Linux、Windows 和 macOS 虚拟服务器,以及像 Amazon Lambda 这样的容器和无服务器计算服务。本章中,您还将了解 AWS 上的块存储和文件存储服务。

第八章AWS 数据库服务,探讨了 AWS 提供的各种数据库解决方案,能够支持几乎任何使用场景。从传统的关系型数据库服务如 Amazon RDS,到 NoSQL 数据库解决方案如 Amazon DynamoDB,我们将探讨它们的使用场景,并学习如何为您的应用程序配置这些数据库。本章还讨论了其他一些细分的数据库解决方案。

第九章AWS 上的高可用性与弹性,涵盖了云计算,特别是 AWS 的一个基本优势。设计高度可用且能够抵御故障的解决方案对于任何组织都至关重要,在本章中,您将学习如何使用工具构建高度可用的解决方案。此外,我们还讨论了如何自动扩展应用程序,在需求增加时扩展资源,在需求下降时终止资源。这使得您能够更有效地管理成本,避免需要猜测容量。

第十章应用程序集成服务,探讨了各种 AWS 服务,帮助您构建采用解耦架构设计的应用程序。这使您能够摆脱传统的单体设计,转而采用更现代的微服务架构。

第十一章AWS 上的分析,探讨了 AWS 上众多工具和服务,帮助您分析组织收集的大量数据,其中大部分数据是实时收集的。

第十二章AWS 上的自动化与部署,介绍了若干自动化工具和流程,帮助您部署基础设施和应用程序,这些工具和流程不仅加速了部署过程,还减少了配置错误。

第十三章AWS 上的管理与治理,探讨了几种可以用来监控资源、集中管理并帮助您遵循最佳实践的 AWS 服务。

第十四章在 AWS 上实现安全性,概述了 AWS 提供的各种安全工具、服务和流程,帮助您设计安全为首的应用程序解决方案,从而确保符合任何合规性和监管环境,并确保客户的数据始终得到保护。

第十五章计费与定价,讨论了云经济学,并探讨了大量 AWS 工具,帮助您有效管理云计算成本。我们讨论了如何在不妥协性能、可靠性和安全性的情况下,最大程度地降低成本的策略。

第十六章模拟测试,使你可以通过进行两次完整的模拟考试,测试在本学习指南中获得的知识。这些模拟测试将帮助你评估自己准备好参加官方 AWS 认证考试的程度,并提供答题解析,帮助你为 AWS 考试做好准备。

充分利用本书的内容

为了充分利用本书,你必须按照章节的顺序进行阅读。这是因为每一章的内容都建立在前一章的基础上。此外,强烈建议你通过完成本书中的所有练习,获得必要的实践经验。

如果你正在使用本书的数字版,我们建议你自己输入代码,或通过 GitHub 仓库访问代码(链接将在下一节提供)。这样做将帮助你避免因复制和粘贴代码而产生的潜在错误。

下载示例代码文件

你可以从 GitHub 下载本书的示例代码文件,网址是 https://github.com/PacktPublishing/AWS-Certified-Cloud-Practitioner-Exam-Guide。如果代码有更新,它将被更新到现有的 GitHub 仓库中。

我们还提供其他代码捆绑包,来自我们丰富的书籍和视频目录,访问链接:github.com/PacktPublishing/。快去看看吧!

下载彩色图片

我们还提供了一个 PDF 文件,里面包含了本书中使用的截图/图表的彩色图片。你可以在这里下载:static.packt-cdn.com/downloads/9781801075930_ColorImages.pdf

使用的约定

本书中使用了多种文本约定。

文本中的代码:表示文本中的代码词汇、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟网址、用户输入和 Twitter 账户。示例:“对于键,输入Name,对于值,输入Windows-BastionSrv。”

代码块设置如下:

{
  "Id": "Policy1613735718314",
  "Version": "2012-10-17",

粗体:表示新术语、重要词汇或在屏幕上看到的词汇。例如,菜单或对话框中的词汇在文本中以这种方式显示。示例:“在实例控制台中,选择屏幕右上角的启动实例按钮。”

提示或重要说明

以这种方式显示。

联系我们

我们始终欢迎读者的反馈。

一般反馈:如果你对本书的任何方面有疑问,请在邮件主题中注明书名,并通过 customercare@packtpub.com 发送邮件给我们。

勘误:尽管我们已尽最大努力确保内容的准确性,但难免会出现错误。如果您在本书中发现了错误,欢迎向我们报告。请访问 www.packtpub.com/support/errata,选择您的书籍,点击“勘误提交表单”链接并填写相关详情。

盗版:如果您在互联网上发现我们的作品有任何非法复制,欢迎提供相关位置地址或网站名称。请通过 copyright@packt.com 与我们联系,并附上相关材料的链接。

如果您有兴趣成为作者:如果您在某个领域拥有专长并且有意愿写作或参与书籍的编写,请访问 authors.packtpub.com

评论

请留下您的评论。在您阅读并使用本书之后,为什么不在您购买书籍的网站上留下评论呢?潜在的读者可以看到并参考您的客观意见来做出购买决定,而我们 Packt 公司也能了解您对我们产品的看法,作者们也能看到您对其书籍的反馈。谢谢!

欲了解更多关于 Packt 的信息,请访问 packt.com

分享您的想法

一旦您阅读了AWS 认证云从业者考试指南,我们很想听听您的想法!请点击这里直接进入 Amazon 的评论页面并分享您的反馈。

您的评论对我们和技术社区非常重要,能够帮助我们确保提供优质的内容。

第一部分:云计算概念

在这一节中,我们将探讨云计算的基础知识。接着,我们将介绍亚马逊网络服务AWS)及其云服务概述和价值主张。我们还将分析 AWS 云计算经济学及其云计算的优势。

本书的这一部分包括以下章节:

  • 第一章什么是云计算?

  • 第二章AWS 介绍与全球基础设施

  • 第三章探索 AWS 账户、多账户策略与 AWS 组织

第一章:什么是云计算?

云计算已经成为全球企业设计、构建和实施信息技术IT)应用程序的默认选择。过去,你需要托管整个基础设施,雇佣一组开发人员,并设计构建应用程序所需的每个组件和流程。这种方式不仅消耗了大量的成本,而且往往未能遵循最佳实践,也缺乏灵活性和创新空间。

对全球 IT 专业人员来说,理解云计算已成为维持工作并在职业生涯中取得进展的关键。如果你仍然向客户提供老旧的解决方案,那在如今快速发展的 IT 领域中根本不具成本效益。

此外,构建云端解决方案也面临着一些挑战,例如安全性考虑和网络连接问题。因此,提升技能以深入理解如何构建可以托管在云端的弹性、可扩展和可靠的解决方案是至关重要的。

在本章中,我们将介绍云计算的概念、云计算所包含的内容,以及迁移到云端的关键优势。我们还将讨论各种云计算模型以及云的部署选项。了解这些模型和部署选项之间的关键差异及其应用场景和优势,对于制定有效的云采纳策略至关重要。

我们还将简要介绍虚拟化——这一关键技术使得云计算成为可能。

本章涵盖以下主题:

  • 什么是云计算?

  • 探索虚拟化基础

  • 探索云计算模型

  • 理解云部署模型

什么是云计算?

云计算是一个用来描述按需访问 IT 服务的术语,这些服务包括计算、网络、存储和软件服务,通常来自第三方供应商,通常通过公共互联网或某种形式的广域网WAN)访问。公司可以为其组织提供所需的 IT 应用程序,而无需采购和管理自己的基础设施来托管这些应用程序。相反,他们从这些第三方供应商租赁/租用所需的 IT 基础设施。

云计算自互联网发明以来,已经以某种形式存在了很多年。在早期,Hotmail(1996 年首次推出,现在更名为 Microsoft Outlook)是云计算的典型代表。你可以在 Hotmail 上为自己和同事设置电子邮件账户,并用它们进行交流。另一种选择是托管你自己的电子邮件服务器(基础设施)网络连接以及电子邮件应用程序(电子邮件软件)。这最终意味着额外的成本和管理开销来维护你托管的电子邮件服务器。

如今,云计算已经成为主流,并且在许多公司和初创企业中,云计算是默认的选择。目前,Amazon Web ServicesAWS)是最大的云计算服务提供商,提供多种形式的云 IT 服务,包括基础设施、平台和软件解决方案。你可以选择使用这些服务,而不是为你的业务应用程序创建自己的专用环境。AWS 的庞大规模使得它能够以更低的成本实际提供所需的组件来托管你的业务应用程序,同时提供高可用性HA)、安全性和弹性。

云计算的六大优势

让我们来看一下 AWS 定义的云计算六大优势,参考 AWS 的资料(AWS云计算的六大优势docs.aws.amazon.com/whitepapers/latest/aws-overview/six-advantages-of-cloud-computing.html),如下面的截图所示:

图 1.1 – 云计算的六大优势

图 1.1 – 云计算的六大优势

提示

AWS 认证云从业者考试假设你已经记住了这六个优势,在测试定义 AWS 云及其价值主张目标时会用到。

让我们详细看看以下这些优势:

  • 将资本支出转为可变支出:转向云计算而不是托管自己的本地基础设施的主要好处之一就是支付基础设施费用的方式。传统上,你需要采购昂贵的硬件并投资宝贵的商业资本,以获得构建托管应用程序所需的基础设施组件。

    使用云计算时,你只需在实际使用基础设施组件时支付费用。这种按需付费的模式意味着在不使用资源时,你可以节省成本。

    资本支出CAPEX)转向可变支出,也称为运营支出OPEX),意味着你可以将宝贵的商业资本用于更重要的投资领域,例如开发新产品或改善营销策略。

  • 受益于巨大的规模经济:作为一个独立企业,你通常需要以零售价格购买必要的 IT 硬件,并构建一个能够托管你应用的环境。然而,像 AWS 这样的云服务提供商为成千上万的客户托管基础设施,甚至参与创新并根据其规格定制组件。这带来了更大的规模经济,并使他们能够为客户提供更低的按需付费价格。

  • 停止猜测容量:传统上,在进行容量规划时,你会为未来的增长采购必要的硬件组件。预测未来增长非常困难,这通常意味着你会过度配置环境。结果就是大量闲置的资源浪费,且这些资源的采购通常需要大额资本支出(CAPEX),而随着折旧的快速发生,这会对财务报表产生不利影响。另一方面,一些公司可能会为了节省成本而低配容量。如果资源不足,可能会对公司形象产生负面影响,例如,由于资源配置不足,客户无法完成交易或遭遇性能问题。

借助云计算和先进的管理软件,你可以在最需要的时候配置必要的基础设施。此外,利用 AWS 等云服务提供商提供的监控和自动化工具,当需求增加时,你可以自动扩展基础设施,而当需求下降时,则可以缩减规模。这样,你只需为实际消费的部分付费,并且只在使用时付费。

  • 提高速度和敏捷性:像 AWS 这样的云供应商使你能够通过几次点击快速启动和配置新的 IT 资源——例如,你可以在几分钟内为开发人员配置一组新的服务器,帮助你的组织在构建基础设施和发布应用程序时大幅提升敏捷性。如果你正在构建测试和开发环境,或进行实验性工作以研究新产品/服务,那么一旦这些任务完成,你可以同样迅速地终止这些环境。同样地,如果某个项目中途被放弃,你也无需担心有任何物理上的浪费——你只需要关闭或终止你不再需要的资源。相比之下,在虚拟化技术发明之前(后文会讨论),配置一台新的服务器来托管数据库通常需要数周时间。这包括向供应商下订单购买合适的硬件、等待交付、安装额外的组件如存储和内存,然后最终进行操作系统的手动安装并确保其安全。建立数据中心的这个过程也意味着你将资金从主业务中转移——这些宝贵的资本本可以用来创新现有产品或开发新产品。

  • 停止为运营和维护数据中心花费资金:托管自己的本地基础设施会消耗许多隐性成本。除了花费宝贵的资金购买昂贵的硬件外,你还需要一支工程师团队来高效配置每个基础设施组件,并租赁必要的房地产来安装、堆叠和为你的服务器供电。你还需要使用适当的空调系统保持服务器冷却——这还不是全部。你还需要为昂贵的维护合同支付费用,以应对硬件的磨损。

    通过将你的应用托管在 AWS 的基础设施上,你将不再需要担心这些隐性成本。你的房地产成本和水电费可以大幅减少,使你的业务更具竞争力。

  • 几分钟内实现全球扩展:AWS 在全球多个地区托管数据中心。尽管你可能在一个国家设有总部,但你将可以完全访问所有区域。这将帮助你提供更低的延迟和更优质的客户体验,无论你的客户身处何地。在其他区域托管资源的副本,还可以帮助你为灾难恢复DR)和业务连续性要求进行设计。

相比之下,在其他国家建立物理数据中心的成本可能会非常高,并且可能会阻碍你快速实现全球扩展。访问多个区域还可以帮助你满足有关数据存储位置和管理方式的合规性或监管要求。

在本节中,我们了解了云计算的基础知识,并讨论了其六个关键优势。我们明白了,采用云技术帮助客户更好地管理成本,同时使他们能够更快地扩展应用程序,并变得更加灵活。在下一节中,我们将讨论云计算服务中最重要的基础组成部分之一——虚拟化。

探索虚拟化的基础知识

虚拟化是使云计算能够普及的核心技术之一,它催生了像 AWS、Microsoft Azure 和 Google Cloud Platform (GCP) 等云服务提供商,这些提供商提供大量的服务和应用程序,并具备高可用性 (HA)、弹性等功能,能够为客户提供服务,通常只需几分钟时间。

在虚拟化技术普及之前,如果你想外包基础设施需求,IT 服务提供商必须为你的业务提供物理基础设施组件,比如物理服务器,并通过互联网授予访问权限。然而,配置物理服务器通常需要较长的时间,从采购和安装所有硬件组件(如中央处理单元CPU)、内存和存储)到配置操作系统和必要的应用程序。这样一来,可能需要等待几天才能完成环境配置。

硬件技术的进步,如 CPU、内存和存储的提升,使得性能和能力大幅提升,以至于托管单一操作系统和少量应用程序的物理服务器通常会处于空闲状态。相反,软件工程和软件设计的改进确保了硬件资源得到了有效利用,以支持这些应用程序。最终结果是,单一操作系统和少量应用程序通常无法最大化利用物理硬件资源。

硬件与软件之间的这种关系促成了虚拟化的发明。虚拟化技术和虚拟机监控程序hypervisors)使得将单个物理服务器的硬件组件模拟为多个虚拟组件成为可能。这些组件随后被部署为多个虚拟机VMs),每个虚拟机运行其自己的操作系统和一套应用程序。

虚拟机管理程序(Hypervisor)本质上是一种介于实际物理硬件和虚拟机(VM)之间的软件。它负责使得运行在虚拟机上的操作系统和应用程序能够以一种受控的方式访问物理硬件资源,并且将这些资源相互隔离。虚拟机管理程序及其关联的管理软件用于划分物理硬件组件的虚拟化表示,将其分解为更小的虚拟组件,然后以虚拟机的形式呈现。每个虚拟机可以安装其自己的操作系统,并配备所需的应用程序。

虚拟化的最大优势之一是可以快速配置资源。通过使用软件来模拟现有的物理硬件(使得当客户发出请求时硬件可以立即提供),虚拟服务器、存储或网络环境的配置时间大大缩短。

在下图中,我们可以看到虚拟化如何使我们能够从连接到服务器的物理存储中分配虚拟存储设备给各个虚拟机:

图 1.2 – 传统物理架构与虚拟化架构对比

图 1.2 – 传统物理架构与虚拟化架构对比

虚拟化的最大优势之一是资源配置的速度。由于软件被设计用来模拟现有的物理硬件(以便当客户发出请求时硬件能够提供),虚拟服务器、存储或网络环境的配置时间大大缩短。

虚拟化与云计算

虚拟化本身并不是云计算。然而,这项技术使得提供云计算服务成为可能。云计算服务提供商的一个主要特征是能够通过自助管理工具来配置虚拟化的基础设施资源。AWS 通过其管理控制台(通过网页浏览器访问)、命令行界面CLI)和直接访问其软件应用程序编程接口APIs)等工具,来帮助客户配置如服务器、网络、存储和数据库等资源。通过提供明确的 API 并支持自动化,云服务提供商使得客户可以通过自助服务模式来配置所需的资源。客户无需排队等待云工程师为其配置资源,而是可以直接通过 API 调用与云服务互动,并在几分钟内启动自己的资源。

最终,云计算提供商利用虚拟化技术、支持虚拟化的现代硬件技术以及软件,提供共享计算资源、基于软件即服务SaaS)的产品和其他按需服务,通过互联网进行传输。此外,像 AWS 这样的提供商还提供解决方案,支持弹性、自动化、可扩展性和高可用性(HA),并采用按需计费模式,使其服务几乎可以被任何类型的客户在任何地点访问。

总结一下,虚拟化的好处如下:

  • 通过设置多个虚拟机(VM)来高效使用强大的硬件,提供不同的应用程序

  • 使服务器整合成为可能,从而降低成本

  • 允许你以更快的速度管理大规模的安装和部署

  • 通过基础设施隔离和高效管理底层硬件资源来提高安全性

  • 使你能够在同一硬件上托管不同的操作系统以支持不同的应用程序

在这一节中,我们了解到虚拟化技术是云计算演进的主要驱动力。该技术使得资源(如服务器、网络组件和存储服务)的配置可以在几分钟内完成。此外,虚拟化管理应用程序使我们能够构建自助服务平台。客户只需登录管理控制台,并配置必要的资源来构建托管其应用程序的架构。

在下一节中,我们将探讨可用的云计算模型。不同的模型需要不同程度的管理,因此提供不同程度的灵活性。

探索云计算模型

云计算如今为企业提供了将托管和管理应用程序的成本与复杂性外包的能力——例如,许多供应商提供的主流应用程序作为一种完整的服务,不需要客户进行任何形式的基础设施管理。举例来说,Microsoft Office 365 是一套包括电子邮件、消息传递和协作服务的桌面生产力应用程序,且通过互联网提供。与此同时,许多组织也需要托管定制的业务线LOB)应用程序,例如那些内部开发的应用程序。通常,这意味着他们需要访问并配置必要的基础设施,以最适合应用程序需求的方式进行配置。

为此,企业可以聘用云提供商的服务,例如 AWS,它提供不同的云模型,以满足业务的具体需求。以下是大多数云供应商(如 AWS)提供的三种主要云模型。

基础设施即服务

基础设施即服务IaaS)模型在为客户提供访问和配置底层网络、存储和计算服务方面提供了最大的灵活性,从而支持其 LOB 应用程序。 这种模型非常类似于拥有和管理自己的物理基础设施。 但是,通过云计算,其明显区别在于您使用虚拟化的基础设施组件而不是访问底层物理组件。

如果您需要更多控制如何配置基础设施组件(通常是从操作系统层向上)以支持特定应用程序,则 IaaS 云计算模型非常理想。

平台即服务

平台即服务PaaS)是另一种云计算模型,旨在消除配置和管理底层基础设施资源(如计算、存储和网络服务)的负担。 PaaS 旨在让您的组织专注于开发应用程序代码,并为您提供一个平台来部署和管理应用程序的发布、更新和升级。

当您的开发人员将其应用程序代码部署到 PaaS 环境时,提供商将为支持该应用程序所需的基础设施进行配置。 这将包括必要的网络架构、防火墙规则、存储、计算服务、操作系统管理和运行时环境。

根据您的供应商,PaaS 模型可能仍然在如何配置底层基础设施方面提供一定程度的灵活性。 例如,AWS 允许您对底层基础设施进行必要的修改,提供了额外的灵活性。 此类服务的示例包括 AWS Elastic Beanstalk、AWS OpsWorks、AWS Lambda 和 Amazon 关系数据库服务RDS)。 虽然 AWS 提供的 PaaS 模型消除了必须详细配置每个基础设施组件的需求(这是您必须在 IaaS 模型中执行的操作),但它仍然提供了决定部署哪些组件来支持您的应用程序的灵活性。

SaaS

通过SaaS模型,应用程序完全由提供商托管和管理。 SaaS 服务消除了托管应用程序所需的任何物理基础设施的需求。 相反,您只需通过互联网连接到这些应用程序,并使用提供的服务。 今天,大多数 SaaS 应用程序都可以通过标准的 Web 浏览器完全运行。 这也意味着无需安装任何客户端软件。

尽管托管 SaaS 应用程序所需的任何基础设施的设置和配置完全由供应商负责和管理,但许多基于 SaaS 的应用程序仍然需要某种形式的配置,以满足您业务的特定需求。您仍然需要具备内部专业知识来根据您的要求配置应用程序,或者寻求供应商/第三方的支持。例如,Microsoft Office 365 是一套基于 SaaS 的在线生产力应用程序,集成了电子邮件、文件共享和协作服务。尽管您无需在现场拥有任何物理硬件来托管该应用程序,因为它可以作为完整的产品通过互联网访问,但您仍然需要配置软件元素以满足您的业务需求。这包括安全配置、将您的域名与所提供的电子邮件服务关联,或者启用加密服务。

让我们来看看 IaaS、PaaS 和 SaaS 模型的一些典型示例,如下所示:

表 1.1 – 云计算模型

表 1.1 – 云计算模型

在这一节中,我们探讨了云计算模型。我们了解了 IaaS、PaaS 和 SaaS 等核心模型之间的主要区别。每个模型都有其自身的管理负担,并且能够提供设计、构建和部署应用程序的灵活性。

在下一节中,我们将探讨云部署模型。在这里,我们评估自己托管本地云(或私有云)与使用公共云服务提供商服务之间的差异。我们还将讨论如何将您的私有云环境与可能托管的公共云提供商资源连接起来。

理解云部署模型

在为您的组织部署云服务时,您需要考虑哪种部署模型最适合您的业务。这个决策将基于多个因素,例如您所在的行业、合规性和监管问题,以及成本管理和配置灵活性。

部署云服务时有三种主要的部署模型,列举如下:

  • 公共云

  • 私有云

  • 混合云

这些模型在下图中表示:

图 1.3 – 云部署模型

图 1.3 – 云部署模型

我们来详细了解每个模型。

公共云

公共云是一种云部署模型,企业通过互联网从第三方供应商(如 AWS)获取 IT 服务。这是最受欢迎的云计算模型,因其提供了各种各样的服务。像 AWS 这样的公共云供应商专注于向各行各业及各种规模的企业提供 IT 服务。

公有云服务通常采用按需付费的模式,可以帮助您的组织从 IT 的资本支出(CAPEX)模式转向运营支出(OPEX)模式。这将释放宝贵的资本,供您进行更重要的投资机会。公有云供应商提供的服务包括免费服务、基于订阅的服务,或按需付费的服务,费用根据您使用的量来收取。公有云服务提供商还能够提供更大的可扩展性和灵活性,这些通常是单靠自己无法实现的,且成本过高。

在公有云模式下,客户可以使用自助服务功能,访问管理控制台和命令行接口,并可以通过 API 配置和消费所提供的服务。

私有云

相比之下,私有云是一种云部署模型,您的企业负责采购、安装、配置和管理所有必要的基础设施和软件组件。这听起来与传统的本地 IT 非常相似。然而,它的云元素来自于通常会部署额外的管理软件,允许企业的不同部门从可用服务目录中执行自助服务任务,如提供计算、存储、网络和软件服务。

虽然公有云提供商为全球所有企业提供服务,因此这些服务是公开可用的,但私有云则专为您的企业设计,您将不会与任何外部组织共享底层计算资源。

私有云具有高度可定制性,可以满足您组织的需求,使您在设计安全性和基础设施配置等关键领域拥有最大控制权。这并不一定意味着私有云提供商(例如,Red Hat OpenStack)比公有云提供商更安全。像 AWS 这样的公有云提供商会投入大量资金来设计其服务的安全特性——这些特性如果由组织自己实施,可能会因为成本过高而无法实现。

混合云

这是将 IT 服务结合部署在本地(仅由您的企业管理)并与一个或多个第三方云提供商集成的模式。

许多进入公有云的公司通常会从某种形式的混合模型开始。通常,企业会将服务迁移到公有云,以减少资本开支(CAPEX)投资,并选择基于按需付费的 IT 服务消费模式。例如,公司可能需要增加部署的服务器数量,而不是购买更昂贵的物理硬件,他们可以在本地基础设施与公有云提供商之间建立网络连接,根据需要启动额外的服务器。连接选项可以包括在公有互联网中建立一个安全的互联网协议安全IPsec虚拟私人网络VPN)隧道,或甚至建立一个专用的光纤连接,完全绕过公有互联网,享受更大的带宽。

混合云通常也用于帮助启动灾难恢复DR)项目,这些项目通常需要私有云基础设施与公有云提供商提供的服务之间进行网络通信,其中灾难恢复解决方案将被托管。这使得可以将本地数据和应用程序复制到灾难恢复站点,该站点由如 AWS 之类的供应商托管。

混合云部署还可以帮助企业开始测试新的前沿技术,或采用分阶段迁移方法,以确保在迁移过程中尽量减少对正常业务功能的干扰。此外,还可以实施高可用性(HA)解决方案。例如,如果本地基础设施出现停机,服务的消费者可以被重定向到托管在公有云提供商上的复制服务。

总结

在本章中,我们探讨了云计算的基础知识,以及它如何帮助企业使用必要的 IT 服务来托管他们的应用程序。我们讨论了云计算的六大关键优势,以及它为何能提供更大的灵活性和韧性,同时还为创新和降低成本提供了机会。

我们还考察了三种云计算模型,分析了它们的主要区别,并比较了每种模型提供的灵活性水平。我们还评估了三种云部署模型,并识别了企业如何通过构建混合云解决方案轻松启动其云之旅。

在下一章中,我们将介绍 AWS。我们将讨论它的历史,并提供其服务的简要概述。我们还将考察 AWS 全球基础设施,这使企业能够访问分布全球的数据中心设施,在这些设施中它们可以部署自己的应用程序。这将使企业能够在全球范围内扩大客户群体。然后,我们将介绍 AWS 提供的支持计划,这对于任何希望使用云服务的企业来说都是至关重要的。

问题

这里有一些问题可以帮助你测试自己的知识:

  1. 以下六项优势中,哪项使小型初创公司能够立即开始使用来自 AWS 等公共云供应商的 IT 服务?

    1. 用变动费用替代资本性支出

    2. 几分钟内实现全球化

    3. 停止猜测容量

    4. 提高速度和敏捷性

  2. 云计算的哪项功能使客户能够通过自助服务模型,在几分钟内部署其资源?

    1. 访问云供应商 API

    2. 访问云供应商工程师来进行服务器安装和配置

    3. 可扩展性特性

    4. 多种服务器选项

  3. 什么是虚拟机监控程序?

    1. 使你能够在物理硬件上创建和管理虚拟资源的软件,如虚拟机(VM)

    2. 用于监控 Windows 服务器健康状况的软件

    3. 用于创建高可用性网站的软件

    4. 使你能够提高物理服务器性能的硬件

  4. 以下哪项是服务器虚拟化的主要好处?(选择两个答案。)

    1. 高效利用物理硬件资源

    2. 能够在几分钟内配置虚拟服务器

    3. 增强加密服务

    4. 满足合规要求的能力

  5. 以下哪个是 IaaS 的典型例子?

    1. 一项服务,允许你配置底层虚拟计算、存储和网络资源来托管你的应用程序

    2. 一项服务,抽象化底层基础设施,允许你专注于应用程序代码的部署过程

    3. 一项服务,通过公共网络托管并交付完整的应用程序,无需访问任何底层基础设施

    4. 一项服务,允许你在短期租赁期间使用硬件资源,并按计量方式付费

  6. 以下哪个是 PaaS 的典型例子?

    1. 一个平台,通过公共网络托管并交付完整的应用程序,无需访问任何底层基础设施

    2. 一项服务,允许你配置底层虚拟计算、存储和网络资源来托管你的应用程序

    3. 一项服务,抽象化底层基础设施,允许你专注于应用程序代码的部署过程

    4. 一项服务,允许你使用代码构建基础设施,以便在不同环境中进行重复部署

  7. 以下哪个是 SaaS 的典型例子?

    1. 一项服务,允许你配置底层虚拟计算、存储和网络资源来托管你的应用程序

    2. 一项服务,抽象化底层基础设施,允许你专注于应用程序代码的部署过程

    3. 一项服务,通过公共网络托管并交付完整的应用程序,无需访问任何底层基础设施

    4. 一项服务,允许开发者在软件开发生命周期中采用 DevOps 策略

  8. 哪种云部署模型使你能够将本地工作负载与在 AWS 等公共云提供商处部署的资源连接?

    1. 私有云

    2. 公有云

    3. 混合云

    4. 超级云

第二章:AWS 和全球基础设施概述

本章中,我们将讨论 亚马逊 Web 服务 (AWS) 是什么,回顾其简短历史,并尝试了解 AWS 全球基础设施。全球基础设施使您能够访问遍布不同大洲的 AWS 数据中心,从而为客户构建高可用性、容错性和可扩展的解决方案。此外,您还可以确保将工作负载放置在离客户位置更近的地方,并满足任何合规或监管要求。

AWS 的这一关键服务使您能够在不同区域之间访问和启动资源。深入理解这一点将帮助您满足客户的需求——遵守监管和合规要求、提供灾难恢复(DR)解决方案,甚至节省成本——所有这些最终都能提升客户体验。

我们还将讨论 AWS 提供给客户的支持计划。根据客户需要托管的应用程序数量和复杂度,他们可能需要不同级别的支持。选择合适的计划是确保您在有效管理成本的同时获得所需支持并满足任何特定要求的关键。

本章内容包括以下主题:

  • 什么是 AWS?

  • 探索 AWS 全球基础设施

  • 为您的业务选择合适的 AWS 支持计划

  • AWS 服务健康仪表板概述

  • AWS 可接受使用政策 (AuP)

什么是 AWS?

亚马逊 Web 服务 (AWS) 是亚马逊的全资子公司,是全球最大的公共云计算提供商。它通过遍布全球的数据中心,向客户提供超过 175 项独特服务。这些服务通过互联网访问(也提供部分本地部署选项),并采用按需计费模式。它的客户包括初创公司、企业客户,甚至像美国(US)海军这样的政府组织。

Gartner Research 每年发布一份报告,名为 云基础设施与平台服务魔力象限,在过去几年中,AWS 一直位居领导者象限的首位。

您可以在 aws.amazon.com/resources/analyst-reports 上访问大量分析研究报告。在左侧菜单中,只需将搜索筛选为 Magic Quadrants,即可获得 Gartner 的一系列报告,其中包括前述的 云基础设施与平台服务魔力象限 报告。

AWS 简史

AWS 于 2002 年开始了它的旅程,当时它开始向公众提供一些临时服务。以下截图展示了它的一些关键里程碑和迄今为止的历程:

图 2.1 – AWS 历史:时间线

图 2.1 – AWS 历史:时间线

本节中,我们简要回顾了 AWS 的历史及其如何成为云市场的领导者。在下一节中,我们将探讨 AWS 全球基础设施,它对其功能至关重要,并且使 AWS 能够向客户提供丰富的云服务。

探索 AWS 全球基础设施

AWS 全球基础设施包括多个数据中心,这些数据中心存放着全球不同地理区域的所有服务器、存储设备和网络设备。

随着 AWS 不断扩大其全球布局,它会建设更多的数据中心,这最终会增加其客户可以访问的区域数量。

在撰写本文档时,以下截图展示了当前全球的活跃区域,并包括即将到来的区域:

图 2.2 – AWS 全球基础设施。图片由 AWS 提供(https://aws.amazon.com/about-aws/global-infrastructure/)

图 2.2 – AWS 全球基础设施。图片由 AWS 提供(aws.amazon.com/about-aws/global-infrastructure/)

AWS 区域是 AWS 托管一组数据中心的物理位置。在一个给定区域内,这些数据中心的构建方式是将较大集群的小组在逻辑和物理上分隔开,彼此之间的距离在 100 公里km)(60 英里)以内。这些在逻辑和物理上分隔的小组构成了我们所称之为可用区AZ)。

AWS 目前在全球 24 个地理区域内跨越 77 个可用区(AZ),并已宣布在澳大利亚、印度、印尼、日本、西班牙和瑞士计划新增 18 个可用区和 6 个 AWS 区域。

让我们更深入地了解什么是区域和可用区(AZ)。

区域

一个区域将包含至少两个可用区,许多区域甚至包含三个或更多。北弗吉尼亚区域(N. Virginia 或us-east-1)包含六个可用区。通常,当 AWS 推出新服务时,它会首先在北弗吉尼亚区域部署。

你可能会好奇,为什么需要这么多区域,这样做有什么用处。简单来说,全球多个区域将使 AWS 能够进一步吸引这些地区的客户注册其服务。然而,这也可能引发另一个问题。如果没有任何限制阻止你访问全球另一端的 AWS 区域的服务,为什么还需要这么多区域?继续阅读,了解其原因。

AWS 的多区域战略使您(客户)能够获得以下好处:

  • 在接近终端用户的地方识别基础设施资源,在那里你可以托管应用程序并减少网络延迟,从而带来良好的用户体验UX

  • 在政治和国家边界内识别基础设施,以遵守严格的数据主权和合规性法规。

  • 将资源组相互隔离,以便在发生重大区域性故障时,能够满足任何故障转移或灾难恢复(DR)场景。

关于第二个好处,许多服务是基于区域的。这意味着在使用该服务部署资源之前,你需要选择要部署资源的区域。例如,如果你想启动一个新的基于 Windows 的虚拟服务器(我们称之为 AWS 上的弹性计算云EC2)实例),你需要选择希望部署它的区域。事实上,对于 EC2 实例,你还需要指定在该区域内希望启动服务器的可用区。接下来,让我们了解可用区(AZs)。

可用区(AZs)

可用区(AZs)是给定区域内数据中心的逻辑和物理分组。每个区域会有两个或更多的可用区,如前所述。可用区是 AWS 在一个大都市区内部署一个或多个数据中心设施的逻辑表示。这些数据中心将容纳硬件组件,如服务器、存储和网络设备,所有这些设备都配备了冗余电力、连接性、冷却和安全控制。

拥有多个可用区(AZs)的主要目的是为客户提供构建高可用、容错和可扩展解决方案的机会。这是可能的,因为同一区域内的可用区通过高带宽、低延迟的私有光纤连接互联,从而提供区域间的高吞吐量连接。

这个配置的一个重要方面是,你可以在可用区之间实现同步复制。这意味着你可以在不同可用区的服务器上部署应用程序的多个副本/副本。如果某个可用区发生故障,你可以继续通过在其他可用区运行的副本工作负载为客户提供服务。

图 2.3中,如果 AZ A发生故障,用户的流量将仅被引导到 AZ B中的服务器,这些服务器提供完全相同的服务。架构设计确保用户不会察觉到故障,从而显著改善用户体验(UX)。

这是一个可行的设计,因为我们可以将副本应用程序服务器分布在多个可用区中,并通过 Amazon 弹性负载均衡器ELB)将终端用户流量分配到这些服务器上。ELB 不仅将用户流量分配到应用服务器,还会监控这些服务器的健康状况,只有当这些服务器在线并且响应时,才会发送流量。稍后我们将在第九章中详细讨论 Amazon ELB,AWS 上的高可用性和弹性。你可以在这里看到上述设计的示意图:

图 2.3 – 用户流量暂时仅被引导到 AZ B 中的服务器, 直到 AZ A 恢复上线

图 2.3 – 用户流量暂时仅被引导到 AZ B 中的服务器,直到 AZ A 恢复上线。

所以,现在我们已经理解了区域和可用区(AZs)之间的差异,以及如何利用可用区来构建高可用性解决方案,我们可以继续了解 AWS 全球基础设施的另一个组件:边缘位置。

在接下来的部分中,我们将讨论如何利用边缘位置构建内容分发网络CDN)并提供缓存服务。

边缘位置

除了区域和可用区(AZs)之外,AWS 还提供了另一种类型的托管服务,称为边缘位置。这些边缘位置同样托管着物理服务器基础设施、大量存储设备以及高带宽网络设备。此外,AWS 的边缘计算服务提供了基础设施和软件,使得数据可以更接近最终客户进行处理和分析。这包括将 AWS 管理的硬件和软件部署到 AWS 数据中心以外的位置,甚至直接部署到客户自有的设备上。

如前所述,你在 AWS 上部署的大多数资源将是基于区域的。例如,一个 EC2 实例可以部署在北弗吉尼亚区域的一个特定可用区(AZ)。假设这些服务器托管媒体文件,并且你希望将这些文件全球分发给最终用户。对于位于澳大利亚悉尼的用户来说,这意味着每次请求这些文件时,都会直接通过公共互联网从位于美国的服务器获取这些大型媒体文件。

通过边缘位置,你可以将频繁访问的文件缓存到靠近悉尼用户的服务器上。这意味着下载这些频繁访问的文件所需的时间大大缩短,从而显著提高用户体验。

边缘位置服务的一个重要组成部分是亚马逊的 CloudFront。这是一个 CDN 服务,旨在帮助你为你的内容创建分发点。分发点将在每个区域的这些边缘位置创建,具体取决于你的配置。然后,你的内容将被缓存到最靠近最终用户的边缘位置,当他们尝试访问你的内容时。

边缘位置不仅仅是缓存内容。例如,Amazon Simple Storage ServiceAmazon S3)是一个对象存储解决方案,允许你在每个区域创建容器(在 AWS 中我们称之为)。你可以将任何类型的数据上传到桶中并进行存储。如果你需要将大文件上传到全球任何地方的桶中,你可能会遇到高延迟和较低吞吐量的问题,因为数据需要通过公共互联网传输。

Amazon S3 传输加速是 Amazon S3 的一项功能,允许你通过这些边缘位置将内容上传到 AWS 存储桶。一旦你的数据到达离你更近的边缘位置,它将通过 AWS 主干网络使用高速链接进行传输。这大大提高了数据上传到 Amazon S3 存储桶的速度。你实际上可以使用 AWS 提供的工具测试上传传输速率,该工具可通过 s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-speed-comparsion.html 访问。该工具将尝试从你的浏览器(你的所在地)将一个示例文件传输到不同的 Amazon S3 区域,并显示 AWS S3 传输加速与不使用传输加速时的传输速率比较。

边缘位置通过 AWS 主干网络与 AWS 区域连接。这个网络包括完全冗余的多个 100 千兆以太网 (GbE) 并行光纤连接,显著提高了吞吐量,并提供低延迟的连接。

以下截图展示了当前全球的边缘位置。AWS 根据消费者需求和业务要求,持续建设和部署更多边缘位置:

图 2.4 – 全球的边缘位置和区域边缘缓存。图像来自 AWS (https://aws.amazon.com/cloudfront/features/)

图 2.4 – 全球的边缘位置和区域边缘缓存。图像来自 AWS (aws.amazon.com/cloudfront/features/)

边缘位置确实存在一些限制,因为它们的缓存大小会随着时间的推移而填满,为了容纳新内容,它们会驱逐最近未访问的内容。这意味着下次有人尝试访问该特定内容时,它将需要从原始源重新获取。为了减少这种情况发生的频率,AWS 还提供了 区域边缘缓存,我们将在接下来讨论。

区域边缘缓存

除了边缘位置,我们还有区域边缘缓存。区域边缘缓存具有更多存储空间,并提供更大的缓存容量。正如你想象的那样,边缘位置的存储设备将包含大量缓存内容——这些内容可能是图片、视频、文档等。它们的主要目的是存储频繁访问的内容。随着内容变得过时,它将从缓存中驱逐,以为更新的内容腾出空间。这意味着,当某些内容不常被访问时,最终用户将不得不再次从原始服务器中拉取这些文件才能访问它们。

在这种情况下,区域边缘缓存非常有用。全球部署的区域边缘缓存远少于边缘位置,但它们的部署是有战略意义的。它们提供额外的存储和缓存,可以比标准边缘位置更长时间地保留那些不常访问的数据。

最终,区域边缘缓存也会驱逐那些未被访问的数据,但在过渡期间,如果地球另一端的某个终端用户请求相同的数据,那么该过程会重复,此时该数据会被缓存到离该特定用户更近的边缘位置。

区域服务

我们之前讨论过,大多数 AWS 服务都是基于区域的,您需要首先选择一个区域,然后在该区域内创建该服务的资源。例如,如果您希望启动一个 关系型数据库服务RDS)数据库,您必须先选择希望部署数据库的区域,然后在该区域内启动您选择的数据库引擎。

这是因为将承载该服务(服务器、存储或数据库)的基础物理基础设施将位于您所在的区域。这就是为什么 AWS 上的大多数服务都是基于区域的原因。

在以下截图中,您需要选择一个区域,才能启动一个新的 Windows 服务器。同样,如果您需要访问之前部署的某个服务器,您必须知道它所在的区域:

图 2.5 – 选择一个区域以访问在该区域部署的 EC2 实例(服务器)

](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_02_05.jpg)

图 2.5 – 选择一个区域以访问在该区域部署的 EC2 实例(服务器)

现在我们已经理解了 AWS 全球基础设施的核心组件,我们可以继续讨论如何向客户提供各种类型的服务。一些服务需要您指定您希望使用它的区域,而其他服务则可以全球访问,无需指定具体的区域。让我们在接下来的部分中讨论这个问题。

全球服务

尽管大多数服务都是基于区域的,正如我们之前提到的,仍然有一些服务属于全球服务类别。尽管这似乎与之前提到的逻辑相矛盾,即某个服务显然需要在每个区域中具有物理基础设施,但 AWS 仍会将该服务作为全球产品提供。换句话说,无论您在哪个区域工作,您都可以直接从任何位置访问这些全球服务。

这些服务作为全球服务呈现的原因是,您希望在这些服务中创建的资源可以全球访问,并且在许多情况下,这些资源在您 AWS 账户中的所有区域内是唯一的。

以您在 AWS 账户中的单个用户账户(身份与访问管理IAM)用户)为例。为您组织中需要使用 AWS 账户中的服务和资源的每个员工创建独特的账户是有意义的。想象一下,如果每个开发人员在每个区域都需要创建多个账户,那只会带来巨大的管理负担。

尽管以下列表并不详尽,但以下服务在 AWS 上呈现为全球服务:

  • AWS IAM——AWS 提供的一项服务,使你能够授予访问你 AWS 账户中的服务和资源的权限。AWS IAM 允许你为需要访问这些服务的员工创建 IAM 用户,定义权限,配置组,并设置角色。我们将在第四章《身份与访问管理》中讨论 AWS IAM。

  • Amazon CloudFront——一个 CDN 服务,允许你为特定源服务器创建内容分发点。Amazon CloudFront 服务将在靠近请求访问你内容的用户的边缘位置缓存内容。

  • Amazon Route 53——一个高度可用、可扩展且完全托管的云 域名系统 (DNS)。你可以使用 Amazon Route 53 注册新的域名,配置域名记录,并为各种用例设计全球路由策略,例如为构建高可用解决方案而设计的主动/被动解决方案。

  • Amazon S3——尽管 Amazon S3 存储桶需要在每个区域中创建,因此这些存储桶是区域特定的,但该服务本身呈现为全球服务。当你访问 Amazon S3 控制台时,你无需选择特定区域,而是会看到你已创建的所有区域中的存储桶列表,如下图所示:

图 2.6 – 显示在特定 AWS 账户中跨所有它们已部署的区域

图 2.6 – 显示在特定 AWS 账户中跨所有已部署区域的 Amazon S3 存储桶

除了全球和区域服务,AWS 还提供某些旨在本地使用的服务。这些服务可以用于构建混合云模型或帮助将本地工作负载迁移到 AWS。我们将在下一节中探讨其中的一些服务。

本地服务

尽管 AWS 是一家公共云提供商,但它们也提供某些托管在客户本地数据中心的服务。这使得客户能够将 AWS 服务的管理能力带到他们的本地数据中心。

一些本地服务旨在促进混合云部署解决方案,而其他本地服务则可用于通过离线路线将数据从本地数据中心迁移到 AWS 云,特别是在带宽受限的情况下。提供这些本地服务的另一个原因是它们帮助满足某些客户对数据驻留的严格法律要求。

一些设计为在本地托管或使用的服务包括以下内容:

  • Amazon Snow Family——这些是包含 固态硬盘SSD)、计算硬件和网络组件的物理封装单元,运送到客户站点。AWS Snow Family 包括 Snowball Edge 设备、Snowcone 和 Snowmobile。它们可用于将 TB千兆字节)到 PB拍字节)的数据复制到设备上,这些数据可以返回 AWS,以便将数据复制到 Amazon S3 中。它们还提供计算能力,以便在将数据复制到设备时,数据可以按需处理和分析。

  • Amazon Storage Gateway——该服务使用户能够将本地存储与 Amazon S3 连接,提供不同的网关选项,旨在将其存储数据卸载到 Amazon S3。用户将继续从本地服务器无缝访问这些数据。根据所选配置选项,Amazon Storage Gateway 可以在本地维护一小部分频繁访问的数据,并将大部分数据存储在 Amazon S3 中,从而减少本地所需的存储硬件,降低资本成本。或者,如果本地应用程序对网络延迟非常敏感,Amazon Storage Gateway 服务还可以提供数据备份功能,能够将本地存储的数据快照发送到 Amazon S3。

  • Amazon Outposts——这是一种 42U 的机架,能够从 1 个机架扩展到 96 个机架,以创建计算和存储容量池,托管在您本地的数据中心。U 代表机架单位或“U 空间”,等于 1.75 英寸的高度。标准高度为 48U(即 7 英尺机架)。Amazon Outposts 提供 AWS 的所有管理软件和功能,用于管理您的 EC2 实例,以及在本地数据中心托管的存储和 RDS 数据库服务。

    这使得低延迟连接、本地数据处理以及遵守本地数据驻留要求成为可能。可以在 Amazon Outposts 上本地运行的其他服务包括 弹性容器服务ECS)、弹性 Kubernetes 服务EKS)和 弹性 MapReduceEMR)集群。您还可以在本地数据中心运行的另一项服务是使用 Amazon S3 在 Outposts 上的主机对象存储服务。这有助于您满足本地数据处理和数据驻留的需求。

在本节中,我们考察了 AWS 全球基础设施。这是一个底层核心基础设施组件,托管在遍布不同战略地理区域的 AWS 数据中心中。AWS 为您提供访问所有区域的权限,使您能够托管应用程序,满足各种使用案例——从确保您的应用程序尽可能靠近最终用户,到帮助您遵守任何合规性或数据主权法律。

我们还回顾了区域、可用区(AZ)和边缘位置之间的主要区别,并了解了如何使用这些资源构建具有高可用性、可扩展性和容错性的架构。我们还讨论了如何利用边缘位置提供低延迟的内容和数字资产访问。

接下来,我们讨论了基于区域的服务和全球服务之间的区别。我们还检查了某些可在客户数据中心本地运行的服务。

在下一节中,我们将回顾 AWS 支持计划。当你开始在 AWS 平台上构建解决方案时,选择合适的支持计划极为重要,这样可以确保为你的用例提供正确级别的支持,同时确保有效地管理成本。

为你的企业选择合适的 AWS 支持计划

AWS 非常注重提供卓越的客户支持。然而,不同的企业需要不同层次的支持,在 AWS,每个客户都会得到相应的照顾。除了标准的客户支持服务,如解决账户设置或账单问题外,AWS 还提供广泛的技术支持,帮助客户更快、更高效地采用云技术。

即使你在本地数据中心拥有丰富的技术经验,迁移到云端仍然需要学习一套新的技能,理解如何为云架构解决方案,同时还要做到成本效益。AWS 招聘并培养了一些最优秀的工程师,他们的支持团队在他们提供的技术方面非常熟练。

AWS 提供了四种支持计划,将在以下章节中讨论。

基础支持计划

无论你最终为你的企业选择哪种支持计划,每个账户都订阅了基础支持计划。在这点引起你兴趣之前,我应该指出,这个计划并不提供任何真正的技术支持。基础支持计划完全免费,提供与账户相关的客户支持服务,例如账单支付或登录账户时遇到的问题。你还可以访问公开的文档、白皮书和支持论坛。你可以通过电子邮件、聊天和电话全天候 24/7 使用基础支持服务,电话支持包括让亚马逊通过固定电话或手机回拨给你——所以,他们承担通话费用。

此外,您还可以访问受信任顾问工具中的七项基本检查,帮助您识别提升性能和改善安全性的最佳实践。我们将在第十三章中查看受信任顾问工具,内容为AWS 上的管理与治理。最后,您还可以通过个人健康仪表板PHD)接收到有关可能影响您部署资源的 AWS 服务中断的警报。PHD 的详细讨论也在第十三章AWS 上的管理与治理中。

开发者支持计划

AWS 推荐如果您在 AWS 上进行实验或测试,订阅开发者支持计划;更多信息请参考 aws.amazon.com/premiumsupport/plans/。开发者支持计划是一个具有成本效益的解决方案,适用于非生产工作负载的支持。这些是仍处于开发阶段且尚不支持任何关键业务需求的网站或应用程序。如果您能接受此类工作负载的长期停机时间,开发者支持计划的价格非常合理。

虽然开发者支持计划为您提供技术支持,但它仅限于针对 AWS 使用案例的通用支持,支持团队将无法讨论您可能遇到的特定应用层问题。支持仅通过电子邮件提供(不提供电话支持),并且仅在工作时间内提供 Cloud Support 专员的支持。尽管您可以提出无限数量的案件,但案件的严重性和响应时间为一般指导时在 24 小时内,系统受损问题时在 12 小时内

与基础支持计划相同,开发者支持计划下您只能访问 AWS 受信任顾问工具中的七项核心检查。

商业支持计划

商业支持计划推荐用于生产环境,并使公司能够在其 AWS 工作负载上获得技术支持。支持的案例包括解决可能出现故障的 RDS 数据库问题,您可能需要从备份中恢复,或更复杂的故障排除问题和问题解决方案。

商业支持计划提供全面的 24/7 支持,包括电子邮件、聊天和电话支持。根据问题的严重程度,提供不同的响应时间。例如,如果您的生产系统出现故障,您可以在 1 小时内获得 Cloud Support 工程师的支持。与开发者支持计划不同,后者提供的是更通用的支持,主要涵盖典型的 AWS 使用案例,而商业支持计划则包括帮助您解决 AWS 资源与第三方软件之间的互操作性问题。因此,提供的支持是根据您的使用案例来定制的。

如果支付额外费用,你还可以访问 AWS 的基础设施事件管理IEM)。该服务提供指导和操作支持,帮助你完成项目启动事件或迁移任务。这包括评估你的 AWS 环境的准备情况,识别任何潜在的风险并提出缓解措施,随后在实际启动期间提供持续支持,并进行事后回顾。

最后,企业支持计划还使你有资格获得一整套 AWS Trusted Advisor 检查,这些检查可以让你将工作负载与最佳实践进行对比,并在五个类别中获得推荐:成本优化安全性容错性性能服务限制。我们将在第十三章AWS 上的管理和治理中讨论 AWS Trusted Advisor 工具的关键特性。

企业支持计划

企业支持计划是所有 AWS 支持计划中的顶尖之选。考虑到其每月起价为美元USD)$15,000,这个计划提供的服务水平理应是最好的。企业支持计划自然适用于非常大的组织,如跨国公司或那些在全球范围内拥有大量工作负载的公司。

例如,Netflix、Amazon Prime 和 Dropbox 等公司。企业支持计划之所以突出,是因为它提供不同的 VIP 式服务,如专门的技术账户经理TAM)。你的 TAM 将主动监控你的环境,并与你紧密合作,积极引导你的团队进行云项目的规划、设计和实施。

你的 TAM 将协助优化任务并建议各种最佳实践方法论,还将为你提供访问 AWS 内部最佳专家的机会。另一个重要服务是访问 Well-Architected 审查。这使你能够获得一位资深 AWS 解决方案架构师,他可以对你在 AWS 上部署的解决方案进行审计。AWS 将提供指导和最佳实践,帮助你设计可靠、可扩展、容错和具有成本效益的解决方案。

服务级别协议SLA)方面,你将获得全天候 24/7 的电子邮件、聊天和电话支持,并可访问高级云工程师,对于商业关键的技术问题,响应时间为 15 分钟。

下面是一个表格,突出显示了不同 AWS 支持计划的一些关键优势:

你可以在aws.amazon.com/premiumsupport/plans/找到每个计划的详细信息。

在本节中,我们回顾了四种 AWS 支持计划,从免费的基础支持计划到全包式的 VIP 风格企业支持计划。计划之间的一个关键区别是了解哪些计划提供 24/7 的电话和聊天技术支持,哪些不提供。此外,并非所有计划都能让您全面访问所有可信顾问报告,帮助您判断您的工作负载和解决方案是否符合最佳实践和安全指南。

确保您了解生产和关键业务问题的响应时间的关键区别,以及企业计划提供的附加功能,如访问指定的 TAM。

在下一节中,我们将查看 AWS 服务健康仪表盘,该仪表盘使您能够查看每个区域内每项服务的当前状态。任何给定服务的故障都会在服务仪表盘上突出显示。

AWS 服务健康仪表盘概览

AWS 发布了其各个区域内所有数据中心的服务健康状态。如果某个服务似乎无响应,这是您首先应考虑调查的地方。AWS 为其各种服务提供了 SLA,您可以在 https://aws.amazon.com/legal/service-level-agreements/ 获取完整的服务级别协议列表。

您可以在这里查看 AWS 服务健康仪表盘的示例概览:

图 2.7 – AWS 服务健康仪表盘。图片来源于 AWS(https://status.aws.amazon.com/)

图 2.7 – AWS 服务健康仪表盘。图片来源于 AWS (status.aws.amazon.com/)

在下一节中,我们将继续探讨 AWS PHD。与之前讨论的服务健康仪表盘类似,PHD 提供有关影响您资源和工作负载的服务的信息。登录到您的 AWS 账户的 AWS 管理控制台后,您可以访问 PHD。在 第三章 中,我们将讨论如何创建 AWS 账户,探索 AWS 账户、多账户策略和 AWS 组织,以及如何理解 AWS PHD。

虽然 AWS 服务健康仪表盘提供了所有 AWS 服务及其可用性的基本信息,但如果出现任何故障,PHD 会提供更为详细的信息,其中报告了可能影响您的应用程序和资源的问题,如下图所示:

图 2.8 – AWS PHD

图 2.8 – AWS PHD

PHD 的一些关键优势包括:

  • 个性化的服务健康视图—这包括能让您快速识别任何可能影响您的资源或应用程序的 AWS 服务问题的信息。

  • 主动通知——你还可以接收到一些通知,比如即将到来的可能会影响你的计划变更。这将帮助你根据这些计划变更做出相应的规划。你还可以通过名为 Amazon CloudWatch Events 的服务设置警报,以接收及时和相关的信息。

  • 详细的故障排除指导——你收到的警报还将包括必要的修复细节以及你可能需要采取的任何行动。

  • 集成与自动化——PHD 与 CloudWatch 事件集成,可用于触发自动化任务,如 Lambda 函数。

  • 跨 AWS 组织聚合健康事件——AWS Organizations 是一个帮助你集中管理多个 AWS 账户的服务。你可以使用 PHD 聚合组织中每个账户的所有通知。这让你可以全面了解所有账户的实时事件、操作问题或任何计划的维护。

到目前为止,我们已经介绍了一些 AWS 全球基础设施的基本组件,比较了区域性服务与全球性服务,并检查了 AWS 服务健康仪表盘和 PHD。你应该注意,在使用 AWS 平台上的任何服务之前,你必须同意某些条款和条件。具体来说,你必须遵循 AWS AuP,我们接下来将详细介绍。

AWS AuP

尽管这是显而易见的,但你需要记住,当你为个人或商业用途注册 AWS 账户时,必须遵守 AWS AuP。该政策提供了有关可接受使用 AWS 服务的信息,并描述了禁止的使用行为。你必须严格遵守该政策中的指南,否则你的账户可能会被暂停或终止,这可能会影响你为业务部署的工作负载。

你可以在 aws.amazon.com/aup/ 查看完整的政策。通过注册使用 AWS 提供的服务,你自动同意该政策的最新版本。

总结

在本章中,我们详细审视了 AWS 全球基础设施。我们了解了作为客户,你可以选择在 AWS 的哪个区域部署你的资源和应用程序,并且探讨了选择特定区域时需要考虑的关键因素。

我们还了解了 AZ(可用区)的概念,它使你能够构建具有高可用性、容错性和可扩展性的解决方案。了解哪些服务被归类为全球性服务或区域性服务,对于你的设计架构也至关重要。

然后我们了解了边缘位置及其在整体云应用解决方案设计中的重要性。边缘位置和区域边缘缓存使你能够通过低延迟和高速网络链接将你的 Web 应用内容和数字资产提供给全球客户。通过在离终端用户更近的边缘位置本地缓存频繁访问的内容,这实现了大幅提高用户体验(UX)来访问这些内容。

接下来,我们分析了四种不同的 AWS 支持计划,并讨论了它们之间的主要区别。选择正确的支持计划对于确保在最需要时获得技术支持至关重要,这取决于你的具体使用案例。此外,了解每个计划的内容将帮助你决定组织需要支付多少支持费用,从而帮助你做出预算。

最后,我们还研究了 PHD 服务的好处——这是一个关键工具,可以接收任何可能影响你工作负载和应用程序的 AWS 服务中断或计划性维护任务的通知和警报。这样,你可以在需要时做出主动决策。

在下一章中,我们将学习如何使用 AWS 账户访问广泛的 AWS 服务。为了安全和隔离地使用其各种服务,必须拥有 AWS 账户,并确保任何在 AWS 上部署的工作负载对其他客户或实体不可访问——除非你授予此类访问权限。

我们还讨论了多账户策略,以及为什么你可能需要拥有多个 AWS 账户,以及如何集中管理多个 AWS 账户。

最后,我们将带你一步一步创建你的第一个免费 AWS 账户的指南。

在下一部分中,我们将呈现一系列复习问题,帮助你测试迄今为止获得的知识。

问题

这里有几个问题可以测试你的知识:

  1. 以下哪种 AWS 支持计划可让你访问所有 AWS 受信任顾问报告?(选择两个答案)

    1. 基础支持计划

    2. 开发者支持计划

    3. 商业支持计划

    4. 企业支持计划

    5. 全球支持计划

  2. 你已经花了几个月的时间为你的客户开发一个新应用。现在你准备上线,并希望确保在应用服务器或后台数据库出现问题时,你可以访问 AWS 技术支持工程师。你的组织对生产系统停机问题 1 小时响应时间感到满意。对于你来说,哪种支持计划是最具成本效益的选择?

    1. 基础支持计划

    2. 开发者支持计划

    3. 商业支持计划

    4. 企业支持计划

  3. 哪种 AWS 支持计划可以让你获得一位技术账户经理,他将监控你的环境并提供优化你在 AWS 平台上工作负载的指导?

    1. 基础支持计划

    2. 开发者支持计划

    3. 商业支持计划

    4. 企业支持计划

  4. 您计划在 AWS 上构建一个测试和开发环境,作为最终将工作负载迁移到该平台的前提。在过渡期间,由于您的开发人员是云计算新手,他们需要一些基础的技术支持。哪个 AWS 支持计划提供在工作时间内以成本效益的方式访问云支持人员?

    1. 基础支持计划

    2. 开发者支持计划

    3. 商务支持计划

    4. 企业支持计划

  5. 以下哪项服务在所有 AWS 支持计划中提供,并允许通过电话、聊天和电子邮件全天候 24/7 访问支持?

    1. 通过电话和聊天访问技术支持

    2. 访问客户支持服务以解决任何计费或账户登录问题

    3. 访问技术账户经理以帮助您管理账户

    4. 访问 AWS Trusted Advisor 的完整报告

  6. AWS 全球基础设施的哪个功能使您能够以符合监管要求的方式启动应用程序并存储数据?

    1. 区域(Regions)

    2. 可用区(AZs)

    3. 边缘位置(Edge location)

    4. CloudFront

  7. AWS 全球基础设施的哪个组件使您能够将内容分发到全球用户,以便这些用户本地可以访问您数字资产的缓存版本?

    1. 区域(Regions)

    2. 可用区(AZs)

    3. 边缘位置(Edge locations)

    4. AWS RDS

  8. AWS 全球基础设施的哪个组件使您能够在特定区域内架构应用解决方案,以提供高可用性能力?

    1. 区域(Regions)

    2. 可用区(AZs)

    3. 边缘位置(Edge locations)

    4. 区域边缘缓存

  9. 以下哪些服务被认为是 AWS 平台上的全球服务?(请选择两个答案)

    1. AWS IAM

    2. Amazon 虚拟私有云VPC

    3. Amazon Snowball

    4. AWS EC2

    5. Amazon CloudFront

  10. 以下哪些服务是设计用于在本地进行设置、配置和使用的?(请选择两个答案)

    1. AWS Outposts

    2. Amazon Storage Gateway

    3. Amazon DynamoDB

    4. AWS 简单通知服务SNS

    5. AWS PHD

  11. 作为注册过程的一部分,您需要遵守描述禁止活动的政策指南。这属于哪个政策?

    1. 合规性政策

    2. 密码策略

    3. AuP

    4. 漏洞测试指南

  12. 哪项 AWS 服务发布关于 AWS 生态系统所有区域内任何服务的即时故障或问题信息?

    1. PHD

    2. 故障和问题仪表板

    3. 服务健康仪表板

    4. Amazon CloudWatch

第三章:探索 AWS 账户、多账户策略与 AWS Organizations

要访问 AWS 平台上的服务,您需要拥有一个 AWS 账户。AWS 提供了数百种不同的服务,您作为客户,可以使用这些服务为您的业务和客户构建云计算解决方案。

AWS 提供的公共云服务是任何互联网上的人都可以访问的。AWS 账户提供了一种方式,使您可以在一个与其他客户隔离的边界内访问这些公共 AWS 服务。这意味着,除非您授权,否则外部用户无法访问您的资源。因此,AWS 账户为您所消费的服务和部署的资源提供了安全性、访问隔离和计费边界。此外,任何 AWS 服务的消费费用将分配到您的 AWS 账户。

在本章中,我们将探讨拥有多个 AWS 账户的好处,并讨论如何使用名为 AWS Organizations 的服务来管理这些账户。我们还将演示如何设置您的第一个 AWS 账户,您将在本训练指南中的各个练习中使用该账户。

本章涵盖以下主题:

  • 为什么要拥有一个多账户的 AWS 环境?

  • AWS Landing Zone 介绍

  • 使用 AWS Control Tower 自动化创建 Landing Zone

  • 探索 AWS Organizations

  • 练习 3.1:设置您的第一个 AWS 免费套餐账户

  • 练习 3.2:设置账单警报

为什么要拥有一个多账户的 AWS 环境?

尽管您可以将所有业务资源托管在一个 AWS 账户中,但这很快会变得过于复杂,难以管理。试想一下,您将多个开发中的非生产应用、用户验收测试UAT)和生产工作负载都托管在同一个 AWS 账户中,这会迅速变成一个巨大的管理负担。复杂性进一步加剧,因为您还需要确保许多应用程序之间是相互隔离的,以满足合规性或安全性要求。这就需要您定义复杂的策略和权限,以确保不同工作负载类型的适当隔离,并有效管理资源。

最重要的是,拥有单一的 AWS 账户会限制您在重大灾难发生时无法降低其影响范围。通过使用合适的策略来分离工作负载,将有助于限制灾难性事件的影响范围。例如,您可以为所有实验性工作(如开发新应用程序,即我们所称的沙盒环境)创建一个独立的账户,并为实际的开发、测试和生产环境创建其他账户。如果沙盒环境中发生任何灾难(例如根账户凭证意外泄露或自动扩展组配置错误导致 EC2 实例部署重复循环),只要这些工作负载彼此隔离并分开,其他账户将不会受到影响。

图 3.1所示的图示中,我们可以看到为给定公司创建了多个账户。在此示例中,我们有开发、UAT 测试和生产账户,以及一个用于实验工作的沙盒账户:

图 3.1 – 多个账户有助于限制工作负载的灾难影响范围

图 3.1 – 多个账户有助于限制工作负载的灾难影响范围

多账户架构的一些关键优势包括:

  • 工作负载之间的管理隔离:通过多账户架构,您可以根据多个因素(包括开发生命周期)为不同的业务单元提供不同级别的管理控制。例如,您可能希望授予开发人员对生产账户的完全访问权限,因为您会在该账户中部署公共发布的应用程序。

  • 工作负载的有限可见性和可发现性:AWS 账户提供了一个天然的边界,可以将您的工作负载与任何外部身份隔离。部署在 AWS 账户中的应用程序和资源,除非明确授予权限,否则其他 AWS 账户中的身份(用户和应用程序)无法访问。

  • 安全性和身份管理的隔离:与其在每个 AWS 账户中为团队成员(例如开发人员、服务器管理员、UAT 测试人员)创建多个用户身份账户,不如将所有用户托管在独立的 AWS 身份管理账户中。这样可以避免为员工创建重复账户,并减少管理开销。最终,您可以通过跨账户访问授予用户对其他 AWS 账户的访问权限,政策和权限会限制用户在遵循最小权限原则的前提下可以执行的任务。

  • 恢复或审计账户的隔离:许多组织需要有灾难恢复和业务连续性策略,以便在发生故障时,企业可以轻松地继续使用重复的工作负载进行操作,并快速恢复任何重大损失。这类工作负载应当根据最佳实践放置在独立的账户中。

在这一节中,我们简要介绍了 AWS 账户的概念,以及它们如何为您提供隔离的 AWS 服务访问,确保没有其他客户能看到您的工作负载和应用,除非您明确授予他们相应的访问权限。

在下一节中,我们将探讨 AWS 提供的服务,帮助您快速设计和构建多账户战略。我们讨论了 AWS Landing Zone,这是 AWS 解决方案架构师为您的多账户部署创建定制基础架构的服务。我们还将了解 AWS Control Tower,这是一项根据行业最佳实践自动化构建 landing zone 的服务。

AWS Landing Zone

构建多账户环境可能变得非常复杂且耗时。AWS 为其客户提供了一套最佳实践方法,以便在设计多账户生态系统时遵循。之前,AWS 提供了名为 AWS Landing Zone 的解决方案,但该方案现在已经被弃用,取而代之的是新的 AWS Control Tower。

之前的 AWS Landing Zone 服务为客户提供了一个基础蓝图,用于设计和构建多账户环境,提供了身份与访问管理、治理、数据安全和日志记录功能。

重要提示

尽管 AWS Landing Zone 目前处于长期支持阶段,不会再接收任何新增功能,但它仍然可能出现在考试中。

AWS Control Tower

现在希望根据更新后的架构最佳实践设置 landing zone 的客户,应使用新的 AWS Control Tower。该服务通过使用最新的蓝图来自动化新 landing zone 的设置。作为此 landing zone 一部分创建的一些 AWS 账户包括以下内容:

  • 创建 AWS Organizations 和多账户设置

  • 使用 AWS 单点登录 (SSO) 默认目录服务进行身份与访问管理

  • 使用 SSO 进行账户联合

  • 使用 AWS CloudTrail 和 AWS Config 进行集中日志记录

AWS Control Tower 部署的 landing zone 已配置推荐的安全策略,称为 guardrails,客户可以选择如何配置其账户,以确保符合整体的组织政策。

在这一节中,我们讨论了两项可以轻松用于构建多账户架构的服务。如果要手动执行此操作,将非常耗时且复杂。我们还审视了 AWS Landing Zone 和新的 AWS Control Tower。

在下一节中,我们将讨论如何使用名为 AWS Organizations 的服务来集中管理您的多个 AWS 账户。作为一名云实践者,了解多个账户的需求以及哪些工具可用于管理它们,对于帮助您的客户构建一个强大且安全的云架构至关重要。

管理多个账户 – AWS Organizations

创建 n 个 AWS 账户来帮助您区分不同的工作负载或不同的应用生命周期是非常好的。但您还需要考虑如何有效地管理它们——谁有权限做什么,哪些服务可以在哪些 AWS 账户中启动和配置。

介绍 AWS Organizations

AWS Organizations 服务使您能够集中管理所有的 AWS 账户。该服务是免费提供的;然而,在其中启动的资源是需要收费的,就像您没有使用 AWS Organizations 服务时一样。AWS Organizations 允许您创建一个管理账户(以前称为主账户),然后邀请或创建额外的 AWS 账户,成为该组织的成员账户。AWS Organizations 与多个 AWS 服务紧密集成,并允许您限定哪些服务可以在各个成员账户中使用。

您在每个 AWS Organizations 实例中也可能有多个成员账户,其中一些账户共享相似类型的工作负载或功能。因此,您可以将共享的账户整理到称为组织单位OUs)的组下。OU 是您在 AWS Organizations 中的一个或多个 AWS 账户的逻辑组,允许您将众多 AWS 账户组织成层次结构。这使得管理众多 AWS 账户变得更容易。

然后,您可以将服务控制策略SCPs)应用于您的 OU(或直接应用于 AWS 账户,尽管这不是最佳实践),以对每个账户中可以部署和配置的服务施加限制。在下面的图示中,我们可以看到服务控制策略是如何应用于 OU 的,这些策略决定了属于这些 OU 的 AWS 账户的权限边界:

图 3.2 – 拥有多个账户的 AWS Organizations

图 3.2 – 拥有多个账户的 AWS Organizations

合并账单

AWS Organizations 的另一个关键功能是合并账单。AWS Organizations 可以通过两种选项部署——所有功能或仅启用合并账单功能

  • 所有功能:此选项使您能够利用 AWS Organizations 提供的安全性和管理能力来管理成员账户,通过服务控制策略SCPs)和标签策略。所有功能选项还包括合并账单功能,允许您为所有成员账户提供一个集中账单。管理账户最终负责其他成员账户产生的账单和费用。

  • 合并账单功能:如果您仅启用合并账单功能,您将获得基本的管理工具,并能够为所有成员账户获取一个集中账单。

AWS 组织在多账户策略中的一个主要好处是合并账单功能。管理账户负责所有其成员账户产生的费用,并提供成员账户产生的总 AWS 费用的合并视图。你还可以查看每个单独成员账户产生的费用的详细明细。

一些关键的好处如下:

  • 单一账单:你将收到一张单一账单,显示每个成员账户产生的费用。

  • 轻松跟踪:你可以跟踪单个账户的费用。

  • 量大折扣:在 AWS 组织中合并多个账户后,你可以通过合并各个账户的费用来享受折扣,当总费用超过某些量大折扣阈值时,即可获得折扣。

  • 免费服务:你可以免费使用合并账单功能。

AWS 组织提供集中式管理所有 AWS 账户的功能,帮助你执行安全边界和确保成本管理。你需要多少个 AWS 账户,主要取决于你的业务需求以及是否符合最佳实践的基础设施要求。

你需要多少个 AWS 账户?

决定你需要多少个 AWS 账户时,需仔细考虑业务功能需求、工作负载复杂性、安全性和合规性要求(例如,HIPAA 合规性,要求医疗行业的企业遵循各种指南并实施技术保障以保护个人健康信息的完整性)。

通常,你希望主机上最少数量的账户,以便隔离不同的开发和生产生命周期,并提供故障容错和冗余。你还应该鼓励设计策略,以减少管理开销。

以下讨论展示了你可能需要的一组 AWS 账户的示例,但请记住,依据具体需求,架构可能会有所不同。尽可能根据功能需求和安全控制来创建账户,而不是仅仅根据某种公司层级结构来创建账户。

根据你的架构,你应首先定义在 AWS 组织中需要创建哪些组织单元(OU)。在配置 AWS 组织之前,你需要创建第一个 AWS 账户,或者至少创建一个新的 AWS 账户作为组织的管理账户。

在下一节中,我们将讨论配置 AWS 组织的最佳实践,特别是正确设计你的组织单元(OU)的重要性。

核心 AWS 组织单元(OU)

在基础层面,你应创建一个基础设施 OU 和一个安全性 OU,其中将包含一个共享基础设施服务账户和一个安全账户:

  • 基础设施服务账户:这些账户将包含可跨所有账户共享的服务(例如,目录服务、共享的网络环境和其他常见的 IT 服务,如用于存储您的 Amazon Machine ImagesAMIs)的中央存储库)。

  • 安全服务:这些账户将包含一个集中式的身份与访问管理账户,用于托管个人用户账户、用户组和角色。然后,这些身份将通过跨账户策略授予对其他账户的访问权限,以及其他用于日志记录和审计的服务。

基础核心 OU 将包含非生产和生产 AWS 账户。将非生产与生产分开,可以确保开发中的工作负载与已发布供业务使用的工作负载隔离,并限制任何灾难的影响范围。

额外 OU

根据您的业务用例,您可以拥有任意数量的额外 OU,用于包含适当的账户。如以下示意图所示,您的 AWS 组织将包括核心 OU 以及任何数量的额外 OU,以满足您的个性化业务需求:

图 3.3 – 配置了核心基础设施以及安全性和 AWS 组织额外 OU

图 3.3 – 配置了核心基础设施以及安全性和 AWS 组织额外 OU 的 AWS

为了举例说明,您可能希望为您的组织配置以下额外的 OU:

  • 沙箱 OU:随着您的业务开发新的应用程序或进行实验以改进现有的工作负载,您需要确保影响范围限制在一个您可以承受故障的环境中。沙箱环境应该是一个可以与内部网络断开的账户,并且您必须设定限制,以控制费用并防止过度使用。

  • 工作负载 OU:该 OU 将包含 AWS 账户,在其中托管面向客户的应用程序。理想情况下,您将拥有多个非生产环境,例如开发、测试和预生产环境。您还应该考虑多个生产账户,例如 Prod 1 和 Prod 2,以增强弹性。

  • 挂起的 OU:任何不再使用的账户仍可能需要保留用于审计和合规目的。应用必要的 SCP(服务控制策略),确保只有特定的管理员可以访问这些账户。

上述列表并非详尽无遗,您的 OU 架构将受到功能和技术需求的影响。有关您可以构建的 OU 结构类型的更多指导,请参阅以下网页中的推荐 OU:docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/recommended-ous.html

在本节中,我们了解了 AWS Organizations 服务及其如何用于为你的企业设计和架构多账户策略。我们考察了 AWS Organizations 的核心功能,包括应用 服务控制策略SCPs)的能力,并通过统一账单功能有效管理你的账单和成本。

在接下来的部分,我们将了解 AWS 免费套餐账户,并展示如何创建一个账户,你需要完成本培训指南中的各种动手实验。

AWS 免费套餐账户

AWS 免费套餐账户是一个普通的标准账户,可以用于任何目的或工作负载类型。AWS 为开设任何新账户后的前 12 个月提供慷慨的免费套餐。免费套餐提供对 85 种以上的 AWS 技术和服务(在编写本培训指南时)的访问,如果你使用这些服务达到指定的阈值,你将不会被收费。例如,在免费套餐下,你可以执行以下操作:

  • 免费使用最多 5 GB 的 Amazon S3 存储,最长可达 12 个月。

  • 启动 t.2micro t2.micro 实例,每月运行几个小时,只要总时长不超过每月 750 个计算小时。如果你想进行一些概念验证工作或测试,这可能会非常有用。

  • 每月运行轻量级的 Amazon Relational Database Service(RDS)实例,最多 750 小时。

在接下来的部分,我们将了解在 AWS 免费套餐账户下可用的一些额外功能。

免费工具

除了标准的 12 个月免费套餐外,某些服务是完全免费的,没有时间限制。这些服务可能包括用于部署某些资源的工具。工具本身是免费的,但部署的资源将根据其价格清单收费。以下是一些这些工具的示例:

  • AWS CloudFormation:这是 AWS 提供的一项服务,它允许你定义模板(使用代码)来启动各种基础设施组件。Amazon CloudFormation 使开发人员和架构师能够创建相关的 AWS 和第三方资源集合,并按有序和可预测的方式进行配置和管理。这些模板可以用于重复部署。虽然该服务本身是免费的,但部署的资源和基础设施组件将根据 Amazon 的价格清单收费,例如 EC2 实例、RDS 数据库和网络组件。

  • Amazon Elastic Beanstalk:这是一种编排服务,提供必要的基础设施组件来支持和运行你的应用程序。这些基础设施组件包括 S3 存储桶、EC2 实例和负载均衡器。Amazon Elastic Beanstalk 使开发人员能够轻松上传他们的代码以进行部署,而 AWS 会提供支持该应用程序所需的基础设施。该编排服务本身是免费的,但资源是收费的,如前所述。

除了前述的免费工具外,AWS 在你的 AWS 账户生命周期内,还提供某些服务的有限资源。在接下来的部分,我们将举例说明。

永久免费服务(有限提供)

一些 AWS 服务永久提供完全免费的使用。这些服务允许你在不产生任何费用的情况下创建资源,直到指定的阈值限制。以下是一些示例:

  • Amazon CloudWatch:用于监控你的云资源和应用程序。你可以免费使用 10 个自定义指标和最多 10 个警报,以及最多 1,000,000 次 API 请求。

  • Amazon Lambda:一种无服务器计算服务,可以响应事件运行代码,并帮助你构建无服务器架构。使用 AWS Lambda,你每月可获得最多 1,000,000 次免费请求和每月最多 320 万秒的计算时间。

  • AWS Organizations:集中管理和控制对你的 AWS 账户的访问,并通过合并账单和量化折扣获益。该服务永久完全免费提供。

AWS 还不时提供各种产品试用。在接下来的部分,我们将详细介绍这一点。

免费试用

一些服务提供免费试用,例如提供 30 天的试用期来测试某项服务。以下是一些示例:

  • Amazon Workspaces:这些是可以运行 Linux 或 Windows 操作系统的虚拟桌面。作为试用,你可以获得最多两个标准版工作空间,每个工作空间配有 80 GB 根磁盘和 50 GB 用户磁盘。在免费试用期间,你可以每月合计使用最多 40 小时,持续 2 个月。

  • Amazon Detective:该服务使你能够分析和可视化安全数据,并找出潜在安全问题的根本原因。你可以获得该服务的 30 天免费试用。

  • Redshift:这是一种企业级数据仓库解决方案,可以帮助你查询和结合超大量的结构化和半结构化数据,并进行数据分析与洞察。AWS 提供为期 2 个月的免费试用,每月提供 750 小时的 DC2.Large 节点使用时间。

在本节中,我们查看了 AWS 免费套餐账户的详细信息。亚马逊提供了一系列具有特定限制的服务,免费使用 12 个月。这使你能够尝试这些服务,创建沙箱环境,并开始设计解决方案。AWS 免费套餐对想要学习各种 AWS 服务的学生非常有帮助,为他们的考试做准备。然而,有时你可能需要超过免费套餐的阈值,才能真正学习到更复杂的配置选项。

在下一节中,我们将完成一个实验练习,提供一步一步的指南来创建你的第一个 AWS 账户。

练习 3.1 – 设置你的第一个 AWS 免费套餐账户

以下逐步过程将向你展示如何设置第一个 AWS 账户。你需要以下信息才能完成设置过程:

  • 你的个人详细信息,包括姓名、住址和电子邮件地址。

  • 一部手机。

  • 一张信用卡。尽可能地,本训练指南中的实验将属于免费套餐范围,你部署的这些资源不会收费。然而,少数几个实验可能会超过免费套餐的阈值,如果你选择进行这些实验,可能会有少量的最低费用。我们稍后会更详细地讨论这一点。

现在我们已经了解了要求,下面开始创建账户:

  1. 在你喜欢的浏览器中,搜索术语AWS Free Tier,你应该会找到指向亚马逊网络服务免费套餐的链接。点击第二个链接,如以下截图所示:图 3.4 – 通过谷歌搜索访问 AWS 免费套餐链接

    图 3.4 – 通过谷歌搜索访问 AWS 免费套餐链接

  2. 你将被带到 AWS 免费套餐主页。接下来,点击创建免费账户图 3.5 – 免费账户设置

    图 3.5 – 免费账户设置

  3. 在 AWS 登录页面,点击创建一个新的 AWS 账户图 3.6 – 免费账户设置 – 创建新的 AWS 账户

    图 3.6 – 免费账户设置 – 创建新的 AWS 账户

  4. 接下来,提供电子邮件地址,选择密码,并选择账户名称。账户名称可以是你用来标识账户用途的任何名称,例如 Dev 或 Prod:图 3.7 – 免费账户设置 – 提供电子邮件地址和账户名称

    图 3.7 – 免费账户设置 – 提供电子邮件地址和账户名称

  5. 接下来,你可能需要填写一个验证码表单以确保安全。请输入图像中的字母和数字到提供的文本框中,并点击继续图 3.8 – 免费账户设置 – 安全检查屏幕

    图 3.8 – 免费账户设置 – 安全检查屏幕

  6. 接下来,您需要提供完整的联系信息并选择您要创建的账户类型——个人账户或专业账户。专业账户允许您获得完整的税务发票,并且在某些国家/地区,您可以退还某些类型的税款,例如增值税或消费税。一旦完成表格,请点击创建账户并继续图 3.9 – 免费账户设置 – 提供联系信息

    图 3.9 – 免费账户设置 – 提供联系信息

  7. 接下来,您需要提供您的借记卡或信用卡信息,确认您的地址,然后点击验证并添加图 3.10 – 免费账户设置 – 提供信用卡信息

    图 3.10 – 免费账户设置 – 提供信用卡信息

  8. 您可能需要提供一次性 PIN 码,该验证码将发送到您的手机,以验证卡片信息。在某些国家/地区,您可能需要支付一小笔费用,可能是几美分,用于验证卡片,但这笔费用会通过银行系统退还给您。

  9. 之后,您将收到一个确认您的身份对话框,要求您提供一个电话号码,通过该号码将发送验证码,您可以选择通过短信或语音电话接收验证码。您还需要勾选安全复选框,然后点击例如发送短信选项,正如以下截图所示:图 3.11 – 免费账户设置 – 提供用于验证的电话号码

    图 3.11 – 免费账户设置 – 提供用于验证的电话号码

  10. 然后,您将看到以下对话框,要求您提供已经发送到您手机上的验证码:图 3.12 – 免费账户设置 – 提供通过手机接收到的验证码

    图 3.12 – 免费账户设置 – 提供通过手机接收到的验证码

  11. 输入验证码后,您的账户将被验证,您应该看到以下对话框。点击继续图 3.13 – 免费账户设置 – 完成验证过程

    图 3.13 – 免费账户设置 – 完成验证过程

  12. 您将进入选择支持计划界面,您可以选择该账户的支持计划。为了该账户的设置,请选择基础计划图 3.14 – 免费账户设置 – 选择基础支持计划

    图 3.14 – 免费账户设置 – 选择基础支持计划

  13. 您现在将进入欢迎使用 Amazon Web Services界面。点击登录控制台按钮:图 3.15 – 登录控制台

    图 3.15 – 登录控制台

    确保你选择Root 用户,并提供你用来创建新免费套餐账户的电子邮件地址和密码。这个电子邮件地址和密码组合也被称为 AWS 账户的root 用户,它对你的账户拥有完全的控制权限:

    图 3.16 – 免费账户设置 – 作为 root 用户登录以测试账户设置

    图 3.16 – 免费账户设置 – 作为 root 用户登录以测试账户设置

  14. 登录后,你将看到AWS 管理控制台页面:

图 3.17 – 免费账户设置 – 访问 AWS 管理控制台

图 3.17 – 免费账户设置 – 访问 AWS 管理控制台

在本节中,你创建了第一个 AWS 账户,这将使你能够访问 AWS 的所有服务,跨越其全球基础设施。通过你的 AWS 账户,你现在可以设置和部署各种资源,以支持和托管任何应用程序负载。在下一个练习中,我们将讨论如何设置计费警报。

为了最大化从本次培训中获得的收益,建议你完成所有练习。这将帮助你获得必要的实践经验,并增强在 AWS 上构建实际解决方案的信心。虽然我们确保大部分练习都在免费套餐的阈值范围内,但也有少数练习可能会产生一些费用。你将在练习中收到相关通知,你可以选择是否继续完成这些练习。

此外,你可能会部署某些资源并忘记终止它们,从而导致超过免费套餐的某些阈值。通过设置计费警报,你可以为自己设定一个足够的小预算,以完成所有实验室。设置计费警报后,如果你的总费用超过预算阈值,你将会收到提醒。

我们将在下一节中讨论如何设置计费警报。

练习 3.2 – 设置计费警报

当你配置计费警报时,你需要定义一个金额作为阈值,作为你的最高预算。如果你的 AWS 账户的总费用超过该金额,你将收到提醒通知,并可以采取补救措施。

如前所述,本培训指南提供了多个实践实验室和练习,旨在帮助你获得配置各种服务以在云中托管工作负载的实际操作经验。大多数实验室都属于免费套餐范围,只有少数几个可能会产生极小的费用。我们会标明那些可能产生费用的实验室。确保你完成的实验室能够及时终止,以免忘记它们。

为了完成本培训指南中的所有练习,建议你设置一个 10 美元的计费警报,虽然你可以选择任何你觉得合适的金额。如果你超过了这个金额,你将通过电子邮件收到通知,提醒你立即采取行动。你可以随后终止任何不再需要的实验室。

现在,让我们继续配置你的 AWS 计费警报。我们从启用接收计费提醒的选项开始。这是一个先决步骤,必须在配置计费警报之前完成:

  1. 使用你的根账户凭据登录 AWS 管理控制台。此凭据为你在注册账户时设置的电子邮件地址和密码。

  2. 访问计费和成本管理仪表板:console.aws.amazon.com/billing/

  3. 在左侧导航窗格中,点击计费偏好

  4. 点击接收计费提醒,然后点击保存偏好

以下截图演示了启用计费提醒选项:

图 3.18 – 设置计费警报 – 启用接收计费提醒的选项

图 3.18 – 设置计费警报 – 启用接收计费提醒的选项

现在你已经启用了接收计费提醒的选项,可以继续设置计费警报。请注意,一旦启用了此设置,就无法禁用。

在以下的逐步过程里,当你的 AWS 账户的预计费用超过指定的阈值时,你将创建一个发送电子邮件的警报:

  1. 访问 CloudWatch 控制台:console.aws.amazon.com/cloudwatch/。请注意,计费指标数据存储在 US-East-1 区域。从右上角的菜单中,确保你处于北弗吉尼亚(us-east-1)区域,如以下截图所示:图 3.19 – 设置计费警报 – 导航到北弗吉尼亚区域

    图 3.19 – 设置计费警报 – 导航到北弗吉尼亚区域

  2. 在左侧导航窗格中,选择警报,然后在屏幕的最右侧点击创建警报。你将看到四步的创建警报向导:图 3.20 – 设置计费警报 – 在 CloudWatch 中设置计费警报

    图 3.20 – 设置计费警报 – 在 CloudWatch 中设置计费警报

  3. 步骤 1下,点击选择指标

  4. 所有指标下,点击计费

  5. 接下来,点击总预计费用图 3.21 – 设置计费警报 – 定义“总预计费用”指标

    图 3.21 – 设置计费警报 – 定义“总预计费用”指标

  6. 点击预计费用USD货币旁边的复选框。

  7. 点击选择指标

  8. 在名为指定指标和条件的对话框中,向下滚动并在条件下选择静态作为阈值类型。

  9. 选择Greater > threshold,在Whenever EstimatedCharges is...部分下。

  10. 最后,在定义阈值子标题下,将美元金额设置为10(USD),然后点击下一步,如下截图所示:图 3.22 – 设置计费警报 – 设置计费警报阈值

    图 3.22 – 设置计费警报 – 设置计费警报阈值

  11. 步骤 2中,你现在可以配置警报触发时的操作。为此,点击添加通知按钮:图 3.23 – 设置计费警报 – 设置通知

    图 3.23 – 设置计费警报 – 设置通知

  12. 在警报状态触发器下,确保选中了处于警报状态

  13. 接下来,在选择一个 SNS 主题下,选择创建新主题选项。SNS代表简单通知服务,是一种基于推送的消息服务。你可以配置 SNS 主题,在警报处于警报状态时向你发送电子邮件提醒。我们在第十章中详细讨论了 Amazon SNS,应用程序集成服务

  14. 在标题MyBillingAlerts下。

  15. 接下来,在将接收通知的电子邮件终端...下,提供一个你可以访问的电子邮件地址,通知将发送到这个地址。你可以使用你创建 AWS 账户时所用的电子邮件地址。

  16. 接下来,点击创建主题图 3.24 – 设置计费警报 – 定义用于通知的 SNS 主题

    图 3.24 – 设置计费警报 – 定义用于通知的 SNS 主题

  17. 你创建的 SNS 主题将被生成,并且你会看到通知将发送到的电子邮件地址。

  18. 向屏幕底部滚动,并点击下一步

  19. 步骤 3中,为警报提供一个合适的名称和描述,然后点击下一步图 3.25 – 设置计费警报 – 警报设置

    图 3.25 – 设置计费警报 – 警报设置

  20. 步骤 4中,你可以审查你的设置并通过点击创建警报按钮来确认。

  21. 然后,你会看到 Amazon CloudWatch 中的警报配置状态:图 3.26 – 设置计费警报 – 验证操作状态

    图 3.26 – 设置计费警报 – 验证操作状态

  22. 从前面的截图中你会注意到,你有一个待确认的链接,链接被红色突出显示。当你配置一个 SNS 通知以通过电子邮件发送警报时,你实际上是在订阅你之前创建的 SNS 主题。为了安全起见,并避免恶意消息,你需要登录到你的电子邮件账户并确认订阅。

  23. 登录到你的电子邮件账户,你应该会收到来自 Amazon 的电子邮件,要求你确认订阅,如下截图所示:图 3.27 – 设置计费警报 – 确认通知订阅

    图 3.27 – 设置计费警报 – 确认通知订阅

  24. 点击 确认订阅 链接,以便激活您的订阅。如果您的月度费用超过 10 美元的阈值,您将收到电子邮件通知,您可以终止任何不需要或忘记的实验。

  25. 如果您现在通过点击圆形箭头刷新警报,您将看到待确认的消息消失。此外,由于这是一个全新的账户,您尚未产生任何费用,您会注意到警报处于 OK 状态:

图 3.28 – 设置计费警报 – 验证警报状态

图 3.28 – 设置计费警报 – 验证警报状态

现在您已经设置并配置了 AWS 计费警报,您可以放心,如果超过之前选择的阈值,您将会收到提醒。可以为广泛的服务设置警报,使您能够有效地监控和维护 AWS 上的工作负载。警报是在 Amazon CloudWatch 中配置的,我们将在第十三章中详细讨论,内容为 AWS 管理与治理

总结

在本章中,我们讨论了要访问任何 AWS 服务以部署和配置资源、工作负载和应用程序,您首先需要设置一个 AWS 账户。我们还讨论了拥有多个 AWS 账户的重要性,这将有助于更好地管理您的云生态系统,提供更高的安全性,实施必要的工作负载隔离,并在发生灾难性事件时限制您的影响范围。

通过理解构建多账户策略的思维过程,您已经开始学习与构建云解决方案相关的某些架构最佳实践。具体来说,您已经了解到,多账户设置使您能够提供更高的安全性和可扩展性。

我们还研究了 AWS 组织服务及其如何通过将公共账户放入组织单位(OUs)并使用服务控制策略(SCPs)应用适当的控制,帮助我们集中管理所有 AWS 账户。AWS 组织的另一个好处是集中计费功能,允许您通过将所有账户的费用合并来享受批量折扣。

我们讨论了 AWS 免费套餐及如何通过 12 个月免费的 AWS 账户开始实验。还提供了完整的逐步指南,帮助您轻松设置自己的 AWS 账户,您将在本培训指南中用于各种实验。最后,您学会了如何设置和配置自己的计费警报,如果超出为 AWS 总费用设定的预算阈值,警报会提醒您。

在下一章节中,我们将讨论 AWS 身份与访问管理 (IAM)。AWS IAM 是设计高度安全环境、进行认证与授权服务的核心部分。通过 IAM,你可以创建额外的身份以访问你的 AWS 账户。例如,如果你有一支开发团队将要在 AWS 上开发应用程序,你不希望与他们共享根账户凭证。每个开发者都应该有自己独立的 IAM 用户账户。这样可以更好地进行审计,并且当授予访问权限时,可以遵循最小权限原则。

问题

这里有几个问题来测试你的知识:

  1. 在设置账单警报之前,需要先启用哪个偏好设置?

    1. 启用账单警报

    2. 启用警报

    3. 设置 AWS Organizations

    4. 配置 MFA

  2. 哪个 AWS 服务可以让你通过 SCPs 集中管理多个 AWS 账户,并使用哪些服务来建立权限控制,以启用这些账户中的服务?

    1. AWS Organizations

    2. AWS IAM

    3. AWS VPC

    4. AWS GuardDuty

  3. 以下哪些服务是 AWS 完全免费的?(选择两个答案。)

    1. AWS 身份与访问管理 (IAM)

    2. AWS Elastic Beanstalk

    3. 亚马逊简单存储服务 (Amazon S3)

    4. 亚马逊关系型数据库服务 (Amazon RDS)

    5. AWS 简单通知服务 (SNS)

  4. AWS Organizations 的哪个功能可以让你将每个成员账户的费用合并,以便享受提供的任何批量折扣?

    1. 合并账单

    2. AWS EC2 节省计划

    3. AWS Control Tower

    4. AWS IAM

  5. 创建 AWS 免费套餐账户时,以下哪项是必需的?

    1. 信用卡

    2. 银行账单

    3. 护照或驾照

    4. 来自亚马逊的邀请函

  6. 哪个 AWS 服务可以帮助你自动根据最佳实践设置新的登陆区?

    1. AWS 登陆区

    2. AWS Control Tower

    3. AWS Organizations

    4. AWS 免费套餐账户

  7. AWS Organizations 服务的哪个功能可以让你将 AWS 账户组合到一个包含公共工作负载的容器中,并对这些账户应用一套通用的策略?

    1. AWS Control Tower

    2. AWS 登陆区

    3. 组织单元 (OUs)

    4. 服务控制策略 (SCPs)

第二部分:AWS 技术

在本节中,我们将探讨可以用于在 AWS 平台上构建端到端应用解决方案的各种 AWS 技术解决方案。我们将讨论包括计算、网络、存储和数据库服务在内的核心 AWS 服务,以及如分析、管理和治理、安全等服务。

本书的这一部分包含以下章节:

  • 第四章身份与访问管理

  • 第五章Amazon 简单存储服务(S3)

  • 第六章AWS 网络服务——VPC、Route53 和 CloudFront

  • 第七章AWS 计算服务

  • 第八章AWS 数据库服务

  • 第九章AWS 上的高可用性与弹性

  • 第十章应用集成服务

  • 第十一章AWS 上的分析

  • 第十二章AWS 上的自动化与部署

  • 第十三章AWS 上的管理与治理

第四章:身份与访问管理

到目前为止,您已经了解了云计算的基本概念及其优势。您还了解了 AWS,并对其服务进行了快速概览。我们讨论了 AWS 全球基础设施及其支持计划,帮助那些希望使用所提供服务的客户。我们还强调了 AWS 账户的重要性,以及它们如何帮助您在 AWS 提供的广泛服务中获得隔离且安全的访问权限,从而构建您的云解决方案。我们还阐明了使用多个 AWS 账户并通过 AWS Organizations 集中管理所有账户的架构原因。

您还学会了如何设置您的第一个 AWS 免费套餐账户,这将使您能够开始在平台上配置资源。

本章将介绍 AWS 身份与访问管理IAM)服务。这是一个关键的基础服务,旨在确保安全访问您的 AWS 账户。AWS IAM 是一个身份验证和授权服务,它使您能够决定谁或什么可以访问您账户中的 AWS 服务(称为身份验证),以及这些实体在您的账户中被允许执行的操作(称为授权)。

本章涵盖以下主题:

  • AWS IAM 服务简介

  • 根用户账户与实施 多因素身份验证MFA

  • 定义 IAM 密码策略的重要性

  • IAM 用户与 IAM 用户组之间的主要区别

  • 使用 IAM 策略定义权限

  • 审查凭证报告

  • 练习 4.1 – 创建 IAM 用户组

  • 练习 4.2 – 创建一个 IAM 用户并将其添加到开发者组

  • 练习 4.3 – 以 IAM 用户身份登录您的 AWS 账户

  • 通过 CLI 访问 AWS

  • 练习 4.4 – 在 Windows 计算机上使用 AWS CLI 访问 AWS 平台

AWS IAM 服务简介

到目前为止,您应该已经拥有一个单一的 AWS 免费套餐账户,您可以通过所选的电子邮件地址和密码组合登录。您用来创建账户的电子邮件地址也称为根用户。根用户是创建账户的人,掌握着所有权限。这位特权用户必须得到妥善保护,其凭证(如密码等)不应交给任何未授权使用的人。根用户也不应被用于日常操作。您可以创建额外的用户账户(我们称之为 IAM 用户)来执行日常任务。我们将在本章稍后介绍 IAM 用户。

AWS IAM 控制台

要访问任何 AWS 服务,包括 IAM 服务,您可以使用基于 Web 的管理控制台、命令行界面CLI)或者如果您正在编写代码,则可以使用 AWS SDK。 我们将从 AWS 管理控制台开始。 使用根用户凭据登录到您的 AWS 帐户,您将看到以下闪屏屏幕:

图 4.1 – AWS 管理控制台

图 4.1 – AWS 管理控制台

正如您从屏幕截图中可以看到的那样,各种服务按照类别标题显示,具体取决于服务类型。 因此,例如,我们有计算网络存储等类别,并在这些类别下列出相关服务。

AWS IAM 属于安全、身份和合规性类别,但您也可以使用页面顶部的搜索栏搜索该服务。

AWS IAM 服务

首次访问 IAM 控制台时,您将注意到一些安全警报和一些需要遵循的最佳实践。

您还会注意到 IAM 用户在此帐户中的登录 URL。 这是一个特殊的 URL,您的 IAM 用户可以浏览以访问您的帐户。 此 URL 可以自定义,并且您可以将 https:// 部分后面显示的一系列数字替换为更易记的自定义名称。 您看到的一系列数字实际上是您的 AWS 帐户 ID。

只需点击 PacktDevAccount。 所选名称必须是唯一的,您可能需要将一个常用名称与您的公司名称关联,以创建一个独特的名称:

图 4.2 – IAM 仪表板

图 4.2 – IAM 仪表板

定制 IAM 登录 URL 后,您可以向其他 IAM 用户提供此链接,他们可以使用它登录到您的帐户。 只有在您的用户拥有 IAM 用户帐户以进行登录时,才能这样做。 我们将在本章后面讨论如何创建 IAM 用户。

在下一节中,我们将查看根用户帐户,并讨论使用多因素身份验证MFA)实施额外的安全措施。

根用户帐户和实施多因素身份验证(MFA)

您要做的第一件事之一是为根用户帐户配置 MFA。 通常,当您登录到 AWS 帐户时,只需提供用户名和密码。 您可能已经意识到,您必须选择一个非常复杂的密码 – 一个包含小写字母、大写字母、数字和符号,并且必须是随机生成的密码,而不是可以轻易猜出的字典单词。

然而,在如今的恶意软件攻击、黑客入侵和暴力破解攻击的时代,仅凭用户名和密码的组合是不足够的。MFA(多因素认证)是一种机制,要求您使用多于一组凭证来验证身份。与其只有两个密码,MFA 使用两个独立的密钥来验证您的身份——你知道的东西你拥有的东西。举例来说,您知道的东西可能是您的用户名和密码,而您拥有的东西可能是一个在您拥有的设备上生成的一次性密码。例如,这个设备可以是一个 RSA 令牌、通用第二因素U2F)设备,或一个您可以在智能手机上安装并使用的身份验证应用。

我们强烈建议您为根用户账户设置 MFA。

设置 MFA

让我们快速为根用户账户设置多因素认证(MFA)。为了完成逐步指南,您需要访问智能手机,无论是 Android 还是 iOS 设备。AWS 支持多款基于智能手机的身份验证器,包括 Google Authenticator 和 Microsoft Authenticator。您可以在aws.amazon.com/iam/features/mfa/查看支持的应用程序。在本次操作中,请安装Google Authenticator 应用,该应用可以通过 Google Play 或 iPhone App Store 免费下载。如果您尚未安装该应用,请先安装再继续操作。

确保您已进入 IAM 管理控制台,然后按照以下步骤操作:

  1. 在 IAM 控制台中,点击启用 MFA,在安全警报下:图 4.3 – 安全警报

    图 4.3 – 安全警报

  2. 接着,您将看到安全凭证页面。点击启用 MFA

  3. 弹出对话框后,您需要选择虚拟 MFA 设备图 4.4 – 设置虚拟 MFA 设备

    图 4.4 – 设置虚拟 MFA 设备

  4. 点击继续

  5. 接着,您将看到设置虚拟 MFA 设备对话框。您可以选择扫描二维码,将 Google Authenticator 应用与您的 AWS 账户绑定。首先,启动 Google Authenticator 应用,选择扫描二维码选项(您可能需要先点击加号符号(+))。这将激活您的手机相机。

  6. 在 AWS 控制台的设置虚拟 MFA 设备对话框中,点击显示二维码,位于列表项2下:图 4.5 – 设置虚拟 MFA 设备

    图 4.5 – 设置虚拟 MFA 设备

  7. 屏幕上将显示二维码。此时,您需要将手机相机对准二维码,以便在 Google Authenticator 应用中扫描。

  8. 一旦扫描到二维码,您将看到一个 MFA 代码,持续几秒钟。然后,您需要将该代码输入到 MFA 代码 1 旁边的文本框中。等待下一个代码显示出来,然后将该代码输入到 MFA 代码 2 旁边的文本框中。

  9. 最后,点击 分配 MFA

您的根用户现在已配置 MFA 身份验证。下次您注销后重新登录时,系统将在您输入根用户的电子邮件地址和密码后提示您输入在 Google Authenticator 应用中显示的 MFA 代码。请记住,MFA 一次性密码在几秒钟后过期,因此您需要及时输入应用中显示的代码,或者等待下一个代码。

一旦您提供了 MFA 密码,您将被登录并重定向到 AWS 管理控制台。

在这一部分中,我们向您介绍了基本的 AWS 管理控制台和 AWS IAM。我们还介绍了如何为您的根用户账户配置 MFA。

在下一部分,我们将讨论密码策略,您可以通过它强制要求在您的 AWS 账户中创建的任何 IAM 用户使用强大且复杂的密码。

定义 IAM 密码策略的重要性

现在您已经保护了根用户账户,接下来应该开始为您组织中的其他用户创建账户。请记住,根用户是权限最高的账户,您不应该使用根用户账户进行日常操作。任何需要访问您 AWS 账户中的 AWS 服务的组织成员都必须拥有一个 IAM 用户账户。绝不与其他团队成员共享根用户凭证,即使是与其他管理员共享,因为他们应该使用他们自己拥有适当管理权限的 IAM 账户。

我们将在下一部分讨论 IAM 用户,但现在显而易见,一个 IAM 用户账户将配置密码。如果您有一百个不同的 IAM 用户账户,您需要强制实施某种密码策略,以确保这些账户不会使用容易破解的弱密码。

AWS 密码策略使您能够定义规则以强制实施密码复杂性。这意味着用户将被迫配置符合您复杂性规则的密码,从而确保所有 IAM 用户账户的密码都具有较强的安全性。

密码策略可以从 IAM 仪表板的 账户设置 部分进行配置。

在下一部分,我们将讨论创建额外 IAM 用户和 IAM 组的重要性。IAM 用户是您可以创建的额外身份,除了根用户账户外。一个 IAM 用户可以代表需要访问您 AWS 账户的某个实际人员,例如开发团队中的开发人员或共享 IT 服务团队中的服务器管理员。

IAM 用户和 IAM 组之间的主要区别

在本节中,我们将讨论设置需要访问 AWS 账户的其他身份的重要性。我们还将探讨使用 IAM 组管理这些身份可以或不能在 AWS 账户中执行的最佳实践。

IAM 用户

如前一节所述,除了root 用户外,你还可以创建其他用户,这些用户被称为IAM 用户。IAM 用户可以代表你组织中的实际人员,比如开发团队成员或服务器管理员。然后,这些用户可以使用他们的 IAM 用户账户登录到你的 AWS 账户,并执行你授予他们的权限所允许的任务。

IAM 用户账户也可以被需要对特定 AWS 服务进行身份验证的应用程序和其他服务使用。例如,如果一个应用程序需要更新后端的 Amazon RDS 数据库,你需要确保该应用程序被授权执行此操作。应用程序可以分配一个 IAM 用户账户,使用该账户对数据库进行身份验证,并根据你授予该 IAM 用户账户的权限,应用程序将能够按需修改数据库。尽管允许应用程序对 AWS 服务进行身份验证是可行的,但在大多数使用案例中,这并不是最佳实践。这部分是因为凭证通常以明文存储在某个配置文件中。此外,你还需要实施定期轮换凭证的过程,以提高安全性,但这可能带来管理上的额外负担。AWS 提供了另一种专门为此目的的身份类型,称为 IAM 角色,我们将在本章后续部分讨论。

如前所述,要访问任何 AWS 服务,你可以使用基于 Web 的管理控制台、CLI 或 AWS SDK。要以 IAM 用户身份使用 AWS 管理控制台访问你的 AWS 账户,你需要创建一个用户名和密码组合,使该用户能够对你的 AWS 账户进行身份验证。如果你希望通过 CLI 以编程方式访问你的 AWS 账户,你需要配置一组访问密钥。访问密钥类似于用户名和密码,由访问密钥 ID(如用户名)和秘密访问密钥(如密码)组成。访问密钥用于编程访问,而用户名和密码组合则用于基于 Web 的控制台访问。

在本节中,我们向你介绍了 IAM 用户,它们可以用来代表需要访问你 AWS 账户的实际人员,例如你的同事。也可以为特定应用程序设置 IAM 用户账户,以便它们对你的账户进行身份验证,这些被称为服务账户

在下一节中,我们将讨论 IAM 组,IAM 组使你能够管理一组可能具有共同工作角色的 IAM 用户。

IAM 组

当您为某个需要访问您的 AWS 账户的同事创建 IAM 用户时,您还需要为该用户配置一组权限,以确保他们能够执行其在组织中的角色所需的任务。这些权限通过 IAM 策略分配,我们稍后将详细讨论。

虽然您可以为账户中的每个用户创建单独的 IAM 策略集,但管理用户和分配权限的更好方式是将那些共享相同工作角色的用户组合成一个 AWS IAM 组。通过这样做,您可以通过在组级别应用策略来集中管理分配给该组的用户,这些策略将传递给组内的用户。

例如,如果您有一个由 10 名开发人员组成的团队,他们都需要创建和管理 Amazon S3 存储桶的权限,那么,您可以将相同的权限分配给开发人员组,而不是在 IAM 用户级别为每个用户单独分配权限。然后,您将这些开发人员作为组成员,他们将继承该权限以访问 Amazon S3。

在这一部分,我们探讨了设置 IAM 用户和 IAM 组的重要性。这可以确保您能够为组织中的不同身份授予不同级别的访问权限,并通过 IAM 组来管理这些身份。

在接下来的部分,我们将详细了解 IAM 策略。IAM 策略使我们能够为这些额外的身份定义权限,并控制它们在 AWS 账户中被允许执行的操作。

使用 IAM 策略定义权限

IAM 策略是附加到特定 IAM 身份的对象,例如 IAM 用户、IAM 用户组或 IAM 角色。这些策略定义了身份在 AWS 账户中可以做什么或不能做什么,并以 JSON 文档的形式编写。在下图中,用户 Bob 可以访问并读取 S3 存储桶的内容。该策略附加到 Bob 所在的组,因此他继承了该组的权限。

当主体(IAM 用户或 IAM 角色)尝试访问 AWS 服务时,AWS 会评估附加到该主体的策略文档,并确定该主体可以或不能执行的操作:

图 4.6 – 附加到开发人员组的策略文档,授予 Bob 读取 Marketing Documents 存储桶的权限

图 4.6 – 附加到开发人员组的策略文档,授予 Bob 读取 Marketing Documents 存储桶的权限

IAM 策略使您能够遵循最小权限原则,这意味着身份只能配置为访问执行其角色所需的服务和配置选项,而不能访问其他内容。这大大增强了您 AWS 账户的安全性,并遵循最佳实践。

AWS 提供了六种可以创建的策略类型:

  • 基于身份的策略:这些是附加到 IAM 身份上的策略,指定这些身份在你的 AWS 账户内能做什么或不能做什么。IAM 身份包括你的 IAM 用户、IAM 用户组或 AWS 账户中的 IAM 角色。请注意,你不能将 IAM 身份策略附加到另一个 AWS 账户中的身份上。然而,其他账户中的身份可以配置为承担你 AWS 账户中的 IAM 角色,这样可以为外部身份提供访问你账户中特定服务和资源的权限。我们将在本章后续讨论 IAM 角色。

  • *),这意味着你可以为某些资源授予匿名访问权限。显然,授予匿名访问权限时你需要非常小心。

  • 权限边界:你可以将策略定义为 IAM 实体(用户或角色)的权限边界,这样可以定义身份基础策略可以授予的最大权限集。

  • 组织服务控制策略SCPs):正如上一章所讨论的,组织 SCPs 使你能够为组织的账户成员定义最大权限。SCPs 使你能够限制在成员账户中定义身份或资源基础策略的权限。然而,它们本身不能授予权限。

  • 访问控制列表ACLs):这些是你用来管理对某些资源(例如 Amazon S3 桶和对象)访问权限的权限。你可以使用 ACL 来授予其他 AWS 账户基本的读/写权限;你不能授予你账户中的用户权限。它们在 S3 桶策略不能使用的某些情况下使用,例如 S3 服务器访问日志记录。它们类似于基于资源的策略,但可以配置的权限集在粒度上是有限的。此外,它们不使用 JSON 结构来构建策略。

  • 会话策略:这些策略允许你在通过程序化方式(例如 CLI)访问服务时传递会话策略,以承担角色或联合用户。会话策略允许你限制特定会话的权限。

接下来,让我们进一步详细学习基于身份的策略类型。

基于身份的策略类型

如前所述,基于身份的策略是以 JSON 格式编写的,并且这些策略会附加到 IAM 身份上,定义这些身份在你的 AWS 账户内能做什么或不能做什么。

基于身份的策略可以分类如下:

  • 托管 AWS 策略:这些是 AWS 提供的预配置的标准策略,具有特定的权限。托管策略是独立于任何 IAM 身份创建的,并且可以附加到一个或多个身份。你可以使用这些典型策略来定义大多数所需的权限集,例如授予 Amazon S3 的只读访问权限。AWS 托管策略不能由客户编辑,只有 AWS 可以更新和管理这些策略。

  • 客户托管策略:客户可以创建自己的托管策略,然后根据需要将其附加到任何 IAM 身份上。创建自己的托管策略可以生成更细粒度的权限集。此外,IAM 在每次更新托管策略时最多会创建五个版本,这允许你在必要时恢复到较旧的版本。

  • 内联策略:这些策略是直接创建并附加到 IAM 身份上的,例如 IAM 用户。这也使你能够保持策略与身份之间的严格一对一关系。然而,过多的内联策略可能更难以管理,必须谨慎使用。最终,内联策略与其关联实体的生命周期密切相关。

让我们通过一个示例来理解 IAM 策略。

IAM 策略示例

图 4.6中,我们看到了一个示例,Bob 是开发者组的成员,由于附加到该组的 IAM 策略,他能够访问 Marketing Documents 存储桶。

以下是前面场景中 JSON 策略文档的示例:

图 4.7 – AWS 托管策略:AmazonS3ReadOnlyAccess

图 4.7 – AWS 托管策略:AmazonS3ReadOnlyAccess

上面的截图展示了一个托管的 AWS 策略,它授予附加的身份读取你 AWS 账户中任何 S3 存储桶内容的权限。

身份策略不需要在策略中指定主体,因为它本身会附加到需要指定访问级别的身份上。

我们来看看策略文档的一些组件:

  • Version: 这是当前 AWS 支持的 JSON 文档版本,应该列为2012-10-17

  • Statement:这是策略声明的开始。你可以在一个策略中包含多个声明块,从而在不同的服务之间授予不同级别的访问权限。

  • Effect:该字段指定声明块是否允许某种级别的访问或拒绝访问。

  • Action:这是根据前述Effect语句实际允许或拒绝的权限。您 JSON 文档中的Action组件将指向相关的服务以及所授予的实际权限。因此,在前面的 JSON 语句中,我们允许了两种操作,即 Amazon S3 服务的Get操作和List操作。这意味着与此策略相关的身份将能够列出您的 Amazon S3 存储桶并执行各种其他列出操作,并能够读取存储桶的内容以及其他Get操作。这些操作语句实际上具有可以执行的更细粒度的操作。例如,Get操作包括许多操作,如GetObject(允许您访问对象)和GetBucketVersion(返回存储桶的版本状态)等。您会注意到在前面的截图中,GetList操作后面有星号(*)。当您希望允许某个给定Action语句中的所有操作时,您使用星号(*)。因此,在前面的示例中,Get*将包括GetObjectGetBucketVersion操作。

  • Resource:此组件描述了此策略允许或拒绝访问的实际资源。通配符(*)表示该服务的所有资源。因此,在这种情况下,资源允许对您 AWS 账户中的所有 S3 存储桶执行Get操作和List操作。要将访问限制为特定资源,您需要指定实际的arn:aws:s3:::packt-marketing-docs。因此,我们的 JSON 策略需要进行如下修改:

图 4.8 – 客户管理的策略限制对单个 Amazon S3 存储桶的访问

图 4.8 – 客户管理的策略限制对单个 Amazon S3 存储桶的访问

ARN 由多个部分组成,每一部分由冒号(:)分隔。以下是 ARN 可以构建的格式及其各个部分:

a) arn:partition:service:region:account-id:resource-id

b) arn:partition:service:region:account-id:resource-type/resource-id

c) arn:partition:service:region:account-id:resource-type:resource-id

让我们来看一下各个单独的部分:

a) aws。中国也有一个独立的分区,名为aws-cn,依此类推。

b) s3

c) :)。

d) :)。例如,以下是我们营销文档存储桶的有效 ARN:arn:aws:s3:::packt-marketing-docs

e) user/Johninstance/i-1234567890xydcdeg0.

  • Condition:除了策略文档中定义的前述组件列表外,您还可以为声明创建条件元素,以便根据预定条件进一步限制策略的应用。例如,您可能希望仅在访问来源于您公司内部网络的 IP 地址范围时才允许访问。

在下一节中,我们将学习 IAM 策略模拟器。

IAM 策略模拟器

如果您需要测试策略或排除访问问题,可以使用 IAM 策略模拟器。该工具位于policysim.aws.amazon.com/,可以帮助您排查基于身份的策略、IAM 权限边界、组织的 SCP 和基于资源的策略。请注意,模拟器仅模拟访问尝试及其是否会被授予或拒绝,并不会实际调用服务 API。

在接下来的截图中,您会注意到我们当前选择了 CreateDBInstance 操作,附加了 AllowS3FullAccess 策略。尽管这个示例相对简单,但您可以想象,一个 IAM 用户、组或角色可能附加了多个复杂的策略,通过运行模拟器,您可以测试不同级别的访问权限:

图 4.9 – 亚马逊策略模拟器

图 4.9 – 亚马逊策略模拟器

在本节中,我们探讨了如何基于最小权限原则使用 IAM 策略授予访问权限。我们查看了不同类型的策略以及 IAM 策略的不同类别。我们还检查了典型 IAM 策略的 JSON 结构。

在下一节中,我们将讨论 IAM 角色,IAM 角色是另一种可以用来授予访问您 AWS 账户中服务和资源的身份。

使用 IAM 角色分配临时凭证

虽然 IAM 用户账户通常表示一个物理人,或者可以作为一个需要身份验证的应用程序的“服务账户”使用,但 IAM 角色实际上是独立的身份,可以被其他实体假定以访问 AWS 服务和资源。换句话说,IAM 角色不是附加到特定用户上的。IAM 角色也会附加 IAM 策略文档,用于确定哪些服务和操作可以被授予或拒绝。

IAM 角色通常用于授予以下用例的访问权限:

  • 需要访问您 AWS 账户中另一个服务的 AWS 服务,例如运行在 EC2 实例上的应用程序需要访问数据库来更新客户记录。

  • 需要通过跨账户访问访问您账户中服务的另一个账户中的 IAM 用户。

  • 需要访问您 AWS 账户中资源的来自其他 Web 身份提供商Idp)的联合用户,如 Google、Facebook 或 Amazon。可以使用 IAM 角色授予这些外部用户特定服务和资源的访问权限,而无需为他们创建新的 IAM 用户账户。

  • 需要访问您 AWS 账户中某个服务的使用身份服务(如 Microsoft Active Directory)的联合企业用户。

如前所述,IAM 角色可用于授予联合身份的访问权限。身份联合是一个过程,其中您信任外部身份提供者(IdP)验证给定用户的身份,然后根据此基础授予用户访问权限。在验证用户身份后,IdP 会发送一个声明,声明中包含用户的登录名以及 AWS 用于与用户建立会话所需的任何属性。附加到 IAM 角色的策略随后用于确定可以授予用户的访问级别。

因此,身份联合使您能够授予外部身份访问您的 AWS 环境,无论是通过管理控制台还是 API。它还允许在无需为每个外部用户创建 IAM 用户账户的情况下访问资源。

临时凭证

使用 IAM 角色的一个主要好处是,它们利用了 AWS 定期轮换的临时凭证。例如,使用 IAM 角色时,您可以授予第三方移动应用程序访问您 AWS 账户中资源的权限,而无需将长期凭证存储在用户的手机上。这大大增强了安全性,并减少了管理开销。试想,如果需要为每个使用该应用程序的个人创建 IAM 用户账户,并找到一种安全的方法分发这些 IAM 用户凭证,这将是多么麻烦。IAM 角色能够解决这一问题,因为它们本身不包含任何凭证。

IAM 角色使用一个名为安全令牌服务STS)的服务。STS 服务将临时凭证分配给承担角色的身份。这些临时凭证包括访问密钥 ID秘密访问密钥安全令牌。此安全令牌仅在短时间内有效,过期后将失效。如果身份仍然被允许访问,STS 服务将在凭证过期之前为该身份续订临时凭证,且此过程在后台由 AWS 管理。最终,临时凭证授予用户临时访问您的 AWS 账户中的资源,并且比使用长期访问凭证更安全。

创建 IAM 角色时,您还需要定义一个信任策略。在信任策略中,您指定将被信任来承担该角色的实体。这些实体可以是 AWS 服务,也可以是需要访问您 AWS 资源的外部身份。此外,这些实体本身需要具备权限,才能承担该角色。

如果可能,建议使用 IAM 角色而不是创建 IAM 用户账户,特别是对于组织外部的实体,并且使用临时凭证有很多好处。因此,以需要更新 AWS 账户中数据库的移动应用程序为例,使用 IAM 角色可以确保不会在手机上存储长期凭证,这也大大降低了使用被盗凭证进行恶意攻击的风险。

在这一部分,我们介绍了 IAM 角色,IAM 角色允许你使用临时安全凭证授予对 AWS 服务和资源的安全访问权限。

在接下来的部分,我们将介绍凭证报告,它允许你审计 IAM 身份。

审查凭证报告

AWS 使你能够下载一个逗号分隔值CSV)文件,该文件每 4 小时更新一次,允许你审计 IAM 用户的安全状态并查看重要信息。信息可能包括你 AWS 账户中所有 IAM 用户的列表以及他们凭证的状态(例如是否已配置密码和访问密钥)。该报告还会突出显示你的用户账户是否已配置 MFA。

监控你的凭证报告还可以帮助你发现那些可能最近没有访问你 AWS 账户资源的身份。你可以进一步确定这些用户是否仍然需要访问权限,并从 AWS 账户中删除不需要的用户。

在这一部分,我们介绍了凭证报告,它允许你生成 IAM 用户及其当前访问状态的详细信息。在接下来的部分,我们提供了一些练习,帮助你通过使用 IAM 服务来安全地访问 AWS 账户,从而获得实践经验。

练习 4.1 – 创建一个 IAM 组

在这个练习中,你将为一个开发团队创建一个 IAM 组,该团队将需要对 Amazon S3 具有完全访问权限:

  1. 登录到你的 AWS 账户。

  2. 在你的AWS 服务主页中,点击安全性、身份与合规性类别下的IAM链接。

  3. 从左侧菜单中点击

  4. 接下来,点击创建新组按钮。

  5. 接下来,你将看到一个逐步向导。为你的新组提供一个组名。对于这个练习,输入Developers

  6. 点击屏幕右下角的下一步按钮。

  7. 现在,你需要附加一个策略。你可以创建自己的客户管理策略,但为了本练习的目的,在策略类型筛选框中输入S3。这将缩小与 Amazon S3 相关的可用策略。

  8. 勾选AmazonS3FullAccess策略旁边的复选框。

  9. 点击屏幕右下角的下一步按钮。

  10. 最后,点击屏幕右下角的创建组按钮。

现在,您将看到您的组已创建并列在组名称下。现在,您已创建了一个组,您可以继续创建 IAM 用户并将其添加到组中。这使您可以更有效地管理多个用户。在下一个练习中,我们将创建一个 IAM 用户并将其添加到开发者组。

练习 4.2——创建 IAM 用户

现在您已创建了开发者组,您可以将开发者添加到此组中。为了解释这一点,我们将创建一个新用户,John。John 是我们 Packt 的高级开发人员之一,我们希望确保他是开发者组的成员,这将使他能完全访问 Amazon S3:

  1. 在 IAM 仪表板中,从左侧菜单中点击用户

  2. 点击添加用户按钮。

  3. john(全小写)中。

  4. 接下来,您需要选择要授予 John 的访问类型。John 是开发者,需要同时具备控制台访问权限和编程访问权限。这意味着有时,John 将使用基于 Web 的控制台配置 Amazon S3 中的资源,而其他时候,他可能会使用 CLI。对于本练习,勾选两个框——编程访问AWS 管理控制台访问

  5. 要通过控制台访问 AWS 账户,您需要为用户创建密码。对于john,您可以让 AWS 自动为您生成密码,或者您也可以自己创建一个自定义密码。选择自定义密码并选择一个复杂的密码。将该密码输入提供的文本框中。

  6. 另一个设置,要求重置密码,使您能够强制要求 IAM 用户在下次登录时更改密码。这样,您在他们更改密码时将无法知道他们的密码,而且这也是最佳实践。出于本实验的目的,暂时取消选中此复选框。

  7. 点击屏幕左下角的下一步:权限按钮。

  8. 现在,您可以为用户设置权限。由于我们已经创建了一个权限集正确的组,我们只需将该用户添加为该组的成员。对于本练习,在将用户添加到组下,勾选开发者组旁边的框,并点击屏幕右下角的下一步:标签按钮。

  9. 标签是您可以附加到任何资源的键值对。每个资源最多可以附加 50 个标签,这些标签帮助您更好地分类资源。然后,您可以使用标签来理解成本分配,并识别和管理您的资源。标签可以包含用户信息,例如电子邮件地址,或者可以是描述性信息,例如职位名称。对于本练习,设置一个标签,键设置为Name,值设置为John

  10. 点击屏幕右下角的下一步:审查按钮。

  11. 现在,您可以查看所有用户设置,一旦满意,请点击屏幕右下角的创建用户按钮。

  12. 现在,您将看到一个.csv文件。

  13. 你还会注意到,你已经获得了一个特殊的链接,可以使用 IAM 用户账户登录到你的 AWS 免费层账户。IAM 用户的 AWS 账户登录页面与根用户的登录页面略有不同。这是因为当你作为 IAM 用户登录时,你需要指定你要登录的 AWS 账户 ID。在我们的示例中,我们有一个这样的链接:

    Users with AWS Management Console access can sign-in at: https://111222333444.signin.aws.amazon.com/console
    

    .signin 前的一串数字代表你的 AWS 账户 ID。

  14. 点击屏幕右下角的关闭按钮以退出用户设置向导。

我们现在已经创建了一个代表我们组织中开发者的用户,并且我们已将该用户添加到开发者组。在下一个练习中,你将学习如何以你之前创建的 IAM 用户身份访问你的 AWS 账户。

练习 4.3 – 作为 IAM 用户登录你的 AWS 账户

在本练习中,我们以根用户身份退出 AWS 账户,然后重新以你刚刚创建的 IAM 用户身份登录。如果你没有记下那个特殊的登录链接,你需要知道你的 AWS 账户 ID。你可以通过点击你在基于 Web 的管理控制台右上角的账户名称来轻松发现它,并记下账户 ID:

图 4.10 – 点击账户名称时出现的下拉框,用于发现账户 ID,该 ID 显示在“我的账户”后面

图 4.10 – 点击账户名称时出现的下拉框,用于发现账户 ID,该 ID 显示在“我的账户”后面

现在你已经有了账户 ID(或者你可以记下之前讨论过的登录 URL),我们可以继续以你之前创建的 IAM 用户身份登录:

  1. 退出 AWS 账户(记住,你目前是以根用户身份登录的)。

  2. 你将进入 AWS 控制台首页,在那里你可以点击重新登录按钮或登录控制台按钮。

  3. 点击这两者中的任何一个都会带你到 AWS 登录页面。

  4. 点击IAM 用户并在可用的文本框中提供账户 ID:图 4.11 – AWS 登录页面

    图 4.11 – AWS 登录页面

  5. 提供账户 ID 后,点击下一步

  6. 现在,提供你的用户名,在本例中是 john,以及你在创建用户时选择的密码。

  7. 你现在将以我们的开发者 John 身份登录到 AWS 管理控制台。你会注意到你的用户名显示在屏幕的右上角:

图 4.12 – IAM 用户 John 已成功登录到该 AWS 账户

图 4.12 – IAM 用户 John 已成功登录到该 AWS 账户

在本节中,我们完成了一系列使用 AWS IAM 服务的练习。我们演示了如何创建 IAM 组和用户,以及如何以 IAM 用户身份登录 AWS 管理控制台。

在下一节中,我们将讨论如何使用 AWS CLI 访问你的 AWS 账户。

使用 CLI 访问 AWS 平台

如前所述,您可以通过基于 Web 的管理控制台或 CLI 访问广泛的 AWS 服务。AWS CLI 是一个统一的工具,用于以编程方式管理您的 AWS 服务。AWS CLI 为您提供每个 AWS 服务的 应用程序编程接口 (API) 的访问权限。这使得您能够远程访问您的 AWS 账户,并在 Linux 和 Mac 计算机上的终端应用程序中运行命令,或者在 Windows 计算机上使用命令提示符。

因此,AWS CLI 非常适合运行简单命令以完成重复性任务,并且由于单个命令字符串可以包含请求所需的属性,您会发现它比在 Web 控制台中使用鼠标点击要快得多。CLI 是您需要习惯的工具——首先,您需要了解如何构建命令,但 AWS 提供了完整的参考文档来帮助您。

您可以逐行单独运行 CLI 命令,也可以创建脚本来运行一系列命令以完成一组任务。例如,您可以创建一个脚本来启动一个新的 EC2 实例,将其配置为 Web 服务器,并安装任何第三方应用程序。

通过 CLI 访问您的账户

本节将指导您完成在计算机上配置 CLI 并使用 John 的账户访问 AWS 平台的步骤。

重要提示

强烈建议除非有特定需求,否则避免为 root 用户账户创建和使用访问密钥。例如,为了在 Amazon S3 存储桶上启用 MFA 删除(我们将在 第五章中讨论,Amazon Simple Storage Service (S3)),您需要使用 CLI,届时您将需要一组访问密钥。问题在于,当您使用 AWS CLI 访问 AWS 账户时,您的凭证(访问密钥 ID 和密钥访问密钥)会存储在您使用的计算机上。这意味着您应该定期旋转您的密钥,并确保保护您的计算机,例如启用本地磁盘加密。作为最佳实践,如果您需要为 root 用户账户创建一组访问密钥,您应该按照以下流程:创建密钥、使用它们完成特定任务,然后在任务完成后禁用或删除密钥。

因此,使用 CLI 从本地计算机作为 root 用户访问您的 AWS 账户意味着 root 用户的凭证也会存储在本地机器上。这被认为是一个重大安全风险,因为您真的不应该将 root 用户账户用于日常操作。即使您需要完全的管理权限,理想情况下也应该创建一个 IAM 用户,并为其分配必要的管理员权限。然后,您可以使用 IAM 管理员用户账户凭证来配置您的 AWS CLI。

root 用户是你账户的最终所有者,甚至可以关闭你的账户。这就是为什么建议在管理 root 用户的凭证时要极其小心的原因。

下载 CLI 工具

要使用 AWS CLI,你首先需要将其下载并安装到本地计算机。你可以在这里访问 AWS CLI 工具:aws.amazon.com/cli/

根据你的操作系统,你需要下载并安装适当的工具。目前 AWS CLI 工具的版本是 2,带有新的和改进的安装程序、新的配置选项,例如 AWS 单点登录SSO)和各种互动功能。你可以下载适合你操作系统的安装程序,无论是 Windows、Mac 还是 Linux。之前,你需要安装 Python 才能使用 AWS CLI,但现在不再需要了。

从前面的链接下载并安装适合你操作系统的安装程序:

图 4.13 – 下载适合你操作系统的 AWS CLI 安装程序的链接

图 4.13 – 下载适合你操作系统的 AWS CLI 安装程序的链接

安装完 AWS CLI 后,下一步是配置它,使用一组访问密钥来以编程方式登录到你的 AWS 账户。如果你使用的是 Windows,可以从命令提示符访问 AWS CLI。如果你使用的是 Linux 或 Mac,可以使用终端应用程序。安装程序会自动设置任何环境变量,因此你可以在命令提示符的任何地方访问该工具。

在下一个练习中,你将学习如何在 Windows 计算机上使用 Amazon CLI 访问 AWS 平台。

练习 4.4 – 使用 AWS CLI 在 Windows 计算机上访问 AWS 平台

一旦你在 Windows 机器上安装了 AWS CLI 工具,下一步是配置它,以作为你之前创建的 IAM 用户来访问你的 AWS 账户:

  1. 打开凭证文件,这个文件是你在创建 IAM 用户john时下载的。该文件包含你用户的访问密钥,包括访问密钥 ID秘密访问密钥

  2. 在你的 Windows 桌面上,点击CMD图 4.14 – Windows 计算机上的命令提示符

    图 4.14 – Windows 计算机上的命令提示符

  3. 在提示符下,输入AWS configure以开始配置过程。

  4. 然后你将被提示输入AWS 访问密钥 ID,接着输入AWS 秘密访问密钥。这些密钥在你之前下载的凭证文件中。

  5. 对于us-east-1

  6. 对于默认输出格式,保持空白并按Enter图 4.15 – 配置 AWS CLI 的访问密钥 ID 和秘密访问密钥

    图 4.15 – 配置 AWS CLI 的访问密钥 ID 和秘密访问密钥

  7. 你的 AWS CLI 工具现在已配置为使用 John 的凭证。

  8. 您可以尝试运行诸如aws s3 ls的命令。此命令列出您账户中的任何 Amazon S3 存储桶。如果您还没有创建任何存储桶,则只会返回提示符。在我的情况下,您可以在以下截图中看到,我已经在我的账户中有一个存储桶:

图 4.16 – 配置 AWS CLI 与访问密钥 ID 和秘密访问密钥

图 4.16 – 配置 AWS CLI 与访问密钥 ID 和秘密访问密钥

在本节中,我们讨论了配置 AWS CLI 工具所需的必要步骤,以便您可以在 Windows 机器上使用命令提示符作为 IAM 用户访问您的 AWS 账户。您也可以在 Mac 或 Linux 计算机上使用终端完成相同的任务。您需要为您的操作系统安装适当的工具。

使用 CLI 可以非常高效,特别是当你尝试执行重复任务时,你还可以创建脚本来自动化整个过程。

你应该尝试避免使用根账号执行 AWS 账户中的任何日常操作。相反,你必须使用仅具有执行当前任务所需权限的 IAM 用户账号登录。这被称为遵循最小权限原则。

在下一个练习中,你将创建另一个 IAM 用户账号,用于接下来章节中的所有练习。

练习 4.5 – 创建具有管理权限的 IAM 用户

在这个练习中,你将创建另一个 IAM 用户账号,用于登录到你的 AWS 账户。这个 IAM 用户将被赋予完整的管理访问权限,帮助你轻松完成即将进行的练习,尽管在实际环境中,你会希望限制权限仅限于相关用户的工作职能。习惯以 IAM 用户身份登录,将有助于你养成日常任务避免使用根用户凭证的习惯:

  1. 确保您已经作为根用户(您用来创建 AWS 账户的电子邮件地址和密码组合)登录到您的 AWS 账户。

  2. 导航至 IAM 仪表板。

  3. 从左侧菜单中,点击用户。然后,从右侧窗格中,点击添加用户

    你将被重定向到添加用户向导页面。

  4. 对于用户名,输入Alice。在本指南的其余部分,您将以Alice身份登录,并完成所有即将进行的练习。

  5. 选择 AWS 访问类型下,选择程序化访问AWS 管理控制台访问

  6. 对于控制台密码,选择自定义密码选项,并提供您选择的复杂密码。

  7. 取消要求密码重置旁边的复选框,然后点击下一步:权限按钮。

  8. 在第 2 步中,在设置权限下,选择直接附加现有策略选项。这将允许您仅向 Alice 的账户附加内联策略。

  9. 从提供的策略列表中,选择AdministratorAccess旁边的复选框,如下图所示:图 4.17 – 拥有管理员访问权限的 IAM 用户(Alice)

    图 4.17 – 拥有管理员访问权限的 IAM 用户(Alice)

  10. 点击屏幕底部的下一步:标签按钮。

  11. 在第 3 步中,名称的值设置为Alice

  12. 点击下一步:审查按钮。

  13. 接下来,点击创建用户按钮。

  14. 然后,系统会提示你下载包含 Alice 访问密钥和秘密访问密钥的.csv文件。下载该文件,并确保将其保存在你电脑上一个易于访问的文件夹中。下载后,点击关闭按钮。

  15. 你的 IAM 用户 Alice 现在可以登录了。从现在开始,你需要以 IAM 用户 Alice 的身份登录进行所有后续练习。确保你记下 AWS 账户的特殊登录链接或 AWS 账户 ID,这些信息将在你作为 IAM 用户登录时需要使用。

在本次练习中,你创建了一个 IAM 用户账户,用于登录到你的 AWS 账户并执行所有后续练习。在下一部分,我们将回顾本章的总结。

总结

在本章中,我们讨论了 AWS IAM 服务以及它如何充当你 AWS 账户的守门人。我们讨论了账户的根用户,这是你 AWS 账户中最高级别的管理员账户。根用户具有完全的访问权限,使用 MFA 保护此账户是推荐的最佳实践。

使用 AWS IAM,你可以创建和管理身份,这些身份被授予或拒绝访问你账户中各种 AWS 服务的权限。这些身份可以包括 IAM 用户、IAM 用户组或 IAM 角色。你还可以通过为 IAM 用户配置 MFA,进一步增强 IAM 用户的安全性。

我们讨论了配置 IAM 用户和 IAM 组时的最佳实践。我们强调,作为最佳实践,你应该创建 IAM 组,并将所有需要的 IAM 用户放入共享任务的组中。例如,如果你有一个开发人员组,你可以将所有开发人员放入该组。此外,你还可以创建 IAM 策略,并将其附加到你的 IAM 身份上,以确定它们在 AWS 账户中可以或不能做的事情。因此,AWS IAM 为你的账户提供身份验证和授权服务。

我们还研究了 IAM 角色,IAM 角色允许你创建不专门附加到任何物理用户的身份。IAM 角色使你能够授予那些可能没有访问权限的实体访问权限。IAM 角色可用于在需要时向实体授予临时凭证,并且根据用例,它们比使用 IAM 用户账户更安全。

接下来,我们讨论了凭证报告,它允许你审计 AWS 账户中现有的用户基础并审计使用模式。最后,我们介绍了如何使用 AWS CLI 访问你的 AWS 账户。

到目前为止,您已经了解了创建 IAM 用户、组和角色的重要性,并理解了它们的应用。您已经了解到根用户帐户不能用于日常操作,必须为根用户帐户和 IAM 用户设置 MFA。您还学习了如何使用 IAM 角色授予跨帐户访问和联合访问,并使一个 AWS 服务能够访问另一个 AWS 服务。您还了解了如何使用 IAM 策略强制实施最小权限原则,从而提高 AWS 帐户的安全性。

在下一章中,我们将介绍另一个核心 AWS 服务,名为Amazon 简单存储服务Amazon S3)。Amazon S3 是一个对象存储解决方案,允许您在云中存储无限量的数据。Amazon S3 可用于广泛的使用场景,包括存储 Web 应用程序的数字资产,如文档、图像和视频,以及归档存储。

问题

下面是一些测试您知识的问题:

  1. 您希望在 AWS 上部署开发和测试环境,并希望确保您的开发人员可以通过高度安全的身份验证过程访问您的 AWS 帐户,并遵循最佳实践。以下哪两种配置选项将帮助确保增强的安全性?(选择两个答案)

    1. 配置 IAM 帐户以使用 MFA。

    2. 配置您的 IAM 密码策略并设置复杂性规则。

    3. 确保加密您的 EBS 卷。

    4. 使用 Multi-AZ 创建 RDS 数据库。

    5. 将根帐户凭证提供给您的开发人员。

  2. 您的开发人员这周末在家工作,需要通过 CLI 访问您的 AWS 帐户,以从他们的本地计算机配置 RDS 数据库。为了在他们的机器上配置 AWS CLI 工具,他们需要哪种类型的 IAM 凭证?

    1. IAM 用户名和密码

    2. 访问密钥 ID 和秘密访问密钥

    3. 访问密钥和秘密 ID

    4. HTTPS

  3. 哪个 AWS 服务可以帮助您排查 IAM 策略并识别可能拒绝访问特定 AWS 服务的权限集?

    1. IAM 策略模拟器

    2. CloudWatch

    3. CloudTrail

    4. IAM 策略管理器

  4. 以下哪项 AWS 服务更适合安全地授予在 EC2 实例上运行的应用程序访问在 Amazon RDS 上运行的后端数据库的权限?

    1. 访问密钥

    2. IAM 角色

    3. IAM 组

    4. 安全组

  5. IAM 策略文档是以哪种格式编写的?

    1. JSON

    2. YAML

    3. XML

    4. JAVA

  6. 在为 IAM 用户和组分配权限时,您应该遵循哪种最佳实践策略?

    1. 遵循最小权限原则。

    2. 遵循最大权限原则。

    3. 遵循 ITIL 原则。

    4. 遵循 GDPR 原则。

  7. 哪个 IAM 服务允许您通过根据工作职能创建用户集合,并根据角色为整个集合分配权限,从而有效地管理用户?

    1. IAM 组

    2. IAM 策略

    3. IAM 集合

    4. IAM 角色集

  8. IAM 的哪个功能使您能够使用现有的公司 Active Directory 用户凭证登录 AWS 管理控制台,从而提供单点登录(SSO)服务?

    1. 身份联合

    2. IAM 用户数据库

    3. Active Directory 用户和计算机

    4. 多因素认证(MFA)

  9. 哪个 AWS 服务使您能够生成并下载一个报告,列出您的 IAM 用户及其各种凭证的状态,包括密码、访问密钥和 MFA 设备?

    1. AWS 策略

    2. AWS 资源浏览器

    3. 凭证报告

    4. 用户报告

  10. 哪个 AWS 服务负责为承担 IAM 角色的实体分配和管理临时凭证?

    1. AWS 密码管理器

    2. AWS 安全令牌服务

    3. AWS 凭证管理器

    4. AWS 凭证报告

第五章: Amazon 简单存储服务(S3)

本章将介绍 Amazon Web ServicesAWS)的其中一项存储服务。许多刚开始云端之旅的客户,往往将云存储服务视为长期走向云原生的垫脚石。虽然存储选项这些年来变得更为便宜,但事实依然是,随着时间的推移,我们对存储的需求不断增加。话虽如此,组织在处理存储需求时,必须制定一个智能的生命周期政策。公司可能需要根据合规性和监管要求保留数据长达 7 到 10 年。然而,随着时间的推移,某些数据不再需要保存,从网络中清除这些数据不仅能简化管理,还能节省成本。

访问 AWS 存储服务非常简单,与其购买新的存储硬件来进行本地托管,不如使用 AWS 等云供应商提供的服务,既简单又具有成本效益。当然,某些类型的数据可能需要本地存储,主要是由于延迟问题,但从安全角度来看,AWS 提供了多种选项,确保您的数据仅对您可访问。

AWS 提供不同的存储选项,本章将介绍其旗舰产品之一:Amazon 简单存储服务Amazon S3)。Amazon S3 是一种对象存储解决方案,提供非常高的可用性、耐久性和可扩展性。AWS 还提供其他类型的存储选项,我们将在后续章节中进行探讨。

在本章结束时,您将了解 AWS 对象存储的基础知识,以及 Amazon S3 如何帮助满足您企业在云端的核心存储需求。您还将学习如何使用各种功能来管理您的云存储、解决合规性和法规问题,并设计具有成本效益的解决方案。最后,您将学习如何从本地位置访问云存储,并如何将大型数据集迁移到云端。

本章的主题包括以下内容:

  • AWS 存储选项简介

  • Amazon S3 简介

  • 了解 Amazon S3 Glacier 的归档解决方案

  • 使用 Amazon Storage Gateway 将您的本地存储连接到 AWS

  • 使用 Amazon Snow Family 将大型数据集迁移到 AWS

  • 练习 5.1—设置一个 Amazon S3 存储桶

  • 练习 5.2—配置 S3 存储桶的公共访问

  • 练习 5.3—启用存储桶的版本控制

  • 练习 5.4—设置静态网站托管

技术要求

为了完成本章中的练习,您需要通过 AWS 管理控制台拥有一个 AWS 账户。您需要使用上章创建的 IAM 用户 Alice 登录。

AWS 存储选项简介

存储服务提供了必要的基础设施,帮助你存储和访问数据。然而,不同的使用场景需要不同的存储架构,以确保性能、可靠性、持久性和对数据的正确访问类型。AWS 提供了三种主要的存储选项,每一种都能满足不同的需求。

块存储

块存储是一种架构设计,它将数据存储在硬盘等介质上,分成固定大小的块。数据被拆分成小块,并按这些块放置在介质上,每个块分配一个唯一的地址,作为其元数据的一部分。块存储利用管理软件(通常是操作系统的一部分)来组织这些数据块。当用户尝试检索文件时,管理软件会识别要检索的块,重新组装数据,并将整个文件呈现给用户。

在 AWS 上,块存储选项包括弹性块存储EBS)。这些可以配置为附加到你的弹性计算云EC2)实例的卷,并提供高性能工作负载所需的超低延迟。EBS 卷的一个优点是,它们并不是直接附加到你部署的 EC2 实例,而是通过高速网络连接。这使得你可以将一个 EBS 卷从一个 EC2 实例上卸载,并将其附加到另一个实例上,例如,当第一个 EC2 实例发生故障时。

典型的使用场景包括运行和管理系统文件,例如操作系统使用的文件、大型数据库,或者像企业资源规划ERP)解决方案这样的应用程序。这些类型的应用程序需要非常低延迟的数据访问,通常会使用直接附加存储DAS)或存储区域网络SANs)。

文件存储

另一种存储架构设计是文件存储。该架构为您的企业数据提供了一个集中的位置,文件存储在文件夹和子文件夹中。文件存储提供了一种层次结构来存储数据,这意味着你可以模仿现实生活中的文件柜来组织数据。

数据的检索需要你了解文件和文件夹结构并提供相关信息。例如,如果我需要查看去年八月的资产负债表 Excel 文件,我需要查找2020文件夹和August子文件夹,这样我就能检索到那个特定的数据。

由于文件存储的特性,元数据可能有限,需要注意的一个关键限制是,由于操作系统的限制,你不能无限制地创建文件夹和子文件夹。你的层次结构也可能导致一些性能问题,因此你需要仔细决定这一结构。

文件存储非常适合用于公司内部的文件共享。由于有文件夹/子文件夹结构,数据可以很容易地组织,以便与组织结构紧密契合。

亚马逊提供了三种不同的文件存储系统,具体如下:

  • 弹性文件系统EFS)——这是一个托管的弹性文件系统,旨在让你共享文件数据,而无需像使用 EBS 那样配置或管理存储。你的文件系统会随着你添加和删除数据而增长或缩小,且挂载点只能在 Linux EC2 实例上创建。

  • FSx for Lustre——这是一个高性能文件系统,设计用于需要快速存储的应用,并且能够扩展到数百 GB(GB)的吞吐量和数百万次的输入/输出操作每秒IOPS)。FSx for Lustre 同样适用于广泛的基于 Linux 的 EC2 实例。

  • FSx for Windows File Server——专为 Microsoft Windows EC2 实例设计,提供一个完全托管的文件共享解决方案,原生支持 Windows 文件系统,如行业标准的服务器消息块SMB)协议。典型的使用案例包括文件共享服务、当地归档、应用数据共享和数据保护。

对象存储

相比之下,对象存储涉及将完整的文件存储为独立的对象。对象存储呈现平面文件结构——你创建某种形式的容器,并将对象存放在这个容器中,而不使用任何文件夹或文件级别的层次结构。这也被称为非结构化数据。对象存储的元数据(有关对象的信息,例如其名称等),以及其他属性,然后用于创建一个独特的标识符,以便轻松定位存储池中的数据。由于对象存储的性质,元数据可以包含大量信息,使得你比使用基于文件的存储解决方案更容易利用对象存储进行数据分析。

另一个好处是,对象存储非常适合提供更高水平的性能、耐用性和可扩展性。在文件级存储解决方案中,文件夹和文件结构的深度通常会受到你使用的操作系统的限制。然而,使用对象存储时,你可以在理论上扩展到存储无限量的数据。

平面文件结构是另一个优势点,因为它通过扩展的分类功能,使得你能够比从文件存储服务中检索数据更快地获取数据。

在 AWS 上,亚马逊 S3 服务提供了对象存储选项。Amazon S3 允许你创建被称为存储桶的容器,在这些容器中你以平面文件结构(无结构方式)存放数据(对象)。你可以随时随地存储和检索任意数量的数据。

对象存储的典型使用案例包括为您的网站和应用程序存储数字资产(文档、图片、视频),对您的对象进行分析的能力,以及为像物联网IoT)这样的前沿技术提供存储解决方案。

在本节中,我们探讨了可用的三种主要存储选项、它们的关键特性和典型使用案例。我们还重点介绍了一些提供存储解决方案的 AWS 服务示例。

在下一节中,我们将向您介绍 Amazon S3 服务,它是云端的对象存储解决方案。

Amazon S3 简介

Amazon S3 是 Amazon 的旗舰产品之一,提供一个强大、可扩展、耐用且具有成本效益的对象存储解决方案。客户可以使用 Amazon S3 存储任何数量的数据,适用于各种使用案例,包括网站的数字媒体内容、数据湖、移动应用程序、物联网设备数据和大数据分析。

Amazon S3 提供高达 99.999999999% 的耐久性,满足大多数客户及其个别业务需求的存储要求。

“十一 9”耐久性是什么意思?根据 AWS 的说法,如果您在 Amazon S3 上存储 10,000,000 个对象,那么平均而言,您可以预期每 10,000 年丢失一个对象。您可以在此处查看所有常见问题解答FAQs):aws.amazon.com/s3/faqs/

桶和对象

在您可以将任何数据上传到 Amazon S3 之前,您需要创建一个名为桶(bucket)的容器。桶需要具有唯一的全局命名空间,因为它们的内容可以通过公共互联网访问。这意味着您的桶名称必须在 AWS 生态系统中是唯一的。例如,存储在名为 just-desserts 的桶中的名为 blueberry-muffin.txt 的文档,可以通过互联网以两种主要方式进行访问,具体如下:

创建存储桶时,您可能会发现常见的名称不可用。例如,如果您想创建名为marketing的存储桶,那么您很可能无法使用这个名称,因为它可能已经被使用了。您可以通过创建带有独特前缀或后缀的营销存储桶来获得合适的名称。大多数公司会尝试将存储桶名称与其组织名称或项目名称相关联——例如,您的营销存储桶名称可以是my-company-marketing。也就是说,您仍然不能仅依赖于您为存储桶定义的任何特定命名约定,因为另一个客户可能选择了您可能想要的相同名称,并且存储桶名称是按先到先得的原则定义的。

以下是 Amazon S3 存储桶的一些关键属性:

  • 存储桶名称必须介于 3 到 63 个字符之间。

  • 存储桶名称必须始终为小写字母。然而,它们只能包含数字、连字符(-)和点(.)。

  • 存储桶名称必须以字母或数字开头和结尾,并且名称之间不能包含空格。

  • 存储桶名称不能格式化为192.168.1.1)。

  • 存储桶名称不能包含。)。我们将在本章后面讨论 Amazon S3TA。

  • 您不能创建嵌套的存储桶——例如,在一个存储桶中再创建一个存储桶。

    重要提示

    除了网站风格的端点,您应避免在存储桶名称中使用点(.),因为它们无法与使用安全套接字层SSL)和安全超文本传输协议HTTPS)的虚拟托管风格端点一起使用。请注意,它们与网站风格的端点一起使用的唯一原因是静态网站托管仅通过 HTTP 提供。如果您需要通过 HTTPS 提供内容,可以通过结合使用 Amazon CloudFront 分发点来解决此问题。我们将在 第六章 中讨论 CloudFront,AWS 网络服务 – VPC、Route53 和 CloudFront

存储在 Amazon S3 存储桶中的任何数据都表示为一个对象。对象是完整地存储在给定存储桶中,而不是像块存储那样,文件可能会被拆分成块并存储在硬盘等介质上。如前所述,对象是以扁平文件系统的方式存储的。这意味着访问一个对象需要知道它的唯一 ID,这通常是对象元数据的一部分。您可以在一个存储桶中存储无限数量的对象,且 Amazon S3 上单个对象的最大大小为 5 TB太字节)。

对象的文件名被称为!-_.*()

管理存储桶中的对象

如前所述,对象存储在/)参数中,帮助您以层次化方式管理和浏览对象。

乍一看,前缀和分隔符(/)的使用看起来像是典型的文件夹层次结构,但前缀和分隔符本身也构成了对象的,正如我们在以下截图中看到的那样:

图 5.1 – 亚马逊 S3 前缀和分隔符示例

图 5.1 – 亚马逊 S3 前缀和分隔符示例

正如你在前面的截图中看到的,名为第五章 – Amazon Simple Storage Service S3.docx的文件(对象)似乎存储在名为cloud-practitioner的子文件夹下,该子文件夹位于名为campaign的另一个子文件夹内,并存储在名为packt-marketing的存储桶中。

这种架构允许你更好地管理对象,但事实是,对象本身的键由这些前缀和分隔符组成。这意味着development/sourcecodes.phpproduction/sourcecodes.php键可以存在于同一个存储桶中,并因为前缀不同而被视为独特的对象。

前缀还用于帮助你将搜索结果限制为仅包含以特定前缀名称开头的键。此外,分隔符使你能够执行列出操作,从而将所有共享相同前缀的键作为单个汇总列表结果检索。

前缀在访问 Amazon S3 中的对象时进一步提高性能。例如,你可以每秒每个GET操作实现 3,500 次PUT/COPY/POST/DELETE或 5,500 次GET/HEAD操作。

区域托管 – 全球可用性

如果你定义了必要的权限,你的存储桶及其中的对象是全球可访问的。然而,重要的是要意识到,给定的存储桶及其包含的任何对象仅存储在一个特定的区域中。当你使用 Web 控制台、命令行界面CLI)或通过应用程序编程接口API)访问在 AWS 账户中创建 Amazon S3 存储桶时,必须指定你希望创建存储桶的区域

你选择创建存储桶的区域将取决于多个因素,包括以下几个:

  • 通过在需要访问的终端用户附近创建存储桶来优化延迟

  • 降低成本

  • 满足任何监管要求,例如数据主权法律

亚马逊绝不会在你创建数据的区域以外复制你的数据。这为你提供了确保可以满足并遵守作为企业可能需要遵循的任何数据驻留法律的保障。

然而,你可以将某个区域内一个存储桶的内容复制到另一个区域的存储桶,用于多个用例,包括灾难恢复(DR)或与同事共享内容,以便数据更接近他们,从而减少整体延迟。

访问权限

要创建和管理您的 Amazon S3 桶并上传和下载对象到桶中,您需要定义必要的权限。默认情况下,只有资源所有者,即创建资源的 AWS 账户,才能访问桶。

然而,您还可以授予您账户中其他用户的访问权限,并为特定的身份和访问管理IAM)角色定义权限,以使其能够访问这些资源。此外,您还可以授予其他 AWS 账户的用户访问权限,甚至通过配置匿名访问来授予公众成员访问权限。当您希望为网站托管公开可访问的数字资产(如文档、图片和视频)时,匿名访问是理想的选择。

亚马逊 S3 提供两种主要方法来授予对资源(如桶和对象)的访问权限。您可以附加一个称为桶策略的基于资源的策略,或者您可以附加访问控制列表ACL)。接下来,让我们研究这两种授予访问权限的方法。

桶策略

桶策略直接应用于整个桶,并可用于授予对桶本身及其中存储的对象的访问权限。桶策略可用于为同一策略文档中的不同类型对象指定不同级别的访问权限。桶策略文档也采用JavaScript 对象表示法格式JSON),就像 IAM 策略一样。

使用桶策略,您还可以授予对桶中对象的匿名访问权限,例如网页、图片或视频,这意味着任何拥有 S3 对象 URL 的人都可以访问它。

桶策略非常灵活,允许您授予跨账户访问权限。这意味着,如果其他 AWS 账户的用户被允许访问,您可以通过指定其账户 ID 和 IAM 用户的亚马逊资源名称ARN)来授予他们对您桶的访问权限。

这是一个典型的桶策略示例,授予匿名访问它所包含对象的权限:

图 5.2 – 桶策略示例,授予匿名访问权限'packt-marketing' S3 桶的内容

图 5.2 – 桶策略示例,授予对 'packt-marketing' S3 桶内容的匿名访问权限

如上图所示,策略通过将 Principal 属性指定为通配符(*)来允许匿名访问,这表示所有人。对 packt-marketing 桶的允许操作是 s3:GetObject,这限制了只能读取/下载对象。

桶策略中可以添加的另一个元素是策略的 Effect 属性,该属性设置为 Deny,除非满足特定条件。例如,您可以限制用户访问和下载 S3 桶中的内容,除非请求来自条件中指定的 IP 地址范围,如下图所示:

图 5.3 – 定义有条件语句的桶策略

图 5.3 – 使用条件语句定义的桶策略

在前面的截图中,你会注意到策略的Effect属性是拒绝访问,除非满足NotIPAddress条件。你需要将示例中的虚拟 IP 地址范围(w.x.y.z/c)替换为适合你使用案例的真实 IP 地址范围。

桶和对象 ACL

ACL 现在被视为遗留的控制系统,因为桶策略通常更灵活,且提供更细粒度的访问控制。你通常可以使用 ACL 为对象和桶授予匿名访问权限,或授予其他 AWS 账户访问权限。由于 ACL 不允许你指定单个 IAM 用户作为这些权限的受益人,因此它们的使用案例有限,通常更倾向于使用桶策略。

然而,某些功能需要你配置 ACL 而非桶策略。例如,服务器访问日志是一项你可以启用的功能,用于提供对 Amazon S3 桶请求的详细记录。

IAM 策略

如在第四章中所讨论的,身份和访问管理,你可以创建分配给 IAM 身份(如 IAM 用户、用户组或 IAM 角色)的 IAM 策略,并定义它们可以或不能对你的 AWS 账户中的任何特定服务和/或资源执行的操作。

因此,你可以授予 IAM 主体对 S3 桶及其中包含的对象的访问权限。然而,IAM 策略不能直接附加到资源上。此外,你不能将 IAM 策略直接附加到另一个 AWS 账户中的 IAM 用户。你需要首先创建一个拥有必要权限的 IAM 角色,然后为另一个 AWS 账户中的 IAM 用户启用信任策略,以便该用户能够承担此角色。

最后,IAM 策略不能用于授予匿名访问权限,因为有一个简单的原则:IAM 策略只能附加到 IAM 身份上。

注意

你可以结合使用桶策略、ACL 和 IAM 策略来授予访问权限。然而,你必须记住,任何冲突的Deny权限都会始终覆盖Allow权限。不过,这些策略选项并不是相互排斥的。

选择正确的 S3 存储类

亚马逊 S3 允许你在云中存储无限量的数据。然而,并非所有数据都需要相同的处理方式。例如,你可能有些数据需要即时访问,但也有其他类型的数据可能很少被访问,因为它们是为了合规目的存储的旧档案。

你可能还拥有一些可以丢失的数据,因为重新创建它们会很容易,而其他类型的数据可能是无法替代的。根据数据、数据的重要性以及访问模式,AWS 为不同的使用场景提供了不同的存储类。例如,如果你需要存储旧的档案数据,可以选择 Amazon Glacier 存储类;如果你需要即时快速访问数据,可以选择 Amazon S3 Standard 存储类。所有存储类都为你的数据提供 99.999999999% 的耐久性。耐久性指的是长期的数据保护,AWS 提供了必要的基础设施和流程来管理数据、复制副本、确保数据冗余,并防止降级或其他损坏。

根据你选择的存储类,AWS 还提供不同级别的可用性,这决定了一个对象在底层存储系统运行正常的情况下(或区域和可用区AZs)处于在线和可访问状态时)可以检索的时间百分比。重要数据,如数字资产、医疗记录或财务报表,可能更适合选择那些提供较高可用性的存储类。而数据的次级副本可能不需要与主副本一样高的可用性。

Amazon S3 的收费基于六个费用组成部分。这些组成部分包括存储本身(包括存储的量、存储时长以及存储类)、请求和数据检索、数据传输、加速传输的使用、数据管理和分析,以及使用 Amazon S3 Object Lambda(即在返回应用程序时,使用 Lambda 函数修改和处理数据的能力)。注意——从互联网传输到 S3 存储桶的数据是免费的。减少成本的一种方式是识别出不需要实例访问或可以替代的数据,并将其存储在更便宜的存储类中。

重要说明

这里需要注意的一个关键点是,你可以在同一个存储桶内托管不同存储类的对象。你不需要为每个存储类创建单独的存储桶。

接下来我们来看一下不同的存储类。

高频访问

Amazon S3 Standard——这是你上传对象到存储桶时的默认存储类,除非另行指定。Amazon S3 Standard 提供全额的十一位数字(99.9999999%)的耐久性和四位数字(99.99%)的可用性。在 Amazon S3 Standard 中,你的对象始终会在你所选择的区域内的至少三个可用区(AZ)之间进行复制。

低频访问

Amazon S3 提供两种类型的低频访问存储类。这些存储类适用于存储不常访问的对象,但同时当你需要时,仍然可以即时访问数据。

AWS 提供这些存储类以较低的成本,前提是您不会像使用标准存储类那样频繁访问数据。为了确保这一条件,AWS 会收取额外的检索费用。此外,存储对象的最小大小为 128 千字节KB)。您仍然可以存储小于此最小大小的对象,但这些对象会按 128 KB 的最小大小进行计费。

Amazon S3 标准低频访问S3 Standard-IA)—S3 Standard-IA 适用于与标准存储类同样重要但访问频率较低的数据,因此非常适合长期存储,例如备份,或作为灾难恢复(DR)用途的数据存储。

Amazon S3 单区低频访问S3 One Zone-IA)—此存储类别中的数据仅限于您上传数据的区域中的一个可用区(AZ)进行存储。这会将数据的整体可用性降至 99.5%,但比标准存储类或标准低频访问存储类便宜得多。这也意味着,如果存储数据的可用区发生故障,您必须等待该可用区恢复上线才能访问数据。在极少数情况下,如果可用区遭到破坏,您可能会丢失该数据。

亚马逊推荐将此类存储用于作为二级备份的数据或可以重新创建的数据。

归档存储

通常,数据需要为了归档目的而保存,以便在审计或参考时可用。更常见的是,监管和合规要求会规定某些类型的数据需要保存 n 年。例如,可能是财务信息或过去的医疗记录。

亚马逊通过其归档解决方案 Amazon Glacier 提供非常低成本的存储,以满足此类需求。

Amazon Glacier—此存储类旨在长期归档那些可能需要不频繁访问且在几小时内可访问的数据。

然而,从 Amazon Glacier 中检索数据的方式不同,因为它不能立即访问,您需要发起数据恢复请求。此恢复过程可能需要一些时间(从几分钟到 12 小时不等),具体时间取决于您选择的检索选项。

Amazon Glacier 深度归档—这是最低成本的存储类,客户可以将非常旧的历史数据存储在其中,以满足合规性和监管要求。此类数据可能需要保存 7 至 10 年。根据选择的检索选项,检索时间可能需要 12 小时或更长时间。

我们将在本章后面详细讨论 Amazon S3 Glacier 的检索选项。

不可预测的访问模式

通常,您的业务会对大多数数据有一个可预测的访问模式——例如,新创建的数据可能需要频繁访问,比如每天访问。随着数据的老化,访问频率会逐渐降低,有时甚至非常少。即使在这种情况下,您的访问模式也会随时间变化。AWS 提供了一项称为生命周期管理的功能,允许您根据访问模式的变化将数据从一个存储类别转移到另一个存储类别。我们将在本章后面讨论生命周期管理和生命周期规则。

然而,有时很难将数据分类为频繁访问或不频繁访问,主要是由于数据的性质。您可能在最初的几周内频繁访问一组对象,之后这些对象可能会变成不常访问。但是,几个月后,您可能需要再次访问这些对象进行分析或某种形式的调查。此时,这些数据可能再次需要在一段时间内频繁访问。

在这些情况下,AWS 提供了另一种存储类别,称为 Intelligent-Tiering 存储类别。为了享受此特权,您需要为每个对象支付少量的监控费用,以确保它根据访问模式自动过渡到正确的存储层。

Intelligent-Tiering—此存储类别根据您的访问模式提供自动分层存储。对象会自动在四个不同的层次之间过渡,其中两个是延迟访问层,旨在将对象在频繁访问和不频繁访问之间移动,另外两个是可选的归档访问层:

  • 频繁和不频繁访问层—频繁访问的对象(30 天内访问)会自动放入频繁访问层(标准存储类别)。任何超过 30 天未被访问的对象将被移入不频繁访问层(标准-IA),从而产生更低的费用。请记住——标准-IA 的最小对象大小为 128 KB,小于此大小的对象将按最小 128 KB 处理和收费。任何在不频繁访问层的对象如果之后被访问,则会自动移动回频繁访问层并按相应收费。

  • 可选的归档访问层—您可以选择启用归档访问层。一旦启用,当任何对象在 90 天内未被访问时,它将被移动到 Amazon Glacier 归档访问层。如果对象在 180 天内未被访问,它将被移动到 Amazon Deep Archive 访问层

Intelligent-Tiering 不会收取检索费用,但如果对象已归档,则根据所选择的检索选项,检索可能需要一些时间。下表展示了可用的检索选项:

表 5.1 – S3 Glacier、Deep Archive 和 S3 Intelligent-Tiering 归档类别的检索时间

表 5.1 – S3 Glacier、Deep Archive 和 S3 Intelligent-Tiering 归档类的检索时间

如您所见,您有多种检索选项,时间将根据您选择的归档存储选项而有所不同。

S3 on Outposts

Amazon Outposts 是一项完全托管的本地服务,配备有一个 42U 的机架,可以在您的数据中心托管与 AWS 相同的基础设施和服务。U 表示机架单元或“U 空间”,其高度为 1.75 英寸。标准高度为 48U(即 7 英尺的机架)。该服务允许您在本地创建计算、存储、网络和数据库服务池,特别适合需要低延迟访问的工作负载。如果您有计划将整个数据中心迁移到云端,Amazon Outposts 也可以作为一个前导步骤。

随着 Amazon Outposts 的广泛应用,AWS 又推出了一种名为S3 Outpost的存储类型。该服务通过将数据存储在您本地 Outposts 上托管的多个设备和服务器中,提供耐用性和冗余性,适用于低延迟访问,同时也能帮助您满足严格的数据驻留要求。Amazon S3 on Outpost 允许您将 48 TB 或 96 TB 作为 S3 存储容量的一部分,并提供在每个 Outpost 上最多创建 100 个 S3 存储桶的选项。请查看以下截图中展示的 Amazon S3 性能图表:

图 5.4 – S3 存储类性能和关键属性

图 5.4 – S3 存储类性能和关键属性

如前面的截图所示,您可以根据使用案例选择存储对象的存储类。在做出这个决定时,您需要考虑耐用性和可用性,以及对象的最小大小,并确定是否需要即时访问这些对象。

版本控制

为了防止意外删除或覆盖,AWS 还提供了一项名为 S3 版本控制的功能。默认情况下,在创建存储桶时版本控制是禁用的,这意味着如果您上传一个与现有对象同名(在 AWS 中称为)的对象,那么该存储桶中的原始对象将会被覆盖。有时候,这正是您想要的效果,但在大多数情况下,您可能希望保留原始版本。通常,对象被覆盖的原因是上传前未更改对象名称,导致了意外覆盖。

亚马逊 S3 提供了一个功能,您可以在存储桶上启用版本控制。该设置会应用于整个存储桶,因此会影响所有对象。一旦启用版本控制,任何上传的与现有对象同名的对象都会被标记为新版本 ID。访问该对象时将返回最新的当前版本,但控制台中的切换开关允许您查看所有先前版本,以防您需要访问对象的早期版本。

如果您尝试删除存储桶中一个已启用版本控制的对象(没有指定版本 ID),那么该对象不会被删除。AWS 会在该对象上添加删除标记,并将其从 S3 管理控制台视图中隐藏。如果之后您需要 恢复 该对象并使其在 S3 管理控制台中可见,您只需删除该删除标记即可。

您应该注意,存储桶可以处于三种状态之一,具体如下:

  • 未启用版本控制(默认)

  • 启用版本控制

  • 版本控制已暂停

一旦在存储桶上启用版本控制,您将无法返回到未启用版本控制的状态,但如果您不想创建新版本的对象,您可以暂停版本控制。

跨区域和同区域复制

如前所述,为了帮助客户遵守合规性和数据驻留法律,AWS 永远不会将您的对象复制到您创建它们的区域之外。但是,如果没有监管要求阻止您这样做,您可以将数据复制到您上传数据的区域之外。

亚马逊跨区域复制 (CRR) 用于异步地将对象复制到不同 AWS 区域的 AWS 存储桶之间。您可以使用 CRR 来完成以下任务:

  • 减少延迟—通过将对象复制到离终端用户更近的地方,您可以最大限度地减少访问这些对象时的延迟。

  • 提高运营效率—如果您跨多个区域运行应用程序并且需要访问相同的数据集,在这些区域中维护多个副本可以提高效率。

  • 满足合规性和监管要求—贵组织的合规性和监管要求可能要求您将数据副本存储在数千公里外以用于灾难恢复(DR)。

除了 CRR,亚马逊 S3 还允许您配置同区域存储桶之间的复制服务。这被称为 同区域复制 (SRR),它可以帮助您实现以下目标:

  • 日志数据聚合—您可能正在从多个源和应用程序收集日志数据。您可以通过复制将这些数据集汇总到单个日志管理存储桶中。

  • 在开发和生产账户之间进行复制—如果您使用单独的开发和生产账户并且需要在每个账户中使用数据集,您可以使用复制功能将对象从开发账户移至生产账户。

  • 合规要求——你可能需要保留多个副本的数据,以遵守数据存储法规。SRR 可以帮助你在多个桶之间复制数据,以确保你有多个副本用于合规目的。

需要注意的是,两个桶必须配置为启用版本控制,才能设置 CRR 或 SRR。你还可以跨地区或在同一地区复制对象,无论是在同一 AWS 账户内还是跨多个 AWS 账户。此外,你可以将对象从原始存储类别复制到不同的存储类别,这意味着你的复制对象可以存储在更便宜的存储类别中,例如,它们仅作为备份副本使用——例如,你的原始对象可以存储在标准存储类别中,而复制的对象可以放在标准-IA 存储类别中。这将降低你整体的存储成本。

复制服务的另一个特点是支持多个目标桶。你可以配置 S3 复制(多目标),它允许你将数据从一个源桶复制到多个目标桶,目标桶可以位于同一地区、跨地区,或两者的组合。

Amazon S3 生命周期管理 Amazon S3 提供无限量的存储空间。这意味着你可以轻松上传你创建的任何数量的数据,并可以完全不再关注它。同时,我们也不能忘记,Amazon S3 会根据你使用的存储量收费,费用还取决于你将对象放置在哪种存储类别中。

通常,数据的大部分在创建后的初期会很少被访问。这使得你必须有一种机制,将那些不再需要频繁访问的对象移动到更便宜的存储类别,以有效管理你的存储成本。此外,你可能还会存储大量存档数据,这些数据在一段时间后不再需要,甚至不再用于合规性和审计目的。例如,一些法规规定,某些类型的数据最多只需要保存 7 年。

手动管理大量数据可能是一项繁琐的工作,通常需要创建脚本和工具来审查存储在云中的数据。相反,你可以使用 Amazon S3 提供的可靠解决方案——Amazon S3 生命周期管理。

Amazon S3 生命周期管理操作可以应用于你的 Amazon S3 桶。这些操作可以应用于整个桶或通过定义前缀应用于部分数据。这些操作主要分为两大类,具体如下:

  • 过渡操作—这允许你在一定时间后将对象从一种存储类移动到另一种存储类。例如,如果你知道在 60 天后你将不频繁访问某个特定数据集,你可以设置一个规则,将该数据从标准存储类移动到标准-IA 存储类,60 天后进行过渡。

  • 过期操作—这些操作允许你在设置的天数后删除 S3 存储系统中的对象。例如,如果你在 365 天后不再需要旧的日志文件,你可以设置一个规则,使这些对象在 365 天后自动过期,从存储平台中删除它们。

你还可以使用过渡操作和过期操作的组合。例如,你可能有一些日志数据,在前 30 天会频繁访问。之后,你可能仍然需要在 180 天内重新访问这些数据,180 天后就不再需要了。你可以设置一个组合规则,在创建后 30 天将日志文件从标准类过渡到标准-IA 类,然后创建另一个过期操作,在 180 天后清除数据。

你还可以对版本化的数据应用不同的生命周期操作——例如,你可以为当前版本的对象设置一组规则和操作,为先前的版本设置另一组规则。这进一步允许你更有效地管理对象。

S3 加密

上传到 Amazon S3 的所有数据在传输过程中都会使用 HTTPS 协议进行加密。然而,存储在 S3 上的数据不会被修改,这意味着如果你上传的是明文的敏感数据,默认情况下数据将以未加密的形式存储。

为了增加额外的安全层,你可以在将数据存储到 S3 之前对其进行加密。这被称为静态加密。AWS 提供了两种加密数据静态存储的选项,如下所述:

  • 服务器端加密—当你上传(创建)对象时,Amazon S3 会在保存到磁盘之前对其进行加密,而当你下载/请求对象时,S3 服务会自动解密该对象。在决定使用服务器端加密加密对象时,你有三种互斥的选择,具体如下:

    a) 使用Amazon S3 管理的密钥SSE-S3)的服务器端加密—Amazon 使用 256 位的高级加密标准AES-256)对你的数据进行加密。每个对象都使用唯一的密钥进行加密,密钥本身会使用 AWS 为你旋转和管理的主密钥进一步加密。

    b) 使用客户主密钥CMK)存储在 AWS 密钥管理服务SSE-KMS)中的服务器端加密—这类似于 SSE-S3,但具有更多附加功能,包括能够创建和管理自己的 CMK,以及一个审计功能,显示何时以及由谁使用了你的 CMK。

    c) 服务器端加密客户提供的密钥CPKs)(SSE-C)—加密由 Amazon S3 执行,但使用 CPKs。如果您需要遵循管理和创建自己密钥的监管要求,这种方式是理想选择。

  • 客户端加密—在这种情况下,数据在客户端加密,之后加密数据会上传到 Amazon S3。因此,整个加密过程由客户管理。

静态网站托管

除了存储数据外,Amazon S3 还提供为您的公司托管完整网站的服务。唯一的限制是,网站托管服务仅设计用于托管静态网站,而非动态网站。

主要区别在于,尽管存储在 Amazon S3 上以交付完整网站的内容可以更改和更新,但它始终保持不变且静态,并且所有访问该网站的用户都将看到相同的内容。

动态网站使用服务器端脚本根据不同参数在飞行中交付动态内容,并通常连接到后端数据库以获取内容。

然而,静态网站也可以提供完整的端到端解决方案,并以低成本支持多个使用场景。除了托管和交付数字资产,如超文本标记语言HTML)文件、层叠样式表CSS)、便携文档格式PDF)文档、图像和视频外,您还可以托管在客户端浏览器中运行的客户端脚本,以提供额外的功能,包括互动元素——例如,您可以在 S3 静态网站上运行一个客户端脚本,以收集潜在客户的电子邮件地址并将其存储在第三方电子邮件营销服务提供商处。您还可以托管访问其他 AWS 服务的脚本。通过 Lambda 函数,并可能结合弹性容器服务ECS)或弹性 Kubernetes 服务EKS)作为后端,您可以从一个静态网站开始运行任何应用程序。最终,您可以在 Amazon S3 上托管静态网站,满足各种使用场景。由于其高度可用且可扩展的特点,能够处理大量流量,Amazon S3 相较于通过一组 EC2 实例托管静态网站,可能会是一个更好的解决方案,具体取决于您的使用场景。

以下是一些考虑使用 Amazon S3 静态网站托管服务的示例:

  • 开发产品预发布网站—通常,当您需要宣传新产品系列的预发布活动时,可能无法准确预测会产生多少流量。将同一解决方案托管在一组 EC2 实例上可能更为昂贵,因为如果您的营销活动特别成功,您可能需要快速扩展并使用大量的服务器集群。相比之下,S3 的可扩展特性确保了随着大量流量的涌入,需求会自动得到满足。

  • 卸载——通过 Amazon S3,你可以获得一个高度可扩展、可靠且低延迟的数据存储解决方案。即使你托管运行在昂贵 EC2 实例和 EBS 卷上的动态网站,你也可能有大量的静态内容(例如文档、图像和视频)。你可以将这些静态内容卸载到 S3 存储桶,并通过 API 调用在所有托管在 EC2 实例上的站点中引用它。其优点包括降低数字资产的存储成本,而且由于你的服务器保持精简,你还可以获得更好的性能。

  • “精简版”网站或“维护中”横幅——有时,在执行升级或发布重大更新时,你需要托管站点的替代版本。通过在 S3 存储桶中托管站点的精简版静态版本,你可以在维护或重大更新期间轻松将请求重定向到 S3 存储桶。

在本节中,我们学习了 AWS 上 Amazon S3 的基础知识,并了解了它的各种功能。在下一节中,我们将介绍一些附加服务,涵盖数据传输和归档。

Amazon S3TA

如果你在某个特定区域托管了 S3 存储桶,但需要全球用户向其上传对象,用户可能会根据所在位置体验到更长时间的上传和下载速度波动。S3TA 减少了这种由于公共互联网架构而经常出现的速度波动。S3TA 通过 Amazon CloudFront 全球分布的边缘位置和 AWS 主干网络来路由你的上传数据,从而提供更快的速度和始终如一的低延迟。

这是一个 S3TA 速度测试工具的截图,它将一个示例文件从浏览器上传到不同的 S3 区域,并比较标准互联网上传速度与通过 S3TA 上传速度之间的差异。你可以在 s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-speed-comparsion.html 上尝试这个速度测试:

图 5.5 – Amazon S3TA 速度测试

图 5.5 – Amazon S3TA 速度测试

在本节中,我们向你介绍了 Amazon S3 服务,并讨论了它的各种功能。Amazon S3 是一种对象存储解决方案,旨在帮助客户将任何数量的数据存储到云中。凭借版本控制、CRR/SRR、加密和静态网站托管等功能,你可以以负担得起的存储成本,将 Amazon S3 用于各种用例。

在下一节中,我们将介绍 Amazon Glacier 服务的其他功能,它们提供了归档存储解决方案。

学习使用 Amazon S3 Glacier 的归档解决方案

在本章早些时候,我们介绍了 Amazon S3 Glacier 和 Glacier Deep Archive 存储类。Amazon Glacier 提供非常低成本的长期存储,旨在用于归档存储。该架构提供相同的 99.999999999%(11 个 9)的耐久性,因此在发生重大灾难时,你可以放心,旧的归档文件将在需要时可用进行恢复。该技术与标准 S3 存储不同。归档文件需要先请求才能访问/下载,涉及一个两步过程:首先创建检索任务,然后在任务完成后下载你的数据。

这个检索过程可能需要一些时间,具体取决于你选择的检索选项,如前所述。然而,这种延迟访问数据的优点是,你可以获得 Amazon 平台上最便宜的存储选项。

归档和金库

与其他 Amazon S3 存储类一样,你可以将任何数量的数据存储在 Glacier 类中。然而,你的对象将作为归档存储,而归档可以包含单个文件或多个文件,文件可以以.zip.tar格式打包在一起。归档的大小可以从 1 字节到 40TB 不等。在 Amazon S3 上,单个对象的最大大小为 5TB。

此外,归档文件可以被分组并存储在金库中。当你创建一个金库时,需要指定它将被创建的区域。金库还允许你定义访问和通知策略,每个区域最多可以拥有 1,000 个金库。金库策略使你能够定义谁可以访问金库以及可以对其执行哪些操作。你还可以定义金库锁定策略,如只写多读WORM),或者用于合规性归档的基于时间的记录保留策略。

检索选项

如前所述,访问 Amazon Glacier 中的归档文件不是即时的。根据你选择的 Glacier 存储类(Glacier 与 Deep Archive),你有以下不同的检索选项:

a) Amazon S3 Glacier 检索选项

  • 标准—这是默认的检索选项,通常需要 3 到 5 小时完成,之后你的数据将可以下载。

  • 加急—如果你需要紧急访问你的部分归档文件,可以选择加急检索选项。显然,加急检索的费用比其他选项更高。此外,对于最多 250 兆字节MB)的归档,加急检索将在 1 到 5 分钟内提供。除此之外,还提供两种加急检索选项:按需和预配。在按需选项中,你的检索请求通常会在 5 分钟内完成,尽管在高需求期间,这可能需要更长时间。你还可以选择购买预配容量,以确保在最需要时能获得可用的检索容量。

  • 批量 —此选项旨在帮助你以最低的检索成本检索大量数据,通常需要 5 到 12 小时才能完成。

b) Amazon S3 Glacier 深度归档检索选项

  • 标准—深度归档的检索可以在 12 小时内完成。

  • 批量—可以在 48 小时内检索 PB千兆字节)级的数据,也是最具成本效益的选项。

在本节中,我们讨论了使用 Amazon S3 Glacier 服务的归档解决方案,以及如何存储数据多年以满足合规和监管要求。在下一节中,我们将探讨如何将你的本地存储服务连接到 Amazon S3。

将你的本地存储连接到 AWS,使用 Amazon Storage Gateway。

Amazon Storage Gateway 是一个本地解决方案,允许你将本地服务器和存储系统连接到 Amazon S3 云环境。该服务包括在本地安装 Storage Gateway 虚拟机VMs)并将你的服务器连接到这些虚拟机。然后,网关使用行业标准协议在你的服务器和 Amazon S3 平台之间传输数据。虚拟机可以部署在 VMware ESXi 或 Microsoft Hyper-V 虚拟化平台上。你还可以选择订购硬件设备,它是一台预安装并配置好 Storage Gateway 软件的物理服务器。这可以减少设置你自己虚拟机时所需的管理时间,并通过诸如 网络文件系统NFS)、SMB 和 互联网小型计算机系统接口iSCSI)等协议与现有存储系统集成。

Amazon Storage Gateway 使你的本地应用程序能够通过标准协议,如 NFS/SMB、虚拟传输层VTL)和 iSCSI,透明地连接到 AWS 存储系统。Storage Gateway 虚拟机或硬件设备与 AWS 平台之间的连接可以通过互联网、通过安全的 IPsec 虚拟私人网络VPN)隧道,或通过 AWS Direct Connect 建立。

Amazon S3 Storage Gateway 支持不同的使用案例,提供以下部署选项:

  • 文件网关—使你能够使用标准的 NFS、SMB 协议将数据存储在 Amazon S3 中。数据还会被本地缓存,从而实现低延迟访问。这里有两个可选项,如下所示:

    a) Amazon S3 文件网关—此服务使你能够为本地服务器提供文件服务器解决方案,并访问 Amazon S3,你可以使用行业标准的文件协议,如 NFS 和 SMB,在 Amazon S3 中存储和检索对象。此外,由于数据最终存储在 S3 中,你可以享受所有 S3 特性,如版本控制、存储桶策略、CRR 等。

    b) Amazon FSx 文件网关—此服务允许您将本地 Windows 服务器或基于 Windows 的应用程序(以及 Linux 和 macOS 系统)连接到云托管的 Amazon FSx for Windows File Server,实现低延迟,并能够在云中设置和访问几乎无限数量的 Windows 文件共享。Amazon FSx 文件网关完全支持 SMB 协议,并集成活动目录AD),同时可以使用 ACL 配置访问控制。

  • 卷网关—使您能够通过 iSCSI 协议将块存储卷呈现给本地服务器。卷网关可用于异步将您的数据备份到 Amazon S3,并有两种不同的模式,具体如下:

  • 缓存模式—大部分数据存储在 Amazon S3 中,仅将最常访问的数据存储在本地缓存中,以实现低延迟连接。这意味着您不需要非常大的本地存储,从而有助于降低资本支出。

  • 存储模式—您的数据本地存储,并可在本地环境中低延迟访问。如果您的应用程序对数据访问的延迟敏感,这尤其有用。数据随后会异步备份到 Amazon S3,并可用于灾难恢复(DR)目的。

  • 磁带网关—许多组织使用备份软件解决方案来满足本地备份需求(例如,Veritas Backup Exec 和 NetBackup)。通常,这些应用程序将数据备份到物理磁带,而大多数公司将磁带存储在异地。然而,磁带驱动器、磁带和异地存储设施可能会变得非常昂贵。磁带网关解决方案通过使您能够通过 iSCSI 将虚拟磁带呈现给备份软件应用程序来拯救您。磁带网关将这些虚拟磁带存储在虚拟磁带库VTL)中,并由 Amazon S3 备份。数据会写入这些虚拟磁带,导致磁带网关解决方案异步将数据上传到 Amazon S3。当您需要恢复数据时,它将被下载到本地缓存,备份应用程序可以将其恢复到您指定的本地位置。

为了管理旧数据的长期存储,您可以在 Amazon S3 和 Amazon S3 Glacier 或 Amazon S3 Glacier Deep Archive 之间转换虚拟磁带。如果以后需要访问归档的虚拟磁带上的数据,则需要检索该磁带并将其呈现给您的磁带网关解决方案。

请注意,从 Glacier 中检索归档的磁带将需要 3 到 5 小时,而从 Deep Archive 中检索则可能需要最长 12 小时。

在本节中,我们介绍了如何使用 Storage Gateway 解决方案将本地应用程序连接到 Amazon S3 存储服务。在下一节中,我们将讨论如何使用其他离线方法将大量数据迁移到云端,这在您拥有有限的互联网带宽时特别有用。

使用 AWS Snow 家族将大型数据集迁移到 AWS

许多寻求迁移到云的公司通常将大量数据托管在本地。尽管可以通过公共互联网将数据传输到 Amazon S3,但拥有大量数据的客户可能需要考虑离线传输方法,原因是带宽限制。

AWS 提供坚固耐用的设备,可以送到您的本地位置。这些设备包括 SnowconeSnowballSnowmobile

AWS Snowball

在最基本的应用中,您只需将大量数据复制到设备中,并将其寄回 AWS,以将数据导入到 Amazon S3。这些设备被称为 AWS Snowball 设备,是 Snow 家族设备的一部分。

这些边缘设备具有计算和存储功能,包含在高度坚固、防篡改的设备中。设备配备 受信平台模块 (TPM) 芯片,能够检测硬件、软件或固件的未授权修改。这些设备可用于在本地位置进行存储和数据处理。通常,客户会使用 Snowball 边缘设备进行迁移、数据收集和处理,无论是否有互联网连接。

Amazon Snowball 有 两种版本,如下所示:

  • Snowball Edge 计算优化版—这些设备同时提供存储和计算资源,可用于 机器学习 (ML)、分析以及任何本地计算任务。设备配备 52 个 虚拟中央处理单元 (vCPUs)、208 GB 内存,并配备可选的 NVIDIA Tesla V100 图形处理单元 (GPU)。在存储方面,设备提供 42 TB 的 硬盘驱动器 (HDD) 容量和 7.68 TB 的 固态硬盘 (SSD) 容量。

  • Snowball Edge 存储优化版—这些设备提供更大的存储容量,适用于数据迁移任务。配备 80 TB 的 HDD 和 1 TB 的 串行高级技术附件 (SATA) SDD 卷,您可以开始将大量数据迁移到云端。该设备还配备了 40 个 vCPUs 和 80 GB 内存。

Amazon Snowcone

作为 AWS Snow 家族中最小的成员,这些设备是有史以来最小的,重量仅为 4.5 (lb)(2.1 千克 (kg))。Snowcone 设备提供 8 TB 可用存储,设计用于网络连接较差的户外环境。例如,物联网、车辆和无人机使用场景。

该设备还提供计算能力,配备两个 vCPUs 和 4 GB 内存,并通过 USB-C 电源连接线和可选电池提供电力。

Amazon Snowmobile

如果您需要将 exabyte 级的数据迁移到云端,那么您将需要一个极其庞大的 45 英尺长的 坚固 运输集装箱。Amazon Snowmobile 可以将最多 100 PB 的数据迁移到云端,并协助您的所有数据中心迁移工作。

运输集装箱将被送到现场,AWS 团队成员将与您的团队合作,将 Snowmobile 的高速交换机连接到您的本地网络。

通过 24/7 视频监控、可选的护送安保服务以及 256 位加密,您可以使用最安全的方式将敏感数据传输到 Amazon S3。

在本节中,我们回顾了将大量数据离线传输到云端的方法,并帮助您进行数据迁移。Amazon Snow Family 不仅提供存储容器,这些设备还具备强大的计算能力,可以在将数据复制到它们时执行数据处理、分析和机器学习任务。

在下一部分,我们回顾本章中强调的一些关键点。

练习 5.1 – 设置 Amazon S3 存储桶

在本练习中,我们将创建一个 Amazon S3 存储桶,并上传一个对象到其中。更具体地,我们将上传一个单独的网页文档,并在上传后测试访问。由于我们计划稍后使用此存储桶来托管一个静态网站并使内容对互联网上的任何人可访问,您需要禁用阻止公共访问设置,正如本章之前在访问权限设置中讨论的那样。请按以下步骤进行:

  1. 在您的计算机上,使用您选择的标准文本编辑器(Windows 上的记事本或 Mac 上的 TextEdit)创建一个新文件。

  2. 将以下代码行添加到文档中:

    index.html file to your desktop as well.
    
  3. 接下来,保存文件,文件名为index,并添加.html扩展名—因此,文件名和扩展名应为index.html。这将为您创建一个简单的网页对象。您可能需要将另存为类型选项设置为所有文件,如下图所示:图 5.6 – 通过.html 扩展名保存文件以创建网页

    图 5.6 – 通过.html 扩展名保存文件以创建网页

  4. 接下来,以 IAM 用户Alice身份登录到您的 AWS 账户。

  5. 进入 Amazon S3 控制台。

  6. 单击创建存储桶,如下图所示:图 5.7 – 存储桶列表

    图 5.7 – 存储桶列表

  7. 对于存储桶的名称,请输入您的名字,后跟一个连字符(-)和单词webpage。确保名称中没有空格,并且使用全小写字母。假设您选择的名称尚未被 AWS 的其他客户占用,您应该能够使用这个存储桶名称。如果在创建存储桶时遇到错误,提示名称不可用,您只需要选择另一个名称。

  8. 对于us-east-1

  9. 接下来,在存储桶的公共访问阻止设置子标题下,取消勾选阻止所有公共访问的框。请注意,对于一般用例,除非你的用例需要,否则你不应解除公共访问阻止,例如在配置静态网站托管时,我们将在练习 5.4中讨论此操作。如果你不需要像公共互联网中的最终用户那样的匿名访问,你必须始终正确配置权限,使用存储桶策略、ACL 或访问点策略,以确保你遵循最小权限原则PoLP)。

  10. 接下来,勾选该框,声明你已知悉前述设置可能会使存储桶及其对象变为公共可访问,如下图所示:图 5.8 – 关闭存储桶的所有公共访问阻止

    图 5.8 – 关闭存储桶的所有公共访问阻止

  11. 保持其他所有设置为默认,并点击屏幕底部的创建存储桶按钮。你的 Amazon S3 存储桶现在已经创建。

  12. 接下来,在主 S3 控制台的存储桶列表中,选择你刚刚创建的存储桶。这将带你进入存储桶中当前的对象列表。你会注意到目前没有任何对象。

  13. 你会注意到有一个上传按钮。点击该按钮后,你将可以添加文件和文件夹,如下图所示:图 5.9 – 将对象上传到你的存储桶

    图 5.9 – 将对象上传到你的存储桶

  14. 添加你之前创建/下载的index.html文件。

  15. 向屏幕底部滚动并点击上传按钮。

  16. 你的文件将被上传。

  17. 你会注意到屏幕顶部会有一个绿色横幅,显示上传已成功。现在,继续点击退出

  18. 然后,你将看到你刚刚创建的存储桶的内容。

  19. 你现在可以点击对象列表中的index.html文件,这将带你进入该文件本身的 Amazon S3 属性页面。

  20. 请注意,每个对象都有自己的 URL,可以通过互联网访问(只要权限设置正确),正如我们在以下截图中看到的:图 5.10 – 将 index.html 对象上传到你的存储桶

    图 5.10 – 将 index.html 对象上传到你的存储桶

  21. 如果你尝试点击这个对象的 URL 在另一个浏览器窗口中打开,你会发现无法访问它。相反,你会看到一个拒绝访问的错误信息。这是因为通过 URL 访问对象的效果就像是尝试匿名地通过公共互联网读取该对象。

尽管我们禁用了Allow规则来授予访问权限,但你可以点击对象本身的权限标签,设置 ACL 以启用该对象的公共访问。然而,如前所述,使用存储桶策略是更好的选择,因为它们提供了更多的功能和更精细的控制。

在下一个练习中,我们将设置一个存储桶策略,看看如何允许公共访问此文件。

练习 5.2 – 配置 S3 存储桶的公共访问

在本练习中,我们将配置 Amazon S3 存储桶,使用你之前创建的index.html网页。

记住,你可以选择将访问权限限制为仅一组已知用户——例如,如果你只想让你的 AWS 账户中的 IAM 用户访问这些对象。你还可以配置跨账户访问,在这种情况下,你定义属于另一个 AWS 账户的主体,并授予他们特定的访问权限。

在本练习中,我们希望授予对index.html页面的匿名访问权限,因为最终,我们将在后续的练习中使用这个存储桶构建静态网站托管服务。请按以下步骤操作:

  1. 返回 S3 控制台,点击你刚刚创建的存储桶,如下图所示:图 5.11 – 上传成功

    图 5.11 – 上传成功

  2. 点击权限标签。

  3. 你会注意到阻止公共访问已经被禁用,且处于关闭状态。

  4. 向下滚动,直到看到存储桶策略,然后点击编辑

  5. 添加以下策略,将占位符Your-Bucket-Name中的值替换为你的 S3 存储桶名称:

    {
      "Id": "Policy1613735718314",
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1613735715412",
          "Action": [
            "s3:GetObject"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::Your-Bucket-Name/*",
          "Principal": "*"
        }
      ]
    }
    
  6. 点击保存更改。如果你正确复制了策略,策略验证器不会抛出任何错误。

  7. 然后你应该会收到确认消息,表明策略已经保存,更重要的是,你会注意到存储桶的内容现在可以公开访问,如下图所示:图 5.12 – S3 存储桶权限标签

    图 5.12 – S3 存储桶权限标签

  8. 接下来,再次点击对象标签。

  9. 点击index.html文件,打开其S3 属性面板。

  10. 右键点击对象的 URL,并在新浏览器标签页中打开它。

  11. 你应该会发现该网页现在可以通过浏览器访问,如下图所示:

图 5.13 – 你的页面在浏览器窗口中显示

图 5.13 – 你的index.html页面在浏览器窗口中显示

到目前为止,我们已经禁用了该存储桶的公共访问阻止功能,因为我们最终会将其配置为静态网站托管。在本练习中,我们还上传了对象index.html,它是一个用 HTML 代码编写的食谱文档。

在下一个练习中,你将学习如何在存储桶上配置版本控制。版本控制将帮助你创建对象的历史副本,这样同一对象的新内容上传将作为该对象的新版本进行存储。这将使你能够防止意外更改对象,因为你可以恢复以前的版本,我们将在接下来的练习中看到这一点。

练习 5.3 – 启用存储桶的版本控制

在本练习中,我们将启用 Amazon S3 存储桶的版本控制。当您用更新版本替换现有对象时,您可以放心,如果需要恢复到旧版本,这些版本仍然会存在于您的存储桶中。显然,如果您尝试删除某个特定版本的对象,它将会从 S3 平台中被清除。然而,启用版本控制可以帮助防止意外删除和覆盖。请按照以下步骤操作:

  1. 返回到 S3 控制台。

  2. 点击练习 5.1中您之前创建的存储桶。

  3. 点击属性标签。

  4. 您将看到一个编辑存储桶版本控制选项来编辑状态。目前,版本控制将被设置为禁用。请注意,您可以暂停版本控制操作,但无法完全禁用它们。

  5. 存储桶版本控制部分点击编辑

  6. 选择启用

  7. 点击保存更改

接下来,让我们测试版本控制功能,步骤如下:

  1. 导航到您在计算机上保存的 index.html 网页的位置。使用记事本或 TextEdit(Mac 用户)打开该文件。

  2. 将文档中现有的 <H1> 标签中的 Blueberry 替换为 Chocolate

  3. 保存文件时不要更改格式或扩展名。

  4. 返回到您的 AWS 账户中的 Amazon S3 控制台,点击您之前创建的存储桶。

  5. 点击对象,如以下截图所示:图 5.14 – 您的 Amazon S3 存储桶中的对象列表

    图 5.14 – 您的 Amazon S3 存储桶中的对象列表

  6. 点击上传

  7. 点击添加文件

  8. 选择刚才更新的相同index.html 文件并点击上传

  9. 点击退出

  10. 再次点击 index.html 文件,打开其S3 属性窗口。

  11. 对象 URL下,右键点击该 URL,并在新浏览器窗口中打开。

  12. 您应该能看到网页已经更新,显示了巧克力这个词,如以下截图所示:图 5.15 – 展示食谱的  页面

    图 5.15 – 展示食谱的 index.html 页面

  13. 在 Amazon S3 管理控制台中,点击版本标签,如以下截图所示:图 5.16 – 存储桶版本标签

    图 5.16 – 存储桶版本标签

  14. 请注意,有两个版本——原始版本,版本 ID 为null,以及一个较新的版本,null是因为它是在我们启用版本控制之前创建/上传到存储桶的。今后,所有对该文件的更新都将分配一个新的版本 ID,从而让您可以保留旧版本,以备日后需要时访问。

在本练习中,你学会了如何为桶配置版本控制。你能够上传并管理同一对象的多个版本,并发现未版本化的对象具有null版本 ID,而版本化的对象则具有由一系列独特字符组成的版本 ID。你还学会了如何在启用版本控制的桶中显示可用对象的版本列表。

练习 5.4 – 设置静态网站托管

在本练习中,我们将配置桶以托管静态网站。配置了静态网站托管服务后,桶将配置为网站端点,你可以将其分发给用户,用户随后可以使用标准的 HTML 协议访问所有页面(假设它们是有链接的)。

要配置你的桶以进行静态网站托管,至少需要两个文件——一个index.html文件和一个error.html文件。错误文件是一个 S3 静态网站托管服务在index.html文件出现问题时会重定向到的文件——例如,如果找不到index.html页面。你可以使用error.html文件来广播网站可能正在维护的信息。请按以下步骤操作:

  1. 使用文本编辑器(如 Windows 上的记事本或 Mac 上的 TextEdit)创建一个新的 HTML 文件。然而,在此文件中,只需添加一行文本,例如该站点正在维护

  2. 将文件保存为error.html,如果你使用的是 Windows 机器,请确保将文件类型设置为所有类型

  3. 返回 S3 控制台并点击你的 S3 桶。

  4. 点击属性,然后向下滚动页面,直到找到静态网站托管部分标题。

  5. 点击编辑并选择启用选项。

  6. 对于托管类型,选择托管静态网站

  7. index.html下。

  8. error.html下。

  9. 保持其他所有设置为默认值,并点击页面底部的保存更改

  10. 接下来,点击对象标签。

  11. 点击上传并点击添加文件

  12. 选择error.html文件并点击上传。你应该会看到如下画面:图 5.17 – 将更新后的索引页面上传到你的桶

    图 5.17 – 将更新后的索引页面上传到你的桶

  13. 点击退出

  14. 此时,你的桶已配置为静态网站托管。要进行测试,你需要通过 S3 网站 URL 端点访问你的网站。

  15. 在 S3 控制台中,仍然查看桶的内容(在对象下),再次点击属性标签。

  16. 向下滚动直到你找到静态网站托管部分,你会注意到网址已在桶网站端点标题下提供,如下截图所示:图 5.18 – 在你的桶上启用静态网站托管

    图 5.18 – 在你的桶上启用静态网站托管

  17. 在新浏览器窗口中导航到提供的 URL,你应该会看到该网站打开了带有配方网页的页面,如下图所示:图 5.19 – 更新的 index.html 页面,标题错误(巧克力)

    图 5.19 – 更新的 index.html 页面,标题错误(巧克力)

  18. 如你所见,这个配方是蓝莓松饼,但标题已更改为巧克力。假设这是更新中的错误,我们可以轻松地恢复到该网页的前一个版本,因为我们已经为存储桶启用了版本控制。

  19. 返回到 Amazon S3 存储桶,查看存储桶中实际的内容,位于对象标签下,如下图所示:图 5.20 – 存储桶中更新的对象列表

    图 5.20 – 存储桶中更新的对象列表

  20. 请注意,列表版本切换按钮位于对象子标题下方。

  21. 点击此切换开关,列出存储桶中所有对象的所有版本,如下图所示:图 5.21 – 对象及其各自版本的列表。

    图 5.21 – 对象及其各自版本的列表。

  22. 如你所见,index.html 页面有两个版本。最新版本具有版本 ID,并包含错误的配方标题。

  23. 点击复选框选择此版本,然后点击删除按钮。

  24. 然后,你会被提示确认删除请求,需在提供的文本框中输入短语permanently delete,如下图所示:图 5.22 – 删除错误版本的 index.html 页面

    图 5.22 – 删除错误版本的 index.html 页面

  25. 接下来,点击删除对象

  26. 点击退出,你会注意到该版本现在已被删除。

  27. 再次点击属性,然后向下滚动至静态网站托管部分。在新浏览器标签页中打开网站 URL,你应该会看到旧版正确的网页,如下图所示:

图 5.23 – 正确标题(蓝莓)的前一个配方页面

图 5.23 – 正确标题(蓝莓)的前一个配方页面

在本次练习中,你学习了如何为存储桶配置静态网站托管。你了解到,在本次实验中,我们在网页标题上犯了错误,但由于之前已启用版本控制,我们能够恢复到旧版本的同一文档。

总结

Amazon S3 是 AWS 的旗舰存储产品之一,提供无限存储容量,具有高度的可扩展性和耐用性。

在本章中,你学习了 Amazon S3 的核心功能,包括版本控制、生命周期管理和复制服务,以及 Amazon S3 如何满足广泛的使用场景。你还学习了如何在 Amazon S3 存储桶上构建并部署静态网站托管以及其在现实世界中的各种应用。

我们还讨论了 Amazon S3 提供的广泛安全工具,例如通过存储桶策略和 ACL 创建精细化访问权限的能力,以及数据传输中和静态数据的加密。你还学习了如何通过互联网、VPN 或 AWS Direct Connect 服务将本地工作负载连接到 Amazon S3 平台。

如果你打算将大量数据迁移到云端,可以使用 Amazon Snowball 服务帮助你传输大量数据,利用坚固且防篡改的设备,这些设备会送到你的本地位置。将数据复制完成后,你只需将设备送回 AWS,便可以将数据导入到 S3 环境中。

在下一章中,我们将讨论网络服务,重点介绍 Amazon 虚拟私有云VPC)服务等。我们还将介绍 Amazon Direct Connect 服务以及如何使用 VPN 技术将本地网络与 AWS 云服务连接。

在下一部分,我们将查看一些复习问题,以测试你的知识。

问题

下面是一些问题来测试你的知识:

  1. 以下哪项关于 Amazon S3 的说法是正确的?(选择 2 个答案)

    1. Amazon S3 是基于对象的存储。

    2. Amazon S3 是文件存储的一个例子。

    3. Amazon S3 是块存储的一个例子。

    4. Amazon S3 One Zone-IA 存储类别提供 99.5% 的可用性。Amazon S3 可配置为 Linux 基础的 EC2 实例的共享挂载卷。

  2. 你希望在 S3 存储桶上强制执行一项策略,如果用户从公司和分支机构连接到数据,则允许匿名访问其内容,作为安全策略的一部分。哪项 S3 配置功能将使你能够定义允许访问数据的 IP 范围?

    1. 安全组

    2. 存储桶策略

    3. NTFS 权限

    4. 网络访问控制列表NACLs

  3. 如果你需要托管静态网站内容以迎接即将到来的产品发布,哪项 AWS 服务是最具成本效益的?

    1. Amazon EC2

    2. Amazon EFS

    3. Amazon S3

    4. Azure ExpressRoute

  4. 哪个 Amazon S3 存储类别使你能够通过自动将数据移动到最具成本效益的访问层来优化成本,同时确保频繁访问的数据能立即可用?

    1. Amazon S3 标准

    2. Amazon S3 One-Zone IA

    3. Amazon Snowball

    4. Amazon S3 智能分层

  5. 哪项 Amazon S3 服务可以配置为在设定的天数后自动将数据从一个存储类别迁移到另一个存储类别,以减少成本,尤其是在某些数据子集可能不需要频繁即时访问的情况下?

    1. 静态网站托管

    2. 生命周期管理

    3. 存储转换

    4. S3 迁移

  6. 从 Amazon Glacier 中检索数据时,标准检索选项使档案可供下载的典型时间是多久?

    1. 20 分钟

    2. 24 小时

    3. 3 到 5 小时

    4. 90 秒

  7. Amazon S3 平台的哪个功能允许您通过 Amazon 边缘位置从任何位置上传内容到一个集中式存储桶,确保更快的传输速度并避免公共互联网拥堵?

    1. Amazon S3TA

    2. AWS S3 存储网关

    3. Amazon VPC

    4. CloudFront

  8. 您的本地应用程序需要访问集中管理的云存储服务。运行在您服务器上的应用程序需要能够通过标准的基于 NFS 的访问和本地缓存,将文件作为持久对象存储和检索到 Amazon S3。哪项 AWS 服务可以帮助您交付满足上述需求的解决方案?

    1. AWS 存储网关 — Amazon S3 文件网关

    2. AWS EFS

    3. Amazon Redshift

    4. EBS 卷

  9. 您正在寻找将本地数据迁移到云端的方式。作为一次性数据迁移工作的一部分,您需要在几周内将超过 900 TB 的数据传输到 Amazon S3。哪种方式是将如此大量数据迁移到云端最具成本效益的策略?

    1. 使用 Amazon RDS 服务

    2. 使用 Amazon Snowball 服务

    3. 使用 Amazon VPN 连接您的本地网络与 AWS

    4. 使用 AWS Rain

第六章:AWS 网络服务 – VPC、Route53 和 CloudFront

网络是任何 IT 基础设施的核心组成部分,无论是在本地还是在云中。没有网络,我们今天所生活的复杂通信世界是不可能构建的。在没有网络的情况下,现代世界将没有互联网。

今天,几乎每个企业都需要某种形式的网络连接,以便与合作伙伴和最终客户进行协作。在本章中,我们将了解设计网络的一些核心构建模块。我们还将探讨 AWS 提供的网络服务,特别是 虚拟私有云 (VPC) 如何帮助客户在其 AWS 账户内构建多个独立且安全的网络,从而使他们能够隔离工作负载和应用程序。

我们将探讨 AWS Route53,这是 Amazon 的 域名系统 (DNS),它使得跨 AWS 生态系统和更广泛互联网的网络流量路由成为可能。最后,我们将看看 Amazon CloudFront,它是一个 内容分发网络 (CDN),旨在帮助客户更有效且低延迟地将内容分发给他们的客户。

本章讨论的主要内容如下:

  • 本地网络介绍

  • IP 地址、端口号、子网掩码和 CIDR 的基础知识

  • Amazon VPC 介绍

  • Amazon Route53 的 DNS 基础知识和全球路由

  • 使用 Amazon CloudFront 实现强大的 CDN

  • API Gateway 介绍

技术要求

要完成本章内容,您需要访问您的 AWS 账户。您将需要在 AWS 账户中创建一个简单的 VPC,并且需要使用我们在第四章中创建的 IAM 用户账户 Alice 登录 AWS 账户,身份与访问管理。请记住,要使用 IAM 用户账户登录,您需要提供您的 AWS 账户 ID 或账户别名。

本地网络介绍

几乎每个企业都会有某种形式的本地网络。即使您是一个自雇的“独立工作者”,您也很可能有一个家庭办公室,且办公室也拥有一个私有网络环境。您的家庭办公室可能类似于以下图示:

图 6.1 – 家庭网络组件

图 6.1 – 家庭网络组件

在前面的示意图中,家庭网络中的设备通过 Wi-Fi 连接相互通信。如果你从计算机桌面向打印机发送打印请求,那么你的文档将会被打印出来。这种通信得以实现,是通过在 Wi-Fi 网络上建立的连接。为了使设备能够相互通信,它们每个都需要一个唯一的 IP 地址。如果 IP 地址元素正确定义,网络中的每个设备将能够看到其他设备。Wi-Fi 服务还通过与互联网服务提供商建立连接的路由器/调制解调器设备,将设备连接到互联网。此连接通常通过某种形式的物理电缆或通过电信提供商的移动网络连接来实现。

基本企业网络

公司通常会拥有自己的企业网络,你可能曾在一个配备有 IT 网络基础设施的办公环境中工作过。企业网络需要更为谨慎的规划,因为许多网络也允许外部访问应用程序。例如,您的企业可能会在企业网络内部发布一个网站,以便通过互联网向潜在客户展示其产品和服务。使用防火墙路由器,只允许特定类型的流量从互联网进入网络并被引导到适当的服务器,是与外界连接的安全规划的一部分。

企业网络通常会被划分为多个较小的网络,每个网络都有特定的用途。在其最基本的层面上,企业网络通常包括两个子网络:一个用于内部后台目的,另一个用于放置可以通过互联网访问的服务。

在下图中,企业网络被划分为两个独立的网络:一个叫做内部网络,另一个叫做非军事区DMZ)。DMZ 是一个可以在互联网上暴露服务的区域,例如,Web 服务器。访问部署在该区域的服务的流量受到严格的入站规则限制,以确保高安全性。

图 6.2 – 基本办公网络

图 6.2 – 基本办公网络

如前面的图示所示,企业网络被划分为三个独立的子网。这确保我们能够配置规则,定义哪些类型的流量可以进入每个子网,以及来自哪些来源。例如,我们可以配置从互联网到我们的 Web 服务器的入站规则,允许 HTTP/HTTPS 流量。这将使公众能够访问我们的企业网站并查看我们的服务。另一方面,我们不会允许互联网直接进入终端用户计算EUC虚拟局域网VLAN),因为没有此类入站连接的需求,并且这有助于保证我们的企业网络安全。然而,我们会允许工作站到互联网的流量,以便员工可以访问在线服务和工具。

同样,在 AWS 上构建解决方案时,我们需要配置云中的虚拟网络,以便以一种提供安全性、隔离性,并且仅在需要时才允许入站访问的方式托管我们的应用程序。然而,在深入研究如何构建云网络的细节之前,了解网络中设备如何互相通信,以及如何创建网络和子网是非常重要的。

在接下来的部分,我们将回顾一些 IP 地址的基础知识,这将帮助我们理解如何构建这样的网络。

IP 地址和 CIDR 基础知识

为了让网络中的设备互相通信,必须有一个互联网协议地址IP 地址)。每个网络设备,无论是计算机、笔记本、手机、打印机还是网络路由器,都需要分配一个在每个网络中可路由的 IP 地址。

此外,每个设备的 IP 地址必须是唯一的——不能有多个设备使用相同的 IP 地址。这就像电话一样。每部电话都有一个唯一的号码。要拨打某个电话,首先需要知道对方的电话号码,然后拨打这个号码,最终完成通话。在图 6.1中,你会注意到家用网络中的每个内部设备都有一个 IP 地址。

有两种类型的 IP 地址:IPv4 和 IPv6。我们将讨论它们之间的主要区别。

IP 地址版本 4 – IPv4

IPv4 是第一种广泛部署的 IP 地址系统版本,最终构成了互联网的基础设施。

你熟悉的标准 IPv4 地址格式,如前面的图所示,遵循四个十进制数字以点分隔的结构。例如,192.168.1.6就是一个例子。IP 地址中的每个十进制表示称为0255,基数为10(十进制)。正如你可能知道的,计算机使用的是二进制数字,而非十进制数字。每个十进制数字转换为二进制后,包含 8 个位,一和零。在无论是十进制还是二进制的情况下,IPv4 地址的长度为 32 位。

192.168.1.6的 IP 地址为例。在二进制中,每个八位字节(octet)将由 8 个零和 8 个一组成(0000000011111111)。IP 地址中的各个十进制数字可以转换为其等效的二进制表示,这些表示将由每个 8 位字节中的一和零的组合构成。在下图中,IP 地址192.168.1.6的十进制表示与其二进制表示11000000.10101000.00000001.00000110是相同的:

图 6.3 – IP 地址到二进制的转换

图 6.3 – IP 地址到二进制的转换

虽然理解这种转换过程并不是通过云计算基础认证考试的必要要求,但我想在这里简要概述一下,以进一步帮助你构建网络知识。

将十进制表示转换为二进制时,需要记住每个 8 位字节中各个位的位值。如果你不想单纯记住它们,也可以通过计算位值来得到它们。

以 IP 地址192.168.1.6中的最后一个八位字节为例,在这种情况下,它是十进制数字 6。

在二进制中,你有 8 个零和一位来表示这个十进制数字。在下表中,我们可以看到这些位及其位值:

图 6.4 – IP 地址位值

图 6.4 – IP 地址位值

对于每个八位字节,从右到左,以下内容适用:

  • 第一个位的值总是等于1。它是2的 0 次方(2⁰),即1

  • 第二个位是第一个位的两倍,等于22 的 1 次方——即2)。

  • 第三个个位是第二个位的两倍,等于42 的 2 次方——即4)。

  • 第四个位是第三个位的两倍,等于82 的 3 次方——即8),依此类推。

计算二进制表示的十进制值的方法如下:

十进制 = (X128) + (X64) + (X32) + (X16) + (X8) + (X4) + (X2) + (X1)

接下来,将 IP 地址192.168.1.6中的十进制数字6转换为二进制时,需要确定哪些“X”应转换为零,哪些应转换为一。你需要将最少的位转换为一,以获得你的十进制表示,并且你应当继续转换那些值小于十进制数的位为一。例如,如图 6.5 所示,我们有以下内容

  • 你不会将最左边的位转换为 1,因为 128 大于我们 IP 地址中的最后一个八位字节 6。同样,你也不会将从最左边数的下一位转换为 1,因为 64 也大于最后一个八位字节,依此类推。

  • 你需要将最右边的第三位转换为 1,因为它的占位符值等于 4,小于我们 IP 地址中的 6

  • 你还需要将最右边的第二位转换为 1,因为它的占位符值等于 2,同样小于我们 IP 地址中的 6

  • 请记住,你希望将尽可能少的位转换为 1 以获得十进制表示。所以,在这种情况下,42 等于我们的 IP 地址中的最后一个八位字节 6。因此,我们不应将最后一位转换为 1,因为这样总和会变成 7,超过了 6

图 6.5 – 将 IP 地址转换为其等效的二进制表示

图 6.5 – 将 IP 地址转换为其等效的二进制表示

因此,6 的二进制表示为 00000110。类似地,将 IP 地址 192.168.1.6 转换为二进制会得到 11000000.10101000.00000001.00000110

IPv4 地址的局限性

IPv4 地址的主要局限之一是它只有 32 位长。这意味着你在 IPv4 地址方案中能够拥有的最大地址数量是 2³²,即 4,294,967,294 个地址。四十亿个地址看似一个大数字,但事实上,我们已经耗尽了这个范围,因为现在需要 IP 地址的设备数量巨大,足以让任何给定网络参与者都需要一个 IP 地址。

当前,地球上最大的网络是互联网。每个需要在互联网中通信的设备都需要一个 IP 地址。此外,给定网络中的每个设备必须具有唯一的 IP 地址。你不能在同一网络中有两个设备使用相同的 IP 地址,因为这将导致冲突。由于四十亿个地址不足以应对大量设备,互联网分配号码管理局IANA)制定了一个聪明的计划,只为私人使用分配一段 IP 地址。这些地址范围在互联网中不可路由,这意味着企业(和家庭)可以使用这些地址配置他们的内部私有网络,而不会与其他企业的网络发生冲突,特别是当这些企业不打算将它们的网络连接起来时。

以下 IP 地址范围是专为私人使用设计的:

  • 10.0.0.0/8 IP 地址范围:10.0.0.0 – 10.255.255.255

  • 172.16.0.0/12 IP 地址范围:172.16.0.0 – 172.31.255.255

  • 192.168.0.0/16 IP 地址范围:192.168.0.0 – 192.168.255.255

    附加说明

    另一个私有 IP 地址范围是169.254.0.0169.254.255.255,但这些地址仅供自动私有 IP 地址分配APIPA)使用,专为内部 Microsoft 网络设计。

剩余的地址被视为公共地址,因此可以在全球互联网中路由。为了说明这一点,让我们看一下下一个图示:

图 6.6 – 企业使用的私有 IP 地址范围

图 6.6 – 企业使用的私有 IP 地址范围

在前面的图示中,你会注意到这三家公司能够为其内部设备使用相同的 IP 地址。由于这些公司彼此之间并没有连接,因此不会出现 IP 地址冲突的可能性。像 IANA 指定的这些私有 IP 地址帮助企业在不需要采购任何公共地址的情况下,构建了内部网络。私有 IP 地址空间还增强了内部网络的安全性,因为这些地址在互联网中不可路由。我们还可以让更多的设备接入网络,因为这些地址范围可以在不需要彼此连接的公司之间重复使用。

企业需要互联网访问

在前面的插图中,我们可以看到,企业可以定义那些在互联网上不可路由的内部网络 IP 地址范围。这些企业仍然需要访问互联网,无论是为了从客户那里发送和接收电子邮件,还是托管他们的客户需要从互联网访问的电子商务应用程序。为了促进互联网连接,需要公共 IP 地址。然而,若每个设备都要分配一个公共 IP 地址,将会破坏私有 IP 地址范围的目的,并带来安全风险。相反,内部网络可以通过一种叫做网络地址转换NAT)的服务来访问互联网。

在下面的图示中,我们可以看到,企业现在能够通过配置在其外部路由器上的 NAT 服务来访问互联网。NAT 服务至少需要一个公共 IP 地址,并将来自内部设备的请求转发到互联网,充当中间的代理。对这些请求的回复也由 NAT 服务处理,确保它们正确地重定向到发起原始请求的内部设备。

图 6.7 – 企业通过 NAT 服务使用的私有 IP 地址范围

图 6.7 – 企业通过 NAT 服务使用的私有 IP 地址范围

鉴于 IPv4 的限制,IPv6 是由互联网工程任务组IETF)在 1990 年代开发的。接下来我们将讨论 IPv6,并探讨它是如何克服 IPv4 的 32 位地址限制的。

那么 IPv6 呢?

为了克服 IPv4 的限制,IETF 开发了 IPv6。IPv6 使用 128 位地址,可以提供 2¹²⁸ 个地址。IPv6 也使用十六进制格式表示,而非标准的十进制格式。在 IPv6 中,从技术上讲,每个设备都可以拥有自己的公共 IP 地址。事实上,Amazon Web ServicesAWS)提供了 IPv6 作为设置云网络的选项。即使你需要保护设备不受公共互联网的访问,你仍然可以为云中的虚拟服务器分配一个 IPv6 地址,并通过出口仅限网关允许它通过互联网发送流量。

然而,许多公司仍然使用 IPv4,部分原因是 NAT 服务的能力,部分原因是为了确保与可能不支持 IPv6 的旧设备的兼容性。

网络大小和类别

最初,IETF 设计了不同类别的 IPv4 地址,以帮助定义不同的网络大小和使用场景。

A 类到 C 类代表了一般的单播 IP 地址(有少数例外),公众可以用来构建不同规模的网络。D 类包含组播地址,E 类则被保留用于实验用途。

这些类别帮助定义网络大小的方式是将 IP 地址分为网络部分和主机部分。我们按类别逐一来看:

  • 1(二进制中的一)和主机位由 0(零)表示。此外,A 类地址的最左边位被设置为 0

  • 10

  • 11

为了更好地说明这三种网络类别的实际样子,让我们来看下一个示意图:

图 6.8 – IP 地址类别

图 6.8 – IP 地址类别

在上面的示意图中,你可以识别出某个特定 IP 地址属于哪个类别,并能即时识别该 IP 块所能容纳的潜在主机 IP 地址数量。例如,如果我们取 IP 地址 192.168.1.6,我们可以确认它是一个 C 类地址。

这意味着该 IP 地址的网络部分是 192.168.1.x。在这个例子中,x 可以是 1 到 254 之间的任何数字。这为你提供了 IP 块中主机部分的 254 个 IP 地址。尽管你在任何一个八位字节中的总 IP 地址数量是 256(2⁸,等于 256),但需要记住的是,第一个和最后一个 IP 地址是不可用的。第一个 IP 地址总是被称为网络 ID,在本例中是 192.168.1.00000000。最后一个 IP 地址是 192.168.1.11111111

计算一个 IP 块中可用 IP 地址数量的简单公式如下:

可用 IP 地址数量 = 2^主机位数 - 2

在之前的例子中,我们有一个 IP 地址 192.168.1.6,它属于一个只能包含 254 个可用 IP 地址的 IP 块。

到目前为止,你已经相信我们的说法,即 IP 地址192.168.1.6属于 C 类网络,并且在192.168.1.x这个 IP 地址块中共有 254 个 IP 地址。接下来我们将讨论子网掩码,看看它是如何工作的。

什么是子网掩码?

子网掩码允许你将 IP 地址块划分为网络部分和主机部分。同一网络部分的主机设备可以轻松相互通信,而要与其他网络中的主机通信,则需要某种形式的路由。

在前述的 C 类网络中,前三个八位字节属于网络部分,只有最后一个八位字节(最后 8 位)属于主机部分。

子网是一个 32 位数字,通过将主机位全部设置为零,并将网络位全部设置为一来创建。然后与相应的 IP 地址块进行逻辑AND运算,以定义每个块中可用的主机 IP 地址数量。

例如,我们可以检查 IP 地址192.168.1.6是否属于 C 类地址,因为 C 类网络掩码的前三个八位字节(前 24 位二进制数)作为网络部分,最后一个八位字节(最后 8 位)作为主机部分。

在二进制中,IP 地址192.168.1.6及其相关子网掩码表示如下:

图 6.9 – 192.168.1.6 的 IP 地址和子网掩码转换

图 6.9 – 192.168.1.6 的 IP 地址和子网掩码转换

逻辑AND运算的计算过程如下:

  • 00的结果是0

  • 01的结果是0

  • 10的结果是0

  • 11的结果是1

基于前述逻辑AND运算的结果,你会注意到如果 IP 地址的前三个八位字节发生变化,例如,如果将192改为193,那么对应的逻辑AND运算结果也会不同。由于前三个八位字节代表 IP 地址的网络部分,因此这种变化实际上表示了不同的网络。

此外,由于子网掩码中的主机部分全部设为零,仅由最后一个八位字节(最后 8 位)表示,因此该八位字节的任何变化都将使 IP 地址保持在同一网络内。

例如,我们来看看 IP 地址192.168.1.12。在下图中,执行与子网掩码的逻辑AND运算后,结果如下:

图 6.10 – 192.168.1.12 的 IP 地址和子网掩码转换

图 6.10 – 192.168.1.12 的 IP 地址和子网掩码转换

从前面的两个图中,你会注意到逻辑AND运算结果产生了相同的二进制数字模式,表示以下情况:

  • 这两个 IP 地址属于同一网络。

  • 在这两种情况下,网络部分相同,都是由子网掩码255.255.255.0(或11111111 11111111 11111111 00000000)得出的。

现在我们知道子网掩码是如何用于掩蔽IP 地址中的网络部分和主机部分的,接下来我们来探讨子网划分的概念。

什么是子网划分?

在前面关于子网掩码的讨论中,我们定义了三种网络类型。这些网络是通过使用具有固定长度的子网掩码来创建的。例如,在一个 A 类网络中,IP 块的第一个八位字节代表网络部分,其余三个八位字节代表主机部分。

这通过使用我们所称之为的子网掩码得以实现。具体来说,我们使用子网掩码 255.0.0.0 来将第一个八位字节划分为网络部分。任何更改使用子网掩码 255.0.0.0 的 IP 地址的第一个八位字节,都将得到一个不同的网络。例如,10.0.0.031.0.0.0 是两个不同的网络。

子网划分是你可以在一个较大的网络内创建子网络的过程。在每个网络中,你可能需要创建较小的、隔离的网络部分,比如一个部分用于托管所有后端服务器,另一个部分用于托管前端 Web 服务器。子网划分使我们能够将一个大网络分解成这些较小的子网。

创建子网的过程涉及从 IP 地址范围的主机部分借用额外的位。这些借用的位用于在一个较大的主网络中创建较小的子网络。

例如,如果我们有一个商业需求,需要八个子网,每个子网能够容纳 30 个设备的 30 个 IP 地址,那么使用标准的 C 类地址,我们可以使用以下 IP 块:

  • 网络 1 – 192.168.1.0(子网掩码:255.255.255.0

  • 网络 2 – 192.168.2.0(子网掩码:255.255.255.0

  • 网络 3 – 192.168.3.0(子网掩码:255.255.255.0

  • 网络 4 – 192.168.4.0(子网掩码:255.255.255.0

  • 网络 5 – 192.168.5.0(子网掩码:255.255.255.0

  • 网络 6 – 192.168.6.0(子网掩码:255.255.255.0

  • 网络 7 – 192.168.7.0(子网掩码:255.255.255.0

  • 网络 8 – 192.168.8.0(子网掩码:255.255.255.0

虽然这种网络设计工作得非常完美,但在可用 IP 地址数量与实际需求之间存在很多浪费。每个网络都有 254 个可用的 IP 地址,但根据需求,我们每个网络只需要 30 个地址。

当使用私有 IP 地址范围时,这可能不会太重要,但当我们考虑将相同的方法应用于有限的公共 IP 地址范围时,这就变得不可能实现了。此外,请注意,通常情况下,你需要为公共 IP 地址付费。

与此方法不同,我们可以使用子网划分和子网掩码将一个单一网络划分为多个较小的网络,从而节省并高效使用给定网络内可用的 IP 地址空间。

例如,我们可以取 192.168.1.0 的类 C 网络,并使用子网掩码 255.255.255.0,将其分割为更小的子网。为了做到这一点,我们从 IP 地址块的主机部分借用额外的位来表示我们的子网。

让我们看一下下一个图示来说明这个概念:

图 6.11 – IP 类 C 网络

图 6.11 – IP 类 C 网络

在一个标准的类 C 网络中,前面的 IP 地址块 192.168.1.0 和子网掩码 255.255.255.0 将产生一个包含 254 个 IP 地址的单一网络。

这是因为我们已经使用了前三个八位字节(24 位)来表示网络部分,而最后一个八位字节(8 位)来表示主机部分。

因为我们有 8 个位来表示主机位,我们可以使用公式 2⁸,结果是 256。但请记住,首尾两个 IP 地址不可用,所以是 256-2,这给我们带来了 254 个可用的 IP 地址。

现在,如果我们从 IP 地址块的主机部分借用前 3 个位来构建子网,我们将得到以下表示:

图 6.12 – 通过借用 IP 地址主机部分的位来创建子网

图 6.12 – 通过借用 IP 地址主机部分的位来创建子网

通过从第四个八位字节(主机部分)的最左边借用 3 位,我们可以有效地创建八个子网网络。这可以通过以下公式推导出来:

子网数量 = 2^借用的主机位数

在这种情况下,2³ = 8,因此,这为我们提供了 8 个子网。此外,由于我们现在只剩下 5 个位来表示主机部分,我们可以计算出每个子网中拥有的 IP 地址数量。公式是 主机数量 = 2^剩余主机位数。在这种情况下,它是 2⁵(因为剩下 5 个位)= 32 个 IP 地址。此外,正如之前讨论的,首尾两个 IP 地址不可用,因此我们从 IP 地址数中减去 2(32-2),得到所需的 30 个 IP 地址。

如果我们查看借用的 3 个位的子网掩码表示,我们将得到如下的新子网掩码:

图 6.13 – 创建子网并得到新的子网掩码

图 6.13 – 创建子网并得到新的子网掩码

使用子网掩码255.255.255.224,我们可以看到可以创建八个独立的子网。

图 6.14 – 创建八个子网

图 6.14 – 创建八个子网

你会注意到在以二进制显示的 IP 块中,模式有所不同。具体来说,借用位中的 10 的不同组合定义了八个不同的网络。以下 IP 地址块是通过从 IP 地址块 192.168.1.0 的主机部分借用 3 位所能创建的八个子网。每个子网有 30 个可用的 IP 地址。以下是这八个网络:

  • 192.168.1.0 (192.168.1.0 到 192.168.1.31)

  • 192.168.1.32 (192.168.1.32 到 192.168.1.63)

  • 192.168.1.64 (192.168.1.64 到 192.168.1.95)

  • 192.168.1.96 (192.168.1.96 到 192.168.1.127)

  • 192.168.1.128 (192.168.1.128 到 192.168.1.159)

  • 192.168.1.160 (192.168.1.160 到 192.168.1.191)

  • 192.168.1.192 (192.168.1.192 到 192.168.1.223)

  • 192.168.1.224 (192.168.1.224 到 192.168.1.255)

通过子网掩码,你可以识别出某个特定 IP 地址块属于哪个网络。例如,IP 地址 192.168.1.130 会属于 IP 块 192.168.1.128,其子网掩码为 255.255.255.224。当我们查看二进制表示并执行逻辑 AND 操作时,这一点更加清晰,如下图所示。你可以看到,逻辑 AND 操作的结果与 IP 地址块 5 匹配:

图 6.15 – 说明 IP 地址如何落在给定子网范围内

图 6.15 – 说明 IP 地址如何落在给定子网范围内

这种二进制表示和逻辑 AND 操作展示了 IP 地址块 5 如何与 IP 地址块 1 在同一网络中,如黄色单元格所示。

无类别域间路由(CIDR)

与之前讨论的子网掩码和复杂性不同,我们可以使用 CIDR。通过 CIDR,你可以像使用子网掩码一样创建不同大小的网络。CIDR 本质上是表示子网掩码的另一种方式,但它提供了更多的灵活性。网络的大小将决定你在该网络中能拥有多少个 IP 地址。你还可以通过使用 CIDR 块配置 IP 地址块的特定子集,将网络划分为多个较小的网络(子网)。

在定义网络时,CIDR 块作为 IP 地址块的一部分显示,后面跟一个斜杠(/)以及一个介于 /8/32 之间的十进制数。例如,IP 地址 192.168.1.6 可能属于一个网络 192.168.1.0/24。我们来看一下这个是如何运作的。

在一个 CIDR 块为 /24 的网络中,我们可以计算出该网络可以容纳的 IP 地址数量,从而确定可以放置在该网络中的设备数量。由于 IPv4 范围中的总位数是 32 位,因此对于 /24 的 CIDR,只需从 32 中减去 24,得到 8 位。这 8 位代表了我们在该网络中可以拥有的 IP 地址总数。具体地,2⁸ 等于 256。因此,192.168.1.0/24 网络中的 IP 地址总数是 256 个。请记住,在任何给定的网络中,第一个和最后一个 IP 地址是不可用的。因此,有效的 IP 地址总数是 256 - 2,即 254。

这里需要注意的一个重要点是,CIDR 块为 192.168.1.0/24 的 IP 网络是一个单一的网络,在该网络中,你可以最多容纳 254 个设备,每个设备都需要一个 IP 地址。IP 地址范围从 192.168.1.1192.168.1.254(请记住,第一和最后的 IP 地址 192.168.1.0192.168.1.255 是不可用的)。

让我们看一个其他的例子。我们将使用 10.0.0.010.0.255.255 的 IP 范围,这个范围是用于我们内部网络的私有范围。假设你选择了一个 CIDR 块为 10.0.0.0/16 的网络。在这个网络中,CIDR 块是 /16。在这个网络中,你可以拥有总共 65,536 个 IP 地址。记住,要计算 IP 地址的数量,你必须从 CIDR 块标记中减去 32 的值,在本例中是 16。这给你剩下 16 位可以供网络中的设备使用。2¹⁶ 等于 65,536 个 IP 地址。记得再从总 IP 地址数中减去 2,得到的有效 IP 地址总数是 65,534。这个网络非常大,你可能希望将这个较大的网络划分为多个子网络(subnets),以便进行资源隔离和分离。使用相同的网络 IP 块,你可以通过增加 CIDR 块的值来创建子网络。例如,在 10.0.0.0/16 的主网络中,你可以使用 /20 的 CIDR 块创建多个子网络。这意味着你为 IP 地址块中的主机部分保留了 12 位(32 位 - 20 位用于网络)。

因此,在 10.0.0.0/16 网络中,你可以拥有 CIDR 块为 10.0.0.0/20 的子网络。每个子网络将有总共 4,096 个 IP 地址(剩余 2¹² 主机位),或者 4,094 个有效 IP 地址(减去不可用的 2 个 IP)。

到目前为止,我们已经讨论了 IP 地址的配置方式,以及它们如何以二进制和十进制表示。

我们还讨论了如何使用 CIDR 块创建一个大型网络,随后将其拆分为多个较小的网络。

在下一节中,我们将开始了解 VPC,它们是您可以在 AWS 上构建的虚拟网络,类似于您在本地定义网络的方式。许多服务需要在 VPC 内启动资源。VPC 还通过防火墙技术帮助保护您的资源,我们将在本章中讨论这些技术。

虚拟私有云(VPC)

VPC 是云中的虚拟网络。您可以选择创建 VPC 的区域,并定义其网络参数,如 IP 地址范围和其中的子网,以实现资源隔离。

部署在 VPC 中的资源可以访问互联网服务,或者可以授予来自互联网的入站访问权限,例如,如果您托管的是一个电子商务 Web 服务器。

AWS 已经为您在每个区域提供了一个默认的 VPC。这些默认的 VPC 旨在帮助您快速启动并能够部署 EC2 实例,使其能够访问互联网,并在必要时,配置为允许来自互联网的直接入站访问。

您还可以根据业务需求配置自定义 VPC。在配置新的 VPC 时,您需要从私有 IP 范围中定义一个 IP 地址块。您的 VPC 将覆盖您部署它的整个区域。这意味着您可以在 VPC 内的不同可用区放置工作负载,以设计高可用性。

关于子网的所有内容

根据您的需求,您可以配置非默认的 VPC,以支持多个子网(subnets)。

子网是 VPC 的一个子集,这在子网的 IP 地址块中定义。例如,如果您的 VPC 的 IP 地址块是 10.0.0.0/16,公共 Subnet-1 可以配置为 10.0.1.0/24 的网络 IP 地址 CIDR 块。您在每个 VPC 中定义的每个子网也需要配置为来自主 VPC IP 地址块的非重叠 IP 范围子集。例如,如果您再创建一个子网,假设是 Subnet-2,您可以使用 10.0.2.0/24 的 IP 地址 CIDR 块。

图 6.8 所示,Subnet-110.0.1.0/24)和 Subnet-210.0.2.0/24)的 IP 地址 CIDR 块不重叠。然而,Subnet-1Subnet-2 都属于同一个 VPC 的 IP 地址 CIDR 块 10.0.0.0/16。这是因为这两个子网的 IP 地址 CIDR 块都是该 VPC 的 IP 地址 CIDR 块的直接子集。

子网也受限于单个可用区。这意味着您可以在多个可用区内重新创建多个子网,这些子网将托管复制资源以提供高可用性。如果某个可用区(因此,其中包含的子网)因可用区故障而下线,您可以将流量重定向到另一个可用区中的替代子网中的复制资源来继续提供服务。以下图示了两个子网,每个子网位于一个可用区中,属于该 VPC。如果 Subnet-1 由于可用区故障而下线,请求仍然可以通过位于 Subnet-2 中的数据库实例继续提供服务。

图 6.16 – VPC 和具有不重叠 IP 地址的子网

图 6.16 – VPC 和具有不重叠 IP 地址的子网

在上图中,我们已经在两个可用区内的两个子网中部署了两个数据库实例。

互联网访问

如果要使 VPC 中的 EC2 实例能够将流量发送到互联网,则需要为您的自定义 VPC 配置互联网访问。此外,如果部署需要从互联网直接入站访问的服务器,则需要将它们部署在具有直接路由到互联网的子网中。

图 6.9 所示,您可以定义哪些子网可以直接访问公共互联网,称为公共子网(例如 DMZ),以及哪些子网是私有的,称为私有子网(用于后端操作)。

要配置具有互联网访问权限的 VPC,您需要部署一个互联网网关。这是一个免费组件,可附加到您的 VPC,以授予 VPC 互联网访问权限。此外,您需要配置与公共子网相关联的路由表,以直接访问互联网网关。然后在公共子网中部署的 EC2 实例可以发送流量到互联网,并配置为接收来自互联网的直接入站流量。然而,额外的要求是,您的公共子网中的 EC2 实例也必须具有公共 IP 地址。这可以由 AWS 动态分配给 EC2 实例。请注意,公共 IP 地址是动态的,这意味着如果 EC2 实例停止然后重新启动,IP 地址很可能会更改。在大多数情况下,这是可以接受的,因为通常您会将 EC2 实例放置在负载均衡器后面(我们在后面的章节中讨论的一项服务)。但是,如果您需要静态的公共 IP 地址 – 即不会更改的 IP 地址 – 那么您可以配置您的 EC2 实例使用弹性 IP 地址。

弹性 IP 地址是静态的,并且会一直保留在你的账户中,直到你释放它们。它们非常适合那些必须始终保持相同公共 IP 地址的 EC2 实例。弹性 IP 地址也可以从一个 EC2 实例重新分配到另一个实例。如果,例如,某个 EC2 实例发生故障,需要启动新的服务器作为替代并保持相同的 IP 地址,弹性 IP 地址会非常有用。因此,弹性 IP 地址可以帮助你设计高可用性服务,在主 EC2 实例发生故障时,自动将 IP 地址重新分配到备用 EC2 实例。

在成本方面,重要的是要记住,弹性 IP 地址仅在它们与处于运行状态的 EC2 实例关联时免费。如果 EC2 实例处于停止(关机)状态,你将按照小时收取该弹性 IP 地址的费用。下图说明了来自互联网的流量如何路由到部署在 VPC 公有子网中的 Web 服务器。请注意,在这种情况下,Web 服务器还需要具有公共 IP 地址。

图 6.17 – VPC 和公有、私有子网

图 6.17 – VPC 和公有、私有子网

在上图中,如果可用区 1A 发生重大故障,用户可以被重定向到可用区 1B 中的公有 子网-2 上的 Web 服务器,并继续操作。

VPC 安全性

在 AWS 上构建 VPC 的主要原因之一是实施防火墙安全性,以确保对 VPC 中部署的资源的访问得到严格管理。例如,一些资源,如 Web 服务器,需要允许来自互联网公共成员的进站访问。相反,如果运行在这些 Web 服务器上的应用需要更新后端数据库(例如,确认客户订单),则你需要确保只有 Web 服务器能够进行这些更新,而不能让公共成员直接访问后端数据库。

亚马逊提供两种安全服务,帮助你构建高度安全的环境,确保仅允许所需级别的访问和流量。

安全组

安全组是一种防火墙,旨在帮助你配置允许的流量类型,包括进站和出站流量,供 EC2 实例使用。当你启动一个 EC2 实例时,必须为其分配至少一个安全组,并且该安全组必须包含允许的任何进站和出站流量的必要规则。请注意,你可以将最多五个安全组与一个实例关联。安全组作用于实例级别,而非子网级别。

每个 VPC 都配有一个默认的安全组,该安全组允许所有流量入站,但仅限于该流量的源是安全组本身。这意味着,如果你有两个与同一个安全组关联的 EC2 实例,那么一个 EC2 实例将接受由另一个 EC2 实例发起的流量。此外,所有的出站流量都被允许。这意味着与默认安全组关联的 EC2 实例可以发起出站通信。这是基于你可以信任你的 EC2 实例进行任何必要的出站请求,例如下载操作系统更新。

然而,安全组在你创建必要规则之前,不允许来自其他来源(除自身之外)的任何流量入站。这是为了防止任何未经请求的流量到达你的实例。因此,如果你正在配置一个需要使用标准 HTTP 协议提供网页的 web 服务器,你就需要为 HTTP 配置一个合适的入站规则,并指定流量的来源,例如 IP 地址范围。除了默认的安全组之外,你还可以创建自己的安全组。

关于安全组,一个需要考虑的重要特性是,即使你没有配置任何入站规则,对于任何出站请求的响应流量,安全组也会允许其入站。相反,如果你配置了任何入站规则,那么由于这些规则允许的入站流量的响应,都会被允许出站,无论是否有显式的出站规则。这一特性使得安全组具有状态性

其他一些关键特性包括:

  • 你可以配置 允许 规则,但不能配置显式的 拒绝 规则。

  • 你可以为入站和出站流量指定单独的规则。

  • 你可以根据协议和端口号过滤流量。你还可以指定源和目标,这些源和目标可以是其他安全组,从而提供分层的安全方法。

因此,安全组保护你的 EC2 实例,并允许你定义允许哪些入站流量到达实例。

网络访问控制列表(NACL)

NACL 是另一种防火墙服务,旨在保护整个子网。与其在实例级别提供保护,它们可以配置为允许或拒绝流量到达子网,而这些子网中部署了你的 EC2 实例。

每个 VPC 都会配置一个默认的 NACL,该 NACL 被配置为允许所有的进出流量。这是可以接受的,因为流量必须通过安全组进行许可,而安全组默认会阻止所有的入站连接。

顺便提一下,你可以为你的子网配置自定义的 NACL,这些 NACL 默认会阻止所有的进出流量,且需要额外的配置才能创建必要的进出规则。

NACL 也是无状态的,这意味着你必须同时配置入站规则和相应的出站规则,以确保流量能够流动并得到响应。

网络地址转换(NAT)

在本章开始时,我们讨论了典型企业网络通常如何被划分为多个子网络。某些资源将被部署在 DMZ(在 AWS 上称为公共子网),而其他资源将部署在后端私有子网中。通过将资源部署在私有子网中,我们确保这些资源不会直接连接到公共互联网。这些资源包括数据库服务器或应用程序服务器,这些服务器应该仅通过前端 Web 服务或负载均衡器访问。这样可以确保所有流量都通过这些前端 Web 服务进行代理,而不会将这些资源暴露在公共互联网。

然而,应用服务器可能需要访问互联网,例如下载产品更新或补丁。由于这些服务器没有公共 IP 地址,并且将被放置在私有子网中,我们需要为它们提供访问互联网的机制,并允许它们接收来自互联网的响应。为满足这一需求,我们可以设置并配置一个 NAT 服务。如图 6.10所示,这个 NAT 服务需要放置在你的 VPC 的公共子网中,并附加一个弹性 IP 地址。然后,你的路由表需要配置规则,允许来自私有子网的 EC2 实例通过此 NAT 服务访问互联网。NAT 服务将来自私有子网的 EC2 实例请求转发到互联网,充当代理。

最终,如果你需要让 EC2 实例通过私有 IPv4 地址访问互联网,而不直接将它们暴露在互联网上(例如,通过公共 IP 地址),那么在 AWS 上,你可以配置一个 NAT 网关来代表这些设备转发互联网请求。

如果你正在使用 IPv6,如本章前面所讨论的那样,并且你希望确保拥有 IPv6 的 EC2 实例可以访问互联网而不会直接暴露在互联网上,你需要通过仅出站互联网网关来路由这些实例的流量。

VPC 对等连接

VPC 对等连接是两个 VPC 之间的私有网络连接。该服务允许你连接多个 VPC,以便一个 VPC 中的实例可以访问另一个 VPC 中的资源。这意味着 VPC 之间通过对等连接的流量不会穿越公共互联网,并且提供更高的带宽和安全性。此外,节点之间的连接具有高可用性,并且没有单点故障。

你可以在同一个 AWS 账户中的 VPC 之间,或跨 AWS 账户之间创建 VPC 对等连接。对等连接也可以在同一区域的 VPC 之间,或跨不同区域的 VPC 之间配置。这意味着,如果你在不同区域拥有 VPC,例如为了将资源部署到更靠近全球分支机构的位置,这些资源可以跨区域互相访问。

VPC 中转网关

前面,我们讨论了 VPC 对等连接如何帮助你将多个 VPC 连接在一起。然而,VPC 对等连接的问题在于,每个 VPC 必须与其对等体建立一对一的连接。一旦建立了连接,你还需要在每个对等连接的 VPC 中配置路由表,以便通过对等连接引导适当的流量。如果你有多个 VPC 需要相互连接,那么管理这些单独的连接和大量的路由表条目将变得非常困难。

在下图中,你将注意到连接每个 VPC 的各种对等连接的复杂性:

图 6.18 – 多个 VPC 对等连接

图 6.18 – 多个 VPC 对等连接

使用 AWS 中转网关,你可以通过网关将各个 VPC 连接在一起,采用中心辐射模型。这大大简化了你的网络架构,因为每个与网关对等的新 VPC 只需要一个连接,就可以将流量路由到其他 VPC,只要必要的路由表配置允许这样做。

以下图展示了这一简化模型:

图 6.19 – AWS 中转网关

图 6.19 – AWS 中转网关

中转网关有助于减少在尝试将多个 VPC 连接在一起时的架构设计开销。中转网关通过使用中心辐射模型来实现这种设计。

虚拟专用网络(VPN)

你的 VPC 托管在 AWS 平台上。你可以在 VPC 中部署各种资源,并且如果你配置了互联网网关以及必要的安全组和 NACL,你可以通过公共互联网访问这些资源。然而,你还可以将你的 VPC 连接到你的公司网络(本地或共址数据中心)。这种类型的连接称为 VPN。VPN 是在两个端点之间通过公共互联网建立的安全加密站点到站点隧道。它提供 AES 128 或 256 位互联网协议安全(IPsec)加密,这意味着你可以在两个端点之间安全地传输数据。

要在你的本地网络和 VPC 之间建立 VPN 连接,你需要创建一个虚拟专用网关VPG),并将其附加到你的 VPC。你还需要配置一个客户网关,这是一种位于本地网络中的物理或虚拟设备,通过互联网连接到 VPG。该设置如图 6.12所示。

AWS 支持多种客户网关设备,包括 Cisco、Juniper 和 Check Point 设备。一旦 VPN 连接建立,你仍然需要在内部网络和 VPC 上配置路由表,以便根据需要通过隧道传输适当的流量。

图 6.20 – Amazon VPN

图 6.20 – Amazon VPN

虽然 VPN 连接可以加密本地网络与 VPC 之间的流量,如图所示,但带宽仅限于你的互联网服务提供商所提供的带宽。此外,在 AWS 上,VPN 的硬限制为 1.26 Gbps。通过 VPN 连接,你还需要依赖公共互联网的路由机制。如果你需要一条完全绕过公共互联网的更专用的连接,那么 Amazon 提供了一项名为 Direct Connect 的服务,我们将在接下来讨论。

Direct Connect

Direct Connect 是一项服务,使你能够通过专用的私人连接将公司数据中心连接到你的 VPC 和 AWS 提供的公共服务,从而完全绕过互联网。

由于需要在你的公司办公室(或数据中心)与本地的 Amazon Direct Connect 合作伙伴之间铺设必要的光纤电缆,这种解决方案比标准的 VPN 设置要昂贵。不过,该服务可以提供 1 Gbps、10 Gbps 甚至 100 Gbps 的专用链接。因此,Direct Connect 为你提供了超高速的连接以及安全的私人连接。

在本节中,我们考察了 Amazon VPC 的核心特性和组件。VPC 使你能够在 AWS 云中构建安全、隔离的网络区域,并且可以配置为仅允许授权的连接进入这些区域。VPC 提供两种防火墙解决方案——安全组和 NACL。前者可以配置为仅允许特定类型的流量,并且在实例级别充当防火墙,而后者则保护整个子网。安全组是有状态的,而 NACL 是无状态的;然而,NACL 还提供了拒绝特定来源的特定类型流量的功能。例如,如果你托管了一个 Web 服务器,想允许来自互联网的公共访问,但也希望阻止来自某个 IP 范围的访问(可能是因为你发现该范围存在潜在攻击),NACL 可以帮助你配置必要的拒绝规则。

你可以使用 NACL 和安全组来构建一个分层的安全架构。NACL 将通过明确指定可以进入子网的流量类型,保护整个子网。接下来,你可以为可能驻留在子网中的不同 EC2 实例组定义安全组,确保只有必要的流量才能连接到运行在这些 EC2 实例上的应用程序。

然后我们研究了诸如 VPC 对等连接、AWS Transit Gateway、VPN 连接以及 Direct Connect 服务等功能。在接下来的部分,我们将学习 AWS 的全球 DNS 服务 Amazon Route53。AWS Route53 使你能够通过 DNS 名称解析将流量引导到 VPC 内和公共互联网中的资源,同时还帮助你调整流量以实现高可用性和容错。

了解 DNS 和全球路由与 Amazon Route53

AWS Route53 是 Amazon 的全球 DNS,它是一项帮助将人类可读的名称转换为 IP 地址的服务,因为最终,计算机是通过 IP 地址互相连接的。互联网上的 DNS 服务器托管着数十亿条这类名称到 IP 地址的记录,此外还有其他类型的记录。当你使用自己喜欢的浏览器访问特定网站(例如 example.com)时,你的浏览器会向本地 DNS 服务提供商发送请求,如果需要,DNS 服务提供商会将查询转发给该域名(example.com)的权威 DNS 服务器。这个权威 DNS 服务器会返回你试图访问的网站的 IP 地址,之后你的浏览器就能够与该网站建立连接(在此案例中是 example.com)。这个将域名转换为 IP 地址的过程叫做名称解析。

Amazon Route53 提供三项主要功能:

  • 域名注册

  • DNS 路由

  • 健康检查

接下来我们来看一下各个功能。

域名注册

在你可以使用域名为你的网站或 Web 应用程序提供公共访问之前,你需要通过域名注册商注册一个你选择的名称。Amazon Route53 提供完整的域名注册服务。当你选择一个名称进行注册时,你可以选择 .com.co.uk.org.net 等后缀。如果你选择的名称在某个特定的 TLD 下不可用,你可以尝试不同的 TLD。例如,如果 example.com 已被他人注册,你可以尝试 example.co.ukexample.net。有数百种 TLD 可供选择。

作为注册的一部分,你需要为你的域名购买一个租赁期,租赁期可以是 1 年到 10 年之间的任何时间。你需要在租期到期之前续租,否则你可能会面临其他人注册该名称的风险,这将影响你继续使用该域名提供 Web 服务的能力。

一旦你注册了域名,就需要通过 DNS 托管服务提供商进行托管。通常,注册和托管服务由同一公司提供,在这种情况下是 Amazon Route53。托管服务使你能够为你的域名创建资源记录,例如,将域名配置为指向一个 Web 服务器的 IP 地址。当互联网上的用户在浏览器中输入域名时,他们会被引导到你的 Web 服务器,该服务器托管着你的网站。

你可以创建几种类型的资源记录。以下表格显示了一些类型的资源记录:

表 6.1 – iaasacademy.com 的示例资源记录

表 6.1 – iaasacademy.com 的示例资源记录

在配置你的域名时,你还需要定义一个区域文件,该文件将承载你域名的资源记录。在区域文件中,你将创建资源记录,例如 A 记录,这是标准的名称到 IP 地址的解析记录。接下来,我们将了解如何在 AWS Route53 上创建区域文件。

托管区域

要为你的域名创建必要的资源记录,你需要在 Route53 上设置一个托管区域。托管区域是一个容器,用于存储和管理你的资源记录,并允许你定义如何为你的域名(example.com)及任何子域(例如 portal.example.com)路由流量。

你可以在 Route53 上设置两种类型的托管区域:

  • http://bucket-name.s3-website-Region.amazonaws.com。你可以将这个 S3 网站端点 URL 提供给用户,供他们访问托管在 S3 存储桶上的网页。然而,更好的选择是创建一个别名记录,将你的公司域名(example.com)指向 S3 网站端点。你的用户会发现记住你的域名比记住原始的 S3 端点名称容易得多。

  • devserver.example.com 指向你 VPC 中的 EC2 实例,其他 VPC 中的资源可能需要连接到该实例。这比记住 EC2 实例的 IP 地址要好得多,意味着你不需要将这些 IP 地址硬编码到应用代码中,这样管理起来会变得更加困难。

DNS 主机名

AWS 为你的 VPC 提供了一个 DNS 服务器(Amazon Route53 Resolver)。这使得 AWS 可以为你在 VPC 中部署的实例配置 DNS 主机名。DNS 主机名由主机名和域名组成,例如 myserver.mycompany.com。DNS 主机名允许你为 EC2 实例创建唯一的名称。此外,AWS 提供了两种类型的 DNS 主机名:

  • private-ipv4-address 是反向查找的 IP 地址。

  • 公共 DNS 主机名 – 这些将公共 DNS 主机名解析为实例外部的公共 IPv4 地址,以及从实例内部解析为实例的私有 IPv4 地址。根据区域的不同,DNS 主机名可以采用以下两种形式之一:

    ec2-public-ipv4-address.compute-1.amazonaws.com for the us-east-1
    ec2-public-ipv4-address.region.compute.amazonaws.com for other Regions.
    

虽然 Route53 提供了一个功能完整的 DNS 服务,但它还允许你设计如何在一个区域内以及跨区域地路由流量。接下来,我们将查看 Amazon Route53 提供的不同路由策略。

路由策略

除了标准的名称解析服务,例如将您的域名指向特定的 IP 地址,亚马逊 Route53 还提供了几种复杂的路由策略和配置。这些路由策略使您能够定义各种规则,从而构建高可用的解决方案,或者将用户重定向到距离其位置更近的资源,从而减少延迟。

让我们来看看 Amazon Route53 提供的各种路由策略:

  • 简单路由策略:最基本的默认路由策略。此资源记录使您能够将域名映射到单个资源,例如 Web 服务器的 IP 地址或弹性负载均衡器的 DNS 终端。该策略引擎不会检查资源是否正常工作或可用。

  • 故障切换路由策略:为了提供高可用性,您可以将两个资源副本分别部署在不同的区域。一个资源副本将被指定为主资源,另一个为次资源。Route53 会执行健康检查(稍后讨论),以确定主资源是否可用。如果无法连接到主资源,Route53 会将所有流量重定向到次资源。此故障切换路由策略使您能够设计具有主动-被动故障切换的解决方案。

  • 地理位置路由策略:此路由策略使您能够根据用户的地理位置(如大洲、国家或美国的州)路由流量。用户的位置是通过 DNS 查询源确定的。这种路由策略特别有用,当您需要确保您的内容仅在您有分发权限的地点可访问时。例如,如果您的最终用户位于欧洲,您可能希望将他们引导到部署在法兰克福区域的资源副本。

  • 延迟路由策略:当您在多个区域部署资源时,如果您希望将用户的流量路由到提供最低延迟的区域,这种路由策略尤其有用。

  • 加权路由策略:这种路由策略使您能够将总流量的不同比例路由到与单个域名相关的不同资源。例如,您可以选择将四分之三的流量路由到一个资源副本,而将剩下的四分之一流量路由到另一个副本。当您希望将所有流量从一个资源逐步迁移到另一个资源时,这也特别有用,例如将网站的流量从旧版迁移到新版。您可以逐步调整加权值,在短时间内将流量从旧版本网站迁移到新版本。

在创建某些路由策略时,例如故障转移路由策略,你还需要定义健康检查,以便 Route53 可以确定是否需要切换到备用站点。接下来,我们将详细讨论健康检查。

健康检查

你可以使用 Route53 对你的资源执行健康检查,例如 Web 服务器、弹性负载均衡器和 S3 静态网站。根据检查结果,你可以采取适当的措施,并在必要时重定向流量,以确保服务的高可用性。你可以执行三种类型的健康检查:

  • 监控端点的健康检查:此健康检查监控你指定的端点,例如 IP 地址或域名。

  • 监控其他健康检查的健康检查:你可以选择监控多个资源,并根据某些最小健康资源数量来确定你的资源集合的整体健康状况。如果可用资源的数量低于指定的阈值,Route53 健康检查则可以采取适当的措施。

  • ALARM 状态也可以独立根据度量数据来确定健康状况。

除了路由策略和健康检查外,你还可以构建复杂的路由规则,接下来我们将讨论流量流和流量策略。

流量流和流量策略

你可能需要使用资源记录和 Route53 路由策略的组合来创建复杂的流量路由。例如,你可以创建一个配置,其中设置跨多个区域的延迟路由策略,然后在每个区域中引用加权记录。每个配置称为 流量策略,你可以使用可视化编辑器帮助你构建路由架构,Route53 会使用该架构来设计流量流向。通过可视化编辑器,你还可以创建多个版本的流量策略,以便快速适应变化。请注意,你只能使用流量流来在公共托管区域中创建记录:

  • 地理邻近路由策略:除了标准的 Route53 路由策略外,你还可以配置地理邻近路由策略(仅在使用 Route53 Traffic Flow 时可用)。此路由策略使你能够根据资源的位置来路由流量。你还可以使用 偏差 值将流量从一个位置的资源转移到另一个位置的资源。

  • Route53 解析器:Route53 还使你能够通过配置转发规则在 Route53 解析器和你网络中的 DNS 解析器之间执行 DNS 解析。在这种情况下,你的网络 可以包括你的 VPC、其他对等的 VPC,甚至是通过 VPN 或 AWS Direct Connect 连接到 AWS 的本地企业数据中心。

在本节中,我们了解了由 Route53 提供的亚马逊 DNS 服务。Route53 使您能够注册域名、创建公共和私有托管区以管理资源记录、为不同的用例定义路由策略,并对资源进行健康检查。Route53 还使您能够使用多个资源记录以及流量流和流量策略构建复杂的路由规则。

在下一部分中,我们将了解 AWS CloudFront,这是亚马逊的内容分发网络CDN)解决方案。CDN 通常用于从源位置全球分发内容,并借助缓存服务提供可靠的低延迟访问。

使用 Amazon CloudFront 实现一个强大的 CDN

Amazon CloudFront 是一个 CDN,帮助您通过低延迟连接将静态和动态数字内容全球分发。AWS CloudFront 使用 AWS 边缘位置和区域边缘缓存,将内容缓存到离最终用户更近的位置。这意味着您可以将内容托管在一个特定的区域,而用户如果从另一个区域访问该内容,将通过边缘位置通过 AWS 主干网络获取内容。此外,当内容被提取时,它会在离用户更近的本地边缘位置缓存一段时间(称为生存时间TTL),进一步提高后续请求相同内容的网络延迟。

图 6.21 – 典型的 CloudFront 分发

图 6.21 – 典型的 CloudFront 分发

要配置 Amazon CloudFront,您需要创建一个分发端点,该端点定义您希望提供的内容类型及其来源。源可以是 S3 存储桶、配置为静态网站的 S3 存储桶、Amazon EC2 实例或弹性负载均衡器等。在配置过程中,您将获得一个 CloudFront URL,您可以将其提供给用户,以通过 CloudFront 访问您的内容。您还可以使用自定义 URL,这允许您使用公司品牌域名来定义您的分发。

当您配置 CloudFront 分发时,您可以选择通过 HTTP 和 HTTPS 提供内容。一些可以提供的内容类型示例如下:

  • 静态和动态内容,例如 HTML、CSS、JavaScript 和图片

  • 按需视频的不同格式,例如 Apple HTTP 实时流媒体HLS)和 Microsoft 平滑流媒体

  • 现场活动和会议

CloudFront 最终使您能够为您的 web 应用程序架构一个 CDN。接下来,我们来看一下 CloudFront 的定价。

为您的 CloudFront 分发选择价格类

Amazon 会向您收取通过其边缘位置分发内容的费用。然而,Amazon 并不是按每个边缘位置收费,而是将跨区域的多个边缘位置归为三种特定的价格类别。最昂贵的价格类别是您的内容可以通过全球所有边缘位置访问。这也是创建分发时的默认价格类别,但最终提供最佳性能。如果您希望降低成本,并且知道您的内容消费者来自特定地区,您可以选择两种替代价格类别:

  • 美国;加拿大;欧洲;香港、菲律宾、韩国、台湾、新加坡;日本;印度;南非;和中东地区——此类别排除了最昂贵的地区。

  • 美国、加拿大和欧洲地区——这个类别是最便宜的。

在本节中,我们探讨了 AWS CloudFront 服务所提供的服务,以及它如何利用 AWS 骨干网络将您的内容全球分发,提供更低的延迟和更好的性能。

在下一节中,我们简要介绍了 Amazon API Gateway,它允许您通过创建、发布和管理 REST、HTTP 和 WebSocket API 来架构无服务器应用程序。

Amazon API Gateway 介绍

Amazon API Gateway 帮助您设计应用程序解决方案,偏向微服务架构,而非单体设计。您的后端开发人员可以构建一系列相互协作的微服务。例如,在一个电子商务应用程序中,您可以拥有多个微服务,如购物车服务、目录服务、用户资料和用户会话服务、库存管理服务等。

如果没有 API 网关,您的前端开发人员(负责构建前端用户界面)将需要了解所有后端 API,并构建应用程序来调用多个微服务,以提供完整的功能。想象一下,如果您的后端开发人员之后需要重构其中一个微服务,例如将一个微服务拆分为两个独立的微服务,每个微服务都有自己的 API,这将导致前端用户界面的一些组件也需要重新编码。

通过 API 网关,您本质上创建了一个抽象层。这个 API 网关可以用来公开所有需要向外部客户端提供调用后端服务的 API。来自这些客户端的请求随后可以被路由到各种后端微服务。如以下图所示,Amazon API Gateway 充当您的应用程序访问后端数据、Lambda 函数、数据库等的“前门”。它处理所有进入的流量,并能够处理数千个并发的 API 调用。

图 6.22 – Amazon API Gateway

图 6.22 – Amazon API Gateway

Amazon API Gateway 还提供了帮助你保护后台服务的功能,如授权、访问控制和监控,帮助保护后台资源免受分布式拒绝服务DDoS)攻击。

在设计你的软件架构时,添加这一抽象层会为客户访问后台资源创建额外的跳跃。为了提高应用响应能力,Amazon API Gateway 提供了优化你的 API 的功能,如响应缓存和有效载荷压缩。

在这一部分中,我们简要介绍了 Amazon API Gateway,它是一个完全托管的服务,允许你创建、发布、维护、监控和保护 API。

在下一部分,你将有机会在本章练习中构建自己的 Amazon VPC。

练习 6.1 – 设置公共子网 VPC

在本练习中,你将创建一个包含公共子网的自定义 VPC。在后续章节中,你将扩展这个 VPC,添加用于不同用例的私有子网:

  1. 登录到你的 AWS 账户,作为你在第四章中创建的 IAM 用户Alice身份与访问管理

  2. 在主 AWS 管理控制台中,在搜索框中搜索VPC图 6.23 – 配置一个新的 VPC

    图 6.23 – 配置一个新的 VPC

  3. 从过滤后的列表中选择VPC

  4. VPC 是区域特定的,所以请确保从屏幕右上角选择 US-East-1 区域。

  5. 在主 VPC 控制台屏幕上,点击启动 VPC 向导按钮。这将启动 VPC 向导。

  6. 接下来,选择第一个选项,带有单个公共子网的 VPC

  7. 步骤 2中,为你的 VPC 提供以下详细信息。

    对于10.0.0.0/16,此 IP 块表示你的 VPC 网络。

    对于ProductionVPC

    向导引导你创建一个单独的公共子网。稍后,你将扩展这个 VPC 以供未来使用,但现在,请设置10.0.1.0/24

    对于可用区,从下拉列表中选择us-east-1a。请记住,尽管 VPC 跨越整个区域,但你创建的每个子网仅跨越一个可用区。在这种情况下,我们正在us-east-1a中创建一个单独的公共子网。

    接下来,将子网名称更改为Public Subnet One

    接下来,点击屏幕右下角的创建 VPC按钮。查看以下截图以了解前面的步骤:

    图 6.24 – 带有公共子网的 VPC 配置页面

    图 6.24 – 带有公共子网的 VPC 配置页面

  8. 向导会根据你指定的参数运行,并创建你的第一个 VPC。

  9. 点击OK,进入VPC 成功创建状态页面。

  10. 在 VPC 列表中,你会注意到你新创建的ProductionVPC已经成功创建:

图 6.25 – 新创建的 ProductionVPC

图 6.25 – 新创建的 ProductionVPC

在本节中,我们演示了如何使用 AWS VPC 向导创建第一个公共子网 VPC。之后,在培训指南中,你将扩展 VPC,包括私有子网,并在我们的 VPC 中部署服务器。

总结

本章介绍了 Amazon 的核心网络服务,包括 VPC、Amazon 的 DNS 服务(Route53)以及 Amazon 的 CDN 解决方案(Amazon CloudFront)。

在本章中,你学习了计算机如何通过 IP 地址进行互相通信。你还了解到,通过使用 IP 地址和 CIDR 块范围,你可以构建隔离的网络和子网。接着,我们讨论了如何在云中使用 Amazon VPC 服务构建相同的网络架构。在设置 VPC 的过程中,你检查了构建私有和公共子网的使用案例,并探索了定义安全规则和限制进出 VPC 的流量类型的工具。我们还看到了其他 VPC 服务,它们使你能够通过 VPC 对等连接互连多个 VPC,并通过 AWS Transit Gateway 更轻松地在 VPC 之间构建复杂连接。

接下来,我们学习了 AWS Route53 服务,它是一个 DNS 服务,提供域名注册、路由策略配置服务和健康检查。你了解到,通过使用路由策略,你可以根据广泛的使用案例定制解决方案。这些使用案例包括通过 Route53 延迟路由策略提供主动-被动故障转移服务,并且通过加权路由策略,你可以逐步将用户从一个资源迁移到另一个资源。

最后,你学习了 Amazon CloudFront 以及如何使用 AWS 的边缘位置,通过高速低延迟连接,从单一区域向全球分发数字资产和内容。

在下一章中,我们将学习 弹性云计算EC2)服务,以及如何在云中部署计算服务,例如运行 Linux 或 Windows 操作系统的虚拟服务器。

问题

  1. 哪个 VPC 组件可以让你为 VPC 中部署在公共子网中的服务器授予互联网访问权限?

    1. NAT 网关

    2. Internet 网关

    3. VPC 对等连接

    4. 安全组

  2. 以下哪个陈述是正确的?

    1. NACLs 保护整个子网,而安全组保护单个实例。

    2. NACLs 保护单个实例,而安全组保护整个子网。

    3. NACLs 使私有子网中的实例能够访问互联网,并充当 NAT 设备,而安全组则用于将 IAM 策略分配给需要访问 S3 存储桶的服务器。

    4. NACLs 使私有子网中的实例能够访问互联网,并充当 NAT 设备,而安全组则用于将 IAM 策略分配给需要访问 S3 存储桶的服务器。

  3. 哪个 AWS 服务允许你购买并注册新域名,用于在互联网上发布你的站点?

    1. Route53

    2. VPC

    3. RDS

    4. Elastic Beanstalk

  4. 哪个 AWS 服务可以让你分发你的数字资产,使其在尝试访问此内容的用户本地缓存,并具有生存时间,从而有助于减少网络延迟?

    1. AWS CloudFront

    2. AWS CloudTrail

    3. AWS CloudWatch

    4. AWS CloudScape

  5. 你的组织拥有多个 AWS 账户和多个 VPC。你希望将这些 VPC 连接在一起,并集中管理连接策略。哪个 AWS 服务可以让你将多个 VPC 配置为一个中心节点,并控制所有连接网络之间的流量路由,这些网络就像辐射的轮辐?

    1. AWS Transit Gateway

    2. AWS Global Accelerator

    3. AWS VPC Peering

    4. AWS 虚拟私人网关

  6. 哪个 AWS 服务可以让你为配置了 IPv4 的 EC2 实例提供互联网访问,这些实例位于 VPC 的私有子网中?

    1. 出口专用互联网网关

    2. NAT 网关

    3. VPC 端点

    4. VPN 隧道

  7. 你的公司在美国有一个主要的生产网站,在悉尼有一个灾备站点。你需要配置 DNS,使得如果主站点不可用时,可以将 DNS 故障转移到次要站点。你可以配置哪个 DNS 路由策略来实现这一点?

    1. 加权路由

    2. 地理位置路由

    3. 延迟路由

    4. 故障转移路由

  8. 你计划使用 Amazon Route53 设置 DNS 故障转移。你可以使用 Route53 的哪个功能来测试你的 Web 应用的可用性和可达性?

    1. 私有 DNS

    2. CloudWatch

    3. 健康检查

    4. DNS ping

  9. 哪个 VPC 防火墙解决方案可以让你拒绝来自特定 IP 地址的入站流量,用于防止恶意攻击?

    1. AWS 防火墙

    2. AWS 安全组

    3. AWS 网络访问控制列表 (NACLs)

    4. AWS CloudFront

  10. 哪个 AWS 服务可以让你通过高达 100 Gbps 的网络连接,将私有数据中心连接到你的 Amazon VPC?

    1. Snowball

    2. Direct Connect

    3. 虚拟私人网络 (VPN)

    4. 虚拟卫星网络 (VSN)

第七章: AWS 计算服务

在过去,传统的本地环境由各种 服务器 组成,这些服务器用于托管各种应用程序、网站和其他服务。这些 服务器 是物理硬件,如你的家用桌面计算机,但设计时采用了更强大的组件(如 CPU、内存和存储),以便托管终端用户的应用程序。

服务器 是指在计算机硬件上运行的应用程序,提供一组服务,无论是提供给其他应用程序还是终端用户。一个物理计算机可以托管多个 "服务器" 提供的服务——例如,一台计算机可能同时提供电子邮件服务和网络服务。

然而,传统上,你在配置物理计算机托管服务器时会受到限制。主要原因是内存、存储的有限,以及更重要的是,当应用程序访问底层资源时,容易发生冲突。这些资源可以是共享库和运行时环境,以及对物理硬件(如内存、存储等)的访问。

随着虚拟化技术的出现,现在可以在单一物理主机上配置 虚拟机VMs)——每个虚拟机提供一个或多个服务,通常这些服务彼此相关,以避免冲突。例如,你可以有一个虚拟服务器提供电子邮件服务,另一个提供文件共享服务。

Amazon Web ServicesAWS)在云中提供虚拟机(VMs),我们称之为 弹性计算云EC2。本章将介绍 EC2 服务的核心功能,使我们能够在 AWS 上托管应用程序、网站和其他计算密集型处理服务。此章节还将涵盖其他形式的计算服务,包括 EC2 的轻量替代方案 Lightsail、容器和无服务器服务,如 Lambda。

本章将涵盖以下主题:

  • 弹性计算服务Amazon EC2)介绍

  • 学习 Amazon 弹性块存储EBS)和实例背后的存储

  • 学习 EC2 定价选项

  • 使用 Amazon 弹性文件系统Amazon EFS)实现共享文件存储

  • 使用 Amazon Lightsail 介绍 虚拟专用服务器VPS

  • Amazon 弹性容器服务(ECS)和 Kubernetes 介绍

  • AWS 中的额外存储选项概述

Amazon EC2 介绍

Amazon EC2 是 AWS 的旗舰服务之一,允许你在云端启动和设置虚拟服务器。这与在本地环境中设置和配置 虚拟机(VMs)非常相似,你会在像 VMware 或 Hyper-V 这样的虚拟化管理程序上进行配置。

正如在第一章《什么是云计算?》中讨论的那样,虚拟机管理程序(Hypervisor)是一种软件,它允许您创建虚拟资源,例如虚拟服务器。根据底层硬件的容量,您可以在同一物理硬件上托管多个虚拟服务器。这些虚拟服务器通过虚拟机管理程序访问实际的物理硬件,虚拟机管理程序将物理硬件组件(如 CPU、内存、存储等)划分为较小的虚拟组件,并将其呈现给虚拟服务器。您可以使用 VMware 和 Hyper-V 等虚拟机管理程序软件来创建虚拟服务器,选择虚拟组件并根据需要进行配置。每个虚拟服务器,也叫做虚拟机(VM),可以安装并配置操作系统以及所需的应用程序。

然而,Amazon EC2 将底层虚拟机管理程序层抽象化,从而客户无法直接访问虚拟机管理程序本身。通过自助服务门户或 API 访问,您可以在 AWS 账户中启动虚拟服务器,我们称之为 EC2 实例,并且特别是在您的 虚拟私有云VPC)中(在前一章中讨论过)。

传统上,在 VMware 或 Hyper-V 管理控制台上,您需要指定虚拟服务器所需的 CPU 和内存量,以启动虚拟服务器。

使用 AWS,您可以从可用的 EC2 实例类型和系列中选择。EC2 实例系列是指实例类型的通用用途场景。例如,通用型系列设计用于处理需要平衡计算、内存和网络资源的工作负载。在这个通用型系列中,您可以找到多种 EC2 实例类型,这些类型对应于托管实例的主机计算机的底层硬件。这些 EC2 实例类型提供了不同组合的计算、内存和存储能力。例如,在通用型系列中,您可以选择如 M5T2 等实例类型。T2 实例类型使用英特尔至强处理器,提供可突增的 CPU,并设计为平衡计算、内存和网络资源。M5 实例类型使用英特尔至强® Platinum 8175M 处理器,提供最多 384 GiB 的内存,并通过增强型网络提供最多 25 Gbps 的网络带宽。

在每个 EC2 实例类型中,您还可以选择实例大小。当为您的应用程序选择 EC2 实例时,您需要识别实例的系列、类型并选择实例的大小。例如,在 t2.microt2.xlarge 之间。t2.micro 实例仅配备 1 GiB 的内存和 1 个虚拟 CPU,而 t2.xlarge 配备了 16 GiB 的内存和 4 个虚拟 CPU。

我们将在稍后更详细地讨论 EC2 实例家族、类型和大小。可以说,你可以访问非常丰富的 EC2 实例类型和大小,以满足应用程序的需求。

除了定义 CPU、内存和其他硬件相关组件的 EC2 实例类型外,你还需要附加一个块存储设备,如 EBS 卷或实例存储卷,正如本章 了解亚马逊弹性块存储和实例支持存储 部分所讨论的那样。至少,你需要一个 EBS 卷来托管操作系统并使服务器能够启动为一个完全功能的服务器。我们将在本章稍后讨论不同类型的 EC2 实例块存储。

除了指定实例类型和家族外,你还需要选择一个特定的 亚马逊机器镜像 (AMI) 来配置你的 EC2 实例。AMI 是包含基本操作系统、实用程序以及你希望配置到 EC2 实例中的任何应用程序的快照。我们将稍后更详细地讨论 AMI。

这里需要注意的一个重要点是,EC2 实例是区域特定的。更准确地说,EC2 实例与启动它们的可用区相绑定。当你选择启动一个新的 EC2 实例时,必须指定一个 VPC 子网来启动该 EC2 实例。该子网将与给定的可用区相关联,正如上一章所讨论的那样。因此,最终,你决定了 EC2 实例启动的可用区。

以下图展示了支持亚马逊 EC2 服务的高层基础设施架构和关键特性:

图 7.1 – EC2 实例组件

图 7.1 – EC2 实例组件

上图中 EC2 实例的一些关键特性包括:

  • EC2 实例是从位于同一可用区的物理主机构建的虚拟机(VM)。

  • 借助网络和存储虚拟化技术,每个 EC2 实例至少分配一个弹性网络接口(虚拟网卡或虚拟 网络接口卡 (NIC))用于数据传输。你可以有额外的虚拟 NIC 来配置多宿设备。

  • EC2 实例可以配置为拥有一部分实例存储卷(本地附加到其运行所在主机)或 EBS 卷,这些卷附加到同一可用区中的存储阵列。

如上图所示,部署在 可用区 2A 中的 EC2 实例有一个弹性网络接口和两个附加的 EBS 卷,一个作为根卷(Windows 服务器上的 C 盘),大小为 30 GB,另一个作为数据卷,大小为 60 GB。我们将在本章稍后讨论块存储卷。

在下一节中,我们将研究 AMI。AMI 是虚拟机镜像,类似于您本地的虚拟硬盘VHD)镜像。这些 VHD 是磁盘镜像文件格式,包含硬盘的内容,包括操作系统文件以及您希望配置服务器的任何应用程序。然而,AMI 不仅仅是简单的 VHD,它们还包括快照、权限和映射,指定启动实例时要附加的卷。在 AWS 上,当您启动实例时,您需要选择一个 AMI 来配置该实例。例如,一个 AMI 可以包含 Linux 操作系统镜像和任何附加应用程序,将实例配置为 Web 服务器。

亚马逊机器镜像(AMIs)

传统上,当您在本地的 VMware 或 Hyper-V 主机上启动新的虚拟机时,您会指定一个特定的操作系统镜像(如.iso文件)。该文件包含安装虚拟机所需的操作系统文件。您可能还会修改机器镜像,添加额外的应用程序和/或工具。

AMI 是 AWS 中等同于虚拟机镜像(VM images)的概念,包含基础操作系统和任何附加应用程序。

AMI 是亚马逊 EBS 快照或根卷的模板(例如,存储支持的 AMI)。这些快照或模板包含操作系统和任何必要的应用程序。此外,AMI 还包含有关块设备映射的信息,指定在启动实例时要附加的卷。

亚马逊提供了几种预配置的 AMI,作为其Quick Start AMIs的一部分,其中包括标准操作系统,如各种 Linux 发行版的官方版本,包括红帽企业 LinuxRHEL)、Ubuntu、SUSE,甚至亚马逊自己的 Linux 版本。此外,您还可以访问微软的 Windows Server 操作系统的多个版本,甚至是运行在物理苹果 Mac Mini 上的 macOS:

图 7.2 – AMI

](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_07_02.jpg)

图 7.2 – AMI

如前面的截图所示,对于每个 AMI,您还可以看到其发布号、根设备类型是EBS还是实例、虚拟化架构的类型、卷类型(例如 SSD)以及该 AMI 是否支持增强型网络。

作为 Quick Start AMI 的一部分提供的 AMI,已经将任何必要的授权包括在部署该 AMI 的 EC2 实例的成本中。虽然您无需单独签订许可合同来启动这些服务器,但您向亚马逊支付的按小时费用将包括授权费用。

需要注意的是,任何 AMI 附带的授权仅适用于已经作为镜像的一部分捆绑的内容。任何额外的配置或额外应用程序的安装可能会有进一步的授权要求,需要单独采购。

当你选择一个特定的 AMI 作为配置新 EC2 实例的一部分时,镜像会被提取到实例新附加的块存储卷中,并使其可启动。这样一来,EC2 实例就会被配置成一个完全运行的服务器。

关于 AMI 需要注意的一些额外事项包括以下几点:

  • AMI 是区域特定的。这意味着,如果你想在某个区域启动特定配置的实例,那么该区域必须有相应的 AMI。

  • 如果你需要在某个区域启动特定配置的实例,而该区域没有所需的 AMI,你可以将 AMI 跨区域复制。有关如何创建和复制 AMI 的更多详情,请参考亚马逊文档:aws.amazon.com/premiumsupport/knowledge-center/copy-ami-region/

除了快速启动 AMI,你还有其他来源可以获取这些机器镜像,包括以下几种:

  • AWS 市场:这是一个由 AWS 管理的软件商店,第三方供应商可以在这里销售他们的应用程序,通常以准备好使用的 AMI 打包。像 F5、Citrix、Oracle 和 McAfee 等公司,连同许多其他公司,销售他们的解决方案,这些解决方案可以通过 Amazon EC2 实例来启动。定价由 AMI 的拥有者决定,此外还包括你运行 AMI 的特定 EC2 实例类型的费用。你可以在 aws.amazon.com/marketplace 查看 AWS 市场的产品。

  • 社区 AMI:你可以将你的 AMI 设为公开,这样其他人也能通过社区 AMI 链接访问。这里有成千上万种不同的 AMI,旨在解决某些专用软件和操作系统的打包问题,这些通常无法通过快速启动 AMI 或市场获得。你通常可以在这里找到更具体的 Linux 发行版,比如 CentOS,这是一个企业常用的 AMI,用于托管应用程序。社区 AMI 是免费的,但你需要支付 EC2 实例费用。此外,许多 AMI 是“按原样”提供的,没有额外的支持,因此在选择社区 AMI 时需要谨慎。

创建你自己的 AMI

除了从 AWS 或市场获取 AMI,你还可以创建自己的 AMI。这涉及到为你运行的 EC2 实例创建一个镜像,并生成该实例附加的 EBS 卷的快照。然后,你可以使用该镜像(AMI)来启动新的 EC2 实例。

您通常创建 AMI 是因为您希望存储特定配置的副本,这些配置需要在您账户中的多个 EC2 实例甚至全球范围内部署。与其每次都手动配置每个新实例以满足您的特定要求,不如只需配置一个 EC2 实例,按需进行设置(包括适当的操作系统补丁、应用程序、防病毒软件等),然后创建该实例的 AMI。接下来,当需要启动更多具有相同配置的 EC2 实例时,您只需使用该 AMI 启动新的实例。这也被称为预先烘焙 AMI,通常作为快速配置新实例并最小化手动错误或配置错误的策略。

在本节中,我们讨论了 AMI 以及如何使用它们来配置带有操作系统和所需应用程序的新 EC2 实例。我们还讨论了如何获取 AMI,并在必要时创建您自己的 AMI。在接下来的章节中,我们将讨论您可以部署的不同类型的 EC2 实例。

探索 EC2 实例类型

AWS 提供了多种不同虚拟硬件配置的 EC2 实例,称为实例类型。EC2 实例类型定义了 EC2 实例虚拟硬件组件的特定规格,如处理能力(以虚拟 CPUvCPU)和内存为衡量标准)、存储类型和网络配置。根据您的应用需求,您可以从广泛的 EC2 实例类型中选择适合的类型。

正如我们之前提到的,EC2 实例按系列进行划分,在每个系列中,有不同的实例类型。这些实例类型进一步按实例大小划分,实例大小具有特定的虚拟化硬件配置。以下是核心的 EC2 实例系列:

  • 通用型:旨在平衡计算、内存和网络资源,适用于各种工作负载类型。

  • 计算优化:专为高性能处理设计。非常适合批处理工作负载、媒体转码、高性能 Web 服务器和高性能计算HPC)。

  • 内存优化:旨在为处理大数据集的工作负载提供快速性能。

  • 加速计算:配备硬件加速器或协处理器,执行复杂的功能。非常适合浮点数计算、图形处理或数据模式匹配。

  • 存储优化:专为需要对本地存储中非常大的数据集进行高顺序读写访问的计算任务设计。

在每个系列中,你都有多个 EC2 实例类型可供选择。例如,在通用型系列下,你有T2M5A1 等实例类型。你可以通过查看 aws.amazon.com/ec2/instance-types/ 了解各种实例类型的详细信息。

M5实例类型为例,它采用了英特尔® Xeon Platinum 8175M 处理器,适用于需要平衡计算、内存和网络资源的应用程序。该类型的其他特点包括,使用增强网络功能提供最多 25 Gbps 的网络带宽,并由 AWS Nitro 系统提供支持,AWS Nitro 系统是亚马逊的架构设计,结合了专用硬件和轻量级虚拟化管理程序。

M5实例类型中,有不同的实例规格可供选择,你可以根据特定的应用需求选择合适的规格。以下是一些属于 M5 实例类型的规格截图:

图 7.3 – M5 实例规格选择示例

图 7.3 – M5 实例规格选择示例

当你查看实例规格列表时,可以推测,vCPU 和内存越高,实例规格提供的性能就越强。根据你的应用需求,选择最适合的规格。

专用类别

除了可以在 AWS 上部署的标准实例外,你还可以选择专用实例专用主机。这些选项允许你满足某些合规或监管要求,例如规定你不能使用部署在共享主机上的 EC2 实例,而共享主机是默认的部署选项。请注意,即使你的 EC2 实例可能与其他客户的实例共享硬件,底层基础设施也会提供隔离,除非其他客户授予你必要的访问权限,否则你无法访问其他客户的 EC2 实例。

专用实例 是部署在你的 VPC 中的 EC2 实例,运行在专为你提供的物理硬件上,且不会与其他客户共享。

专用主机 是为你单独使用的物理主机,它可以让你对实例如何在物理服务器上部署进行额外的控制和管理。此外,专用主机可以帮助处理某些第三方许可条款,通常是基于每个 CPU 核心/插槽来计算的。

在下一节中,我们将探讨可用于 EC2 实例的块存储选项。块存储允许你像将硬盘附加到物理服务器一样,将块卷附加到 EC2 实例。根卷托管操作系统,用于从中启动虚拟服务器,附加卷则可用于托管服务器的数据和应用程序。

了解 Amazon EBS 和实例存储

就像本地环境中的虚拟服务器一样,EC2 实例需要可访问的块存储卷来托管实例操作系统、数据和需要在服务器上运行的应用程序。AWS 提供了两种类型的块存储选项:弹性块存储(Elastic Block Store)实例存储卷

亚马逊弹性块存储

亚马逊弹性块存储(Amazon Elastic Block Store)为你的 EC2 实例提供高性能的块存储服务。这些存储像虚拟硬盘一样,作为你部署在云中的虚拟服务器的存储设备。Amazon EBS 是一个网络存储服务,其本质类似于你在本地环境中,将存储区域网络SAN)中的存储卷附加到部署在 VMware 上的虚拟机。

你需要预配置所需的 EBS 存储卷,例如 8 GB、30 GB、1,000 GB,或任何你需要的大小,并将其附加到你的 EC2 实例上。EC2 实例需要一个根卷(或者在 Windows 机器上是“C”驱动器),用于托管操作系统和某些应用程序。此外,你还可以附加多个 EBS 卷,用于其他用途,例如存储数据(例如数据卷)。

在配置 EC2 实例和 EBS 卷时,你需要选择卷的类型、你希望预配置的存储量,以及是否要为 EBS 卷配置加密。EBS 卷有不同的类型可以选择,主要分为以下几类:固态硬盘(SSDs)硬盘驱动器(HDDs)

SSD(固态硬盘)经过优化,适用于频繁进行读写操作并具有小 I/O 大小的事务性工作负载,并且可以用来启动你的 EC2 实例。这些类型的磁盘包括以下几种:

  • gp2:这是你可以附加到 EC2 实例的默认 EBS 卷。该卷运行在 SSD 上,适合一般工作负载,例如事务操作、低延迟交互操作,并且适合作为启动卷。卷的大小可以从 1 GB 到 16 TB,设计为提供 99.9%的耐久性,并且最大 IOPS 为 16,000。gp2 卷还提供 3 IOPS/GB 的基准性能(最小 100 IOPS),对于小于 1 TB 的卷,性能可以突增至 3,000 IOPS。

  • gp3:这是最新版本的基于 SSD 的一般用途 EBS 卷。与 gp2 相比,gp3 卷提供 3,000 IOPS 和 125 Mbps 的基准性能,无论卷的大小如何。你可以为额外费用预配置高达 16,000 IOPS 的性能。卷的大小可以从 1 GB 到 16 TB 不等。gp3 卷非常适合运行单实例数据库,例如 Microsoft SQL Server、Cassandra、MySQL 和 Oracle DB,也可以用作启动卷。

  • io1:这款预配置的 IOPS SSD 提供高性能的 EBS 存储,适用于关键性、I/O 密集型的数据库和应用工作负载。io1 提供 50 IOPS/GB 的基准性能,最大可达 64,000 IOPS,并提供每卷 1,000 MB/s 的吞吐量。但需要注意,为了实现最大 64,000 IOPS 和 1,000 MB/s 的吞吐量,卷必须连接到基于 AWS Nitro 系统构建的 EC2 实例上。io1 卷也可以用作启动卷,卷的大小范围从 4 GB 到 16 TB。

  • io2:最新一代的预配置 IOPS SSD,提供高性能,具备 99.999% 的 100 倍耐用性,并且存储的 IOPS 与容量的比率是每个预配置的 GB 提供 500 IOPS,性能比传统 IOPS 高 10 倍。io2 非常适合业务关键型、I/O 密集型数据库应用程序,包括 SAP HANA、Oracle、Microsoft SQL Server 和 IBM DB2。io2 卷也可以用作启动卷,卷的大小范围从 4 GB 到 16 TB。像 io1 一样,为了实现最大 64,000 IOPS 和 1,000 MB/s 的吞吐量,卷必须连接到基于 AWS Nitro 系统构建的 EC2 实例上。

  • io2 Block Express:目前处于预览阶段,这款高性能块存储提供比 io2 卷高 4 倍的吞吐量、IOPS 和容量。为最苛刻的应用设计,提供每卷 4,000 MB/s 的吞吐量,最多 256,000 IOPS 和每 GB 1,000 IOPS,同时具有 99.999% 的耐用性。卷的大小可以从 4 GB 到 16 TB。

HDD 被优化用于大规模流媒体工作负载,其中主导的性能特征是吞吐量。这些硬盘包括以下几种:

  • st1:这是一种低成本的 HDD 卷,适用于频繁访问、吞吐量密集型的工作负载,能够处理大数据集和大 I/O 尺寸。典型的工作负载包括 MapReduce、Kafka、日志处理、数据仓库和 ETL 作业。st1 可以在每 TB 250 MB/s 的高峰时段进行突发,具有每 TB 40 MB/s 的基准吞吐量,最大吞吐量为每卷 500 MB/s。卷的大小可以从 125 GB 到 16 TB,但不能用作启动卷。

  • sc1:这也称为冷 HDD,提供所有 EBS 卷类型中每 GB 最低的成本。它非常适合访问较少、数据集较大且较冷的工作负载。sc1 可以在每 TB 80 MB/s 的高峰时段进行突发,具有每 TB 12 MB/s 的基准吞吐量,并提供每卷 250 MB/s 的最大吞吐量。卷的大小可以从 125 GB 到 16 TB,但不能用作启动卷。

EBS 卷的其他一些功能包括以下内容:

  • EBS 卷可以从一个 EC2 实例分离并附加到另一个实例。因此,例如,如果你有一个带有单一根卷的 EC2 实例,且实例发生某种故障,你可以将根卷分离并附加到另一个 EC2 实例作为数据卷,以提取所需的信息。这使得 EBS 卷非常多功能且灵活。

  • 存储在 EBS 卷上的数据是持久的,并且可以在 EC2 实例的生命周期之外存在。

  • 您还可以对您的 EBS 卷进行快照,它是存储在该卷上的数据的时间点备份。第一个快照总是完整备份,之后的快照是增量备份。快照可以用来按需创建新的卷,并保持数据不变。此外,您还可以将快照复制到其他区域。这意味着,如果您需要与其他区域的同事共享某些数据,只需将快照复制到所需区域,它将在该区域内的 AWS 账户中可用。您还可以将快照复制到其他 AWS 账户。

在本节中,我们研究了由 HDD 和 SSD 技术支持的不同类型的 EBS 卷。我们还探讨了它们的使用场景。EBS 卷通过存储区域网络连接附加到您的 EC2 实例,通常使用 ISCSI 协议。在接下来的章节中,我们将介绍 EC2 实例存储卷。这些卷直接附加到您 EC2 实例所部署的物理主机上。

AWS EC2 实例存储卷

Amazon EBS 卷是通过网络从存储阵列挂载到 EC2 实例上的存储卷,而实例存储卷则是从物理附加到 EC2 实例所在主机的本地存储驱动器中分配的。

将实例存储卷附加到 EC2 实例的主要好处是您获得的超高吞吐量,以及访问数据时降低的延迟。然而,实例存储卷也有一个缺点,即数据持久性问题。实例存储中的数据仅在其关联实例的运行状态期间存在。如果实例被停止、终止或进入休眠状态,则附加的实例存储上的数据将丢失。同样,如果底层磁盘发生故障,数据也会在这种情况下丢失。其原因是,当您的实例经历这些状态时,实例存储中的每个存储块都会被重置,因此任何数据都会丢失。

因此,实例存储卷上的数据被认为是临时的,并应按此方式使用。它非常适合那些频繁变化的信息,可以用作缓冲区、缓存,或存储临时内容。实例存储卷的成本也比 EBS 卷便宜。

重要提示

如果一个带有实例存储卷的 EC2 实例重新启动,数据不会丢失。这是因为重新启动与关闭并进行冷启动不同。

在这一节中,我们探讨了 EC2 实例的不同存储选项。我们讨论了 Amazon EBS 的关键特性和选项,并识别了使用哪种类型的 EBS 卷的典型使用场景。我们还总结了一些额外的功能,比如能够加密块存储,或定期拍摄快照作为备份和复制。

接着我们讨论了实例存储卷,并将其与 EBS 进行了比较,识别了实例存储卷的使用场景以及实例存储卷中的数据是临时性的。实例存储卷也称为临时存储。

在下一节中,我们将讨论启动 EC2 实例时可用的不同定价选项。根据你的使用场景,一种定价选项可能比另一种更具成本效益,本节将讨论一些需要了解的重要概念。

了解 EC2 定价选项

Amazon EC2 服务是一个云计算产品,允许你在云中部署虚拟服务器(EC2 实例)。传统上,在本地环境中,如果需要部署新的物理服务器,你需要进行几千美元的资本投资,采购必要的硬件和软件,然后配置服务器并安装必要的应用程序。

在 AWS 上,EC2 实例可以按小时购买,这意味着你只为服务器运行的小时数付费。如果你关闭服务器但仍保留它在账户中(而不是终止它并将其容量释放回 AWS),则在 EC2 实例处于停止状态时,你不会产生任何费用。这种定价方式就是我们所说的按需定价选项,它是购买 EC2 实例时的默认选项。

让我们详细看看这些不同的定价选项。

按需实例定价选项

如我们已经讨论过的,这是默认选项,用于采购/启动 EC2 实例。你根据实例类型、操作系统(以及任何预安装的应用程序)和你启动实例的区域支付按小时计费的费用。你按 EC2 实例处于运行状态的小时数计费。这意味着,如果 EC2 实例处于停止状态,你不会被收费。按需定价选项不要求任何长期承诺或预付款。你可以根据应用需求增加或减少计算能力,且只需为实际消耗的小时数付费。

按需定价选项:适用于那些需要灵活使用计算资源的用户,且不需要长期承诺。它们非常适合测试/开发环境,或者用于短期、波动性大或不可预测的工作负载。按需定价模型的一个重要优点是亚马逊不会以任何方式中断您的使用。因此,除非您终止(释放)实例,否则您的 EC2 实例将继续存在于您的账户中(即使是停止状态)。在定价方面,按需定价选项成本较低,但与其他定价选项相比,它可能会变得最为昂贵,特别是如果您计划全年 24/7 运行实例。在这种情况下,其他定价选项可能会更合适。

保留实例定价选项

该定价选项奖励那些承诺在特定区域内运行特定实例类型的客户,签订 1 年或 3 年的协议后可享受显著折扣(最高可达 72%),相较于按需定价选项。与按需定价相比,您可以以非常优惠的小时费率运行相同的实例。保留定价选项并不是您实际采购的 EC2 实例,而是定价协议,赋予您在指定区域、指定时长(1 年至 3 年)内以特定折扣率运行特定 EC2 配置的权利。只要在指定区域启动符合条件的 EC2 实例,便会应用保留定价模型,而非按需定价。保留定价选项有两种类型:

  • 标准保留定价选项:此选项提供最高可达 72%的折扣,比按需实例定价更具优惠。可以选择 1 年或 3 年的期限进行购买,并且在实例的生命周期内可以更改某些配置,如其所在的可用区、实例大小以及网络类型。

  • 可转换保留定价选项:此选项提供更大的灵活性,包括在保留期限内更改实例系列、操作系统甚至租赁类型的能力。可转换保留定价选项的缺点是,相比于按需实例定价,其最大折扣仅为 54%。

以下是写本培训指南时,N. Virginia 区域 t2.micro Linux EC2 实例的标准 1 年期保留实例定价示例:

图 7.4 – N. Virginia 区域 t.2micro 保留实例定价选项,标准 1 年期

图 7.4 – N. Virginia 区域 t.2micro 保留实例定价选项,标准 1 年期

接下来,我们将查看为已在保留定价模型下购买的 EC2 实例提供的不同支付选项。

保留实例的支付选项

你可以选择一次性支付预留实例的全部或部分费用,根据你支付的方式,你将获得不同级别的折扣率。具体如下:

  • 全额预付:这是指你在合同开始时一次性支付预留实例的整个期限费用。你不会收到每月的小时账单,并且可以享受最大可用折扣。

  • 部分预付:这是指你先支付部分费用,然后按照折扣后的小时费率支付剩余费用,并每月结算。

  • 无需预付:这是指你无需提前支付任何费用,但相比按需费用仍然可以享受一定的折扣。选择部分预付全额预付选项,你将获得更高的折扣。

这里需要注意的一个重要点是,尽管你可以通过预留实例获得大幅折扣,但你仍然需要为整个期限支付费用,无论你的 EC2 实例是否处于运行状态。这意味着,对于某些使用场景,例如你需要一个 EC2 实例用于不可预测的使用模式和短时间的需求,但不希望中断,那么按需定价选项可能会更具成本效益。你需要仔细比较购买预留实例与按需选项的总成本,以确定哪种方式更具成本效益。

预留实例市场

有时,你的业务需求会发生变化,或者你原本购买预留实例的项目比预期提前结束。无论是什么原因,如果你不再需要这些预留实例,你可以将它们转售给其他 AWS 客户。通过这种方式,你可以收回部分原始购买时的成本。

由于你正在转售你的预留实例,剩余的期限将会少于最初购买的期限。这也意味着,如果你需要一个短于标准合同期限的预留实例,你可以查看预留实例市场,看看是否可以找到符合你需求的实例。

请注意,只有标准预留实例可以在市场上列出。你不能在市场上列出可转换预留实例。此外,要将预留实例列出在市场上,你必须确保你已经支付了该实例的费用,并且拥有该预留实例超过 30 天。

临时实例定价选项

亚马逊几乎总是有备用计算能力。鼓励客户使用这部分备用容量的一种方式是提供让客户选择启动按需实例折扣高达 90%的 Spot 实例。然而,Spot 实例并不适合所有应用程序。它们非常适合无状态或可以中断的工作负载。例如,某些用例,如数据分析、批处理任务和后台处理,可以在有空闲计算能力时运行,且根据应用程序的设计架构,这些 EC2 实例可以被中断,然后在有空闲容量时继续恢复运行。换句话说,如果应用程序是无状态的且工作流对中断不敏感,那么在有任何中断时,应用程序的工作流只需等待可用的计算能力,再继续其操作。

你可能会想知道为什么会有中断。简单来说,亚马逊会根据他们能获得的最佳价格来尝试平衡计算能力的供需。当你购买 Spot 实例时,你会知道当前的 Spot 价格。然后,你会设置一个最大出价,该出价需要高于当前的 Spot 价格。如果需求增加,亚马逊可以提高 Spot 价格,如果你的出价低于这个价格,那么其他客户就可以在较高的 Spot 价格下获得这部分容量,而你的工作负载将会被中断。如果例如,由于客户对 Spot 实例的过度使用,计算能力的供应减少,Spot 实例也可能被中断。

以下是一些导致 Spot 实例中断的原因:

  • 价格:当 Spot 价格超过你的最大出价时。

  • 容量:如果没有足够的未使用 EC2 实例来满足对按需实例的需求。

  • 约束:这包括启动组或可用区组,当无法满足这些约束时,Spot 实例将被终止。

当亚马逊试图中断你的 Spot 实例时,你会收到一个中断警告通知,该通知会在亚马逊 EC2 停止或终止 Spot 实例之前 2 分钟发出。这个中断通知可以通过 CloudWatch 事件以及作为 Spot 实例元数据中的项提供。

关于亚马逊 CloudWatch 事件(在第十三章,《AWS 上的管理与治理》中讨论),你可以创建目标,如 Lambda 函数或亚马逊简单通知服务SNS)主题,当中断通知发生时,它们可以处理这些通知。我们将在第十章,《应用集成服务》中详细讨论 SNS,但本质上,你可以创建一个 SNS 主题的电子邮件订阅,这样当生成 2 分钟中断通知时,该消息就可以通过 SNS 主题以电子邮件的形式转发给你。

实例元数据包含有关 EC2 实例的数据,并按类别划分;例如,主机名、IP 地址信息、事件和安全组。可以从 EC2 实例内部访问,网址为http://169.254.169.254/latest/meta-data/169.254.169.254是一个链路本地地址,仅在实例内部有效。

以前,Amazon 在中断后唯一的行为是终止您的现货实例。但是,这样做可能会导致数据丢失。最近,出现了其他行为选项,例如停止现货实例或将实例置于休眠状态。当实例被置于休眠状态时,EBS 卷会被保留,实例内存(RAM)会被保存在根卷上。此外,实例的私有 IP 地址也会被保留。这意味着当现货服务恢复您的实例时,如果例如容量变得可用或现货价格在您的最高报价价格之前下降,您的实例可以从停止时的状态继续运行。

现货集群

现货集群是一个由现货实例组成的集合,且可选地包括按需实例。如果有可用容量,并且您的最高报价价格高于现货价格,AWS 将启动现货实例作为集群的一部分。如果现货实例被终止,现货集群将尝试维持其目标容量。您还可以将一些按需实例作为现货集群的一部分。这意味着您始终会有一些容量来满足最小的应用需求。随着应用需求的增加,现货实例会按照折扣价格加入集群,前提是有容量,或者您的报价价格高于现货价格。

在本节中,我们讨论了不同的 EC2 实例定价选项。我们研究了默认的按需定价模型,并将其与预留定价模型和现货定价选项进行了比较。

在下一节中,我们将继续讨论另一种存储选项,称为弹性文件系统EFS)。

使用 Amazon EFS 实现共享文件存储

在之前的讨论中,我们了解了 Amazon EBS。这些块存储卷直接附加到特定的 EC2 实例,并充当该实例的虚拟硬盘。一般来说,EBS 卷只能附加到一个特定的 EC2 实例。也就是说,如果您部署了 20 个 EC2 实例,每个实例将附加一个或多个 EBS 卷。如果这些卷之间的数据不需要在 EC2 实例之间共享,这完全是可以接受的。

共享数据在 EC2 实例之间有多种用途。这些包括文件共享或需要跨多个应用程序和 Web 服务器共享数据的情况。在这些情况下,使用 EBS 卷将导致必须在这些个别 EBS 卷之间某种方式地复制数据的混乱架构。

Amazon 提供了EFS解决方案,允许您在多个 EC2 实例之间创建和挂载文件共享。这些实例可以更新文件共享上的数据,只要设置了必要的权限,其他已挂载同一共享的 EC2 实例也能看到更新的数据。

EFS 的一些关键特性包括以下内容:

  • 可以作为基于 Linux 的 EC2 实例的集中式文件存储解决方案使用。

  • 也可以通过 VPN 或直接连接服务从本地服务器访问。

  • EFS 卷可以根据需求增长和收缩。这与 EBS 卷不同,后者需要在使用之前进行存储预配。

  • EFS 卷是区域性的,并可以跨多个可用区提供高可用性和耐用性。

  • 请注意,EFS 卷不能用作 EC2 实例的引导/根卷,也不能与 Windows EC2 实例一起使用。

在这一节中,我们研究了一种针对您的基于 Linux 的 EC2 实例的备选存储解决方案,要求是在一组实例之间共享文件和数据。Amazon EFS 是一种文件级存储解决方案,可用于在每个区域中跨多个可用区挂载文件共享到多个 EC2 实例上。

在下一节中,我们将看看一种称为 Amazon Lightsail 的替代计算解决方案,它允许我们在云中轻松部署单独的 VPS。

了解使用 Amazon Lightsail 的 VPS

除了 Amazon EC2,AWS 还提供了一种更轻量级的解决方案,用于部署预配置了最常见应用程序堆栈的虚拟服务器,适用于各种用例。与选择 EC2 实例的各个组件(如实例类型和存储)然后安装所有必要的应用程序层不同,Amazon Lightsail 提供了蓝图,将自动配置您的服务器,包括各种常见用例的应用程序和必需的实用工具,让您快速上手。

一个常见的应用程序堆栈包括您选择的操作系统,以及诸如 WordPress、Drupal、Plesk、LAMP 等应用程序。部署 Amazon Lightsail 也相对简单,通过引导步骤来使您的部署快速上线。

Lightsail 最大的优点是您只需支付基于实例类型和相关操作系统及已部署应用程序的固定月费用。但是,对于更复杂的配置和企业级生产环境,您可能仍然需要设计和部署 EC2 实例。

Amazon Lightsail 的价格从每月仅 $3.50 起。这为你提供一台 Linux 虚拟服务器,配备 512 MB 内存、1 个 vCPU、20 GB SSD 硬盘,并支持最多 1 TB 的数据传输。额外配置包括选择静态 IP 地址、DNS 管理和对虚拟服务器的 SSH/RDS 访问权限。

随着需求的变化,你可以轻松升级到 EC2 实例,这涉及到对你的实例进行快照,并按照逐步指南的过程使用向导将其升级为 EC2。

在本节中,我们回顾了 Amazon 的 Lightsail 服务,它可以用于小规模的应用程序部署和可预测的定价结构。在下一节中,我们将了解 AWS 上其他可用的计算选项。

Amazon ECS 和 Kubernetes 简介

到目前为止,我们一直在讨论硬件虚拟化,并使用虚拟机监控程序来构建像 EC2 实例这样的虚拟机,供我们运行各种应用程序。不同的应用程序通常有特定的需求,而且许多应用程序由于与底层库或运行时环境不兼容,无法在同一虚拟机中一起运行。

传统的虚拟化技术涉及使用裸金属硬件,并在其上配置一个虚拟机监控程序(hypervisor)。正如我们之前讨论的,这个虚拟机监控程序使你能够将物理硬件组件(CPU、内存、存储等)切分成更小的虚拟组件,从而部署虚拟机(VM),或者在 AWS 的情况下,EC2 实例。然而,每个 EC2 实例仍然需要托管一个客户操作系统(例如 Linux 或 Windows)、共享库和系统文件,以及你的应用程序。

如下图所示,虚拟机占用大量资源,因为它们需要运行客户操作系统,以及所有的系统文件、工具和库:

图 7.5 – 托管虚拟机的虚拟机监控程序架构

图 7.5 – 托管虚拟机的虚拟机监控程序架构

你会注意到,每个虚拟机都需要自己的客户操作系统,以及必要的库、系统文件和运行时环境。一个替代方案是考虑一种被称为 Docker 的技术。

Docker 基于容器化的概念,实际上就是 操作系统虚拟化。应用程序在隔离的用户空间中运行,这些用户空间被称为 容器,它们共享相同的底层操作系统。这得以实现的原因是容器会托管应用程序所需的所有依赖项,包括二进制文件、库、配置文件和运行时环境。容器与主机操作系统的容器是抽象的,且对操作系统的访问是有限的,这使得我们可以在同一裸金属硬件上运行多个容器。

容器化还提供了更少的启动开销,因为它们共享相同的底层操作系统,而不是每个容器都需要启动一个操作系统,这就是虚拟机的工作方式。下图说明了这一概念:

图 7.6 – Docker 概念

图 7.6 – Docker 概念

使用 Docker 的一些附加功能包括,您可以在相同的裸金属硬件上运行多个应用程序,所有这些应用程序通过 Docker 引擎共享相同的底层操作系统。与虚拟机(VM)相比,这使得应用程序的代码库要小得多,因为虚拟机还需要托管操作系统。

Amazon 提供了 ECS,这是一种完全托管的容器编排服务,允许您部署 Docker 风格的应用程序。Amazon ECS 可以帮助您在云中部署和管理多个 Docker 容器,而不需要手动启动 EC2 实例并在每个实例上部署 Docker 解决方案。

下图展示了 Amazon ECS 的核心组件:

图 7.7 – Amazon ECS 架构

图 7.7 – Amazon ECS 架构

Amazon ECS 架构包含以下核心组件和功能:

  1. ECS 集群:这是任务或服务的逻辑分组。

  2. 任务 – 这是一个称为“任务”的 Docker 容器,在 Amazon ECS 中。实际上,在 Amazon ECS 中,“任务”本质上就是一个容器。

  3. 任务定义:每个 ECS 任务都是根据任务定义创建的。任务定义指定要使用的 Docker 镜像、每个任务或每个容器所使用的 CPU 和内存量、使用的启动类型(稍后讨论)以及任务应使用的 IAM 角色等。

  4. 弹性容器注册表 (ECR):这是 AWS 上存储 Docker 镜像的地方。您也可以将镜像存储在 Docker Hub 或私有注册表中。Amazon ECR 以高度可用且高性能的架构托管您的镜像。当任务启动时,它会查看任务定义,并从注册表中拉取所需的 Docker 镜像。

  5. ECS 服务:这允许您在 Amazon ECS 集群中同时定义指定数量的任务定义实例。如果您的任务之一失败,ECS 服务将替换它,以保持服务中任务的预期数量。

  6. ECS 容器实例:您的任务运行在 EC2 实例上,您在其中运行 Docker 容器。

然而,ECS 有两种类型的部署方式,我们将在接下来的部分讨论。

Amazon ECS 提供两种部署选项

让我们来看看这些部署选项:

  • Amazon Fargate(Fargate 启动类型):这使你能够在无需启动 EC2 实例、配置和扩展集群或自己修补和更新虚拟服务器的情况下设置 ECS 环境。你只需打包应用程序并指定 CPU、内存和网络要求,AWS 会为你处理繁重的工作。AWS 会将 ECS 任务放置到集群上,根据需要进行扩展,并全面管理整个环境。

  • EC2 启动类型:在某些情况下,你可能需要直接访问运行容器服务的底层 EC2 实例。在这种情况下,你必须管理一组 EC2 实例(修补和更新它们),并安排将容器放置在这些服务器上。

在这一部分,我们了解了 Amazon ECS。在接下来的部分,我们将介绍一个名为 Amazon Elastic Service for Kubernetes 的编排服务。

Amazon 弹性 Kubernetes 服务(Amazon EKS)

Kubernetes 是另一个开源容器编排解决方案。它将构成应用程序的容器分组为逻辑单元,以便于管理和发现。Kubernetes 负责扩展和管理你的容器,处理故障转移选项,以确保应用程序持续运行。

Amazon EKS 是 AWS 提供的服务,帮助你在 AWS 上使用 Kubernetes 部署、管理和扩展容器化应用程序。

在这一部分,我们学习了容器化的基础知识,以及如何有效地部署和管理你的应用程序堆栈。我们讨论了 ECS 及其两种不同的启动类型——Fargate 启动类型和 EC2 启动类型。我们还探讨了亚马逊对 Kubernetes 的应用,它作为一个使用 Kubernetes 的容器编排工具。

在接下来的部分,我们将介绍 AWS 提供的一些其他计算解决方案。

学习 AWS 上的其他计算服务

在这一部分,我们将介绍 AWS 上的一些其他计算服务及其应用场景。

无服务器选项 – AWS Lambda

到目前为止,我们仅查看了基于服务器的计算资源,除了 AWS ECS Fargate。我们所说的无服务器并不意味着计算资源不依赖任何服务器。最终,服务器将承载提供计算能力的 CPU。术语“无服务器”只是意味着客户不需要管理任何实际的服务器,因为这属于 AWS 的责任。

AWS Lambda 是 AWS 提供的一种无服务器服务,允许你运行代码并执行一些任务。AWS Lambda 被称为 函数即服务FaaS)解决方案,可用于构建完全无服务器的架构,涵盖存储、数据库和网络功能,而你不需要管理任何底层服务器。

要使用 Lambda,您必须使用支持的编程语言(如 Python 或 Node.js)创建一个函数,并将该函数上传到 AWS Lambda。然后,您需要定义一个触发器来执行代码。例如,您可以创建一个 Lambda 函数,当您将图像上传到 S3 存储桶时触发。您的函数可以用来给图像副本加水印并将其放入另一个存储桶,然后用于提供一个 Web 应用程序,允许客户购买库存照片。这样,预览图像上就有水印,用户需要完成购买才能获得原始图像。

这里需要记住的重要一点是,Lambda 函数是在被另一个 AWS 服务触发时执行的,因此它们并不会独立运行。Lambda 函数也可以按计划触发。例如,如果您有一批开发服务器,您的开发团队需要在其上工作。由于这是一个短期项目,我们决定选择按需 EC2 实例。然而,您希望尽量节省成本,因此您创建了一个 Lambda 函数,在晚上 6 点停止 EC2 实例,并创建另一个 Lambda 函数,在早上 8 点重新启动 EC2 实例。通过计划 Lambda 函数实现的自动化序列可以帮助您节省成本。

需要记住的重要一点是,在 Lambda 中,您只需为 Lambda 函数消耗的计算时间付费,当您的代码不运行时,不会产生费用。

AWS Batch

AWS Batch 可用于在 AWS 上运行数千个批量计算作业。AWS Batch 将设置并提供必要的计算资源以完成您的批量请求。无需部署服务器集群,因为 AWS 会为您处理这一部分。您可以在多种计算服务上调度和执行批处理作业,例如 EC2 和 ECS。使用 AWS Batch,您只需为 AWS 创建的资源(如 EC2 实例或 ECS 集群)付费。

AWS Outposts

可以在本地运行多个 AWS 服务,如 EC2 实例、RDS 数据库和托管的 Amazon S3 存储桶。您可以在云端和本地同时使用相同的 AWS 工具和硬件,从而帮助构建一个完整的混合解决方案。当您希望以极低的延迟连接到本地应用程序或因合规性和监管要求需要本地数据处理时,AWS Outposts 是理想选择。

AWS Outposts 提供两种版本:

  • VMware Cloud on AWS Outposts:这使您能够利用相同的 VMware 工具来管理您本地资源所使用的基础设施。

  • AWS 原生版 AWS Outposts:这使您能够使用与 AWS 云托管服务相同的 AWS API。

您可以将 AWS Outposts 交付到您本地的现场位置,作为 42U 的机架,并可以从 1 个机架扩展到 96 个机架,以创建计算和存储容量池。您还可以获得 1U 和 2U 机架可安装服务器的小型机架,适用于空间或容量需求有限的地点。

在本节中,我们了解了 AWS 上的额外计算服务,包括非常流行的 AWS Lambda 服务,它提供以FaaS模式交付的计算能力。

我们还讨论了 AWS Outposts,它允许您在本地托管 AWS 基础设施,并解决如极低延迟连接或本地数据处理等用例需求。

在下一节中,我们将介绍 AWS 上提供的一些额外存储选项。

了解 AWS 中的额外存储选项

除了前面讨论的针对计算需求的存储选项外,您还有几个额外的存储解决方案,这些解决方案专为特定的用例设计。

Amazon FSx for Lustre

Amazon FSx for Lustre 是一个完全托管的文件系统,专为计算密集型工作负载设计,适用于需要高性能和低延迟连接的应用程序,提供数百万的 IOPS 和每秒数百千兆比特的吞吐量。

Amazon FSx for Lustre 旨在与 Amazon S3 集成。您将数据存储在 S3 中,并在需要对数据执行计算密集型工作负载时检索它。之后,您将数据复制回 S3 进行长期存储。

Amazon FSx for Windows File Server

可以配置 Microsoft Windows 服务器,提供类似于 EFS 的文件共享解决方案。运行 Microsoft Windows 的 Amazon EC2 实例可能需要一个公共文件系统,以便为最终用户或应用程序共享各种类型的数据。例如,如果您在云中托管虚拟桌面,您可能需要一个集中式文件共享解决方案,以便允许用户通过映射驱动器共享文件。

与其通过使用运行 Windows 操作系统的 EC2 实例和 EBS 卷手动构建文件共享解决方案,不如使用 AWS FSx for Windows File Server。这是一个完全托管的本地 Microsoft Windows 文件系统,支持 SMB 协议和 Windows NTFS,Active DirectoryAD)集成,以及分布式文件系统DFS)。选择 FSx for Windows File Server,您将受益于一个完全托管的文件共享解决方案,适用于所有 Windows 应用程序,并能够使用 DFS 配置高级文件共享解决方案。

在本节中,我们回顾了针对您的计算需求的两个额外存储选项;AWS FSx for Lustre,专为高性能计算需求设计,提供数百万的 IOPS,以及 AWS FSx for Windows File Server,它提供一个完全托管的 Microsoft Windows 文件共享解决方案。

在接下来的章节中,我们将探讨如何通过堡垒主机安全地访问我们在 VPC 中部署的 EC2 实例。堡垒主机是专为允许从外部网络(如互联网)进行安全连接而设计的服务器,您可以通过它们访问在 VPC 中部署的 Web 和应用服务器。

使用堡垒主机确保您的 VPC 安全

使用堡垒主机(或跳板机)可以为位于 虚拟私有云VPC)的私有子网和公有子网中的 EC2 实例提供安全访问。这些堡垒主机(您可以部署一个或多个主机以实现冗余)可以用作管理服务器,并设计为允许您通过 SSH 或 RDP 协议远程连接。一旦您与堡垒主机建立连接,就可以登录到作为 Web 或应用服务器的后端 EC2 实例。

堡垒主机是 EC2 实例,它们不托管任何不必要的应用程序,除非是为了允许与后端 EC2 实例的连接。这些服务器经过加固和安全配置,以减少攻击面,从而最大限度地减少渗透的机会。然而,您仍然需要像管理其他应用或 Web 服务器一样管理这些实例。确保 EC2 实例的安全性、打补丁和定期更新是您的责任。亚马逊还提供了一个替代方案,称为 Session Manager,这是 AWS Systems Manager 服务的一项功能。Session Manager 使您能够通过交互式浏览器终端或 AWS CLI 工具管理 EC2 实例和本地实例,而无需打开入站端口或维护堡垒主机和 SSH 密钥。它还提供了一个完全可审计的实例管理服务,记录实例访问的详细信息。我们将在 第十三章 中讨论 AWS Systems Manager 和 Session Manager,AWS 上的管理与治理

在下图中,我们可以看到管理员如何连接到公有子网中的堡垒主机,并从那里管理运行应用程序的后端 EC2 实例。

图 7.8 – 使用堡垒主机确保访问您的 VPC

图 7.8 – 使用堡垒主机确保访问您的 VPC

在前面的图中,管理员从互联网连接到堡垒主机,然后通过该堡垒主机与后端 EC2 实例建立安全连接。通过限制远程流量的来源,可以提高该架构的安全性。例如,我们可以将该连接的源 IP 地址或 IP 范围限制为管理员所在公司办公网络的 IP 范围,而不是将远程访问开放给整个互联网。这样,管理员只有在从公司网络内部工作时,才能访问堡垒主机。

在本节中,我们简要介绍了堡垒主机及其如何用于安全访问 VPC 中的其他 EC2 实例。堡垒主机本身是标准的 EC2 实例,但您会将其配置为仅作为进入 VPC 的入口点以进行管理访问。此外,您还会通过安装必要的安全更新和工具,确保移除不必要的应用程序,从而加强堡垒主机的安全性。对堡垒主机的访问还可以限制为特定源 IP 地址,甚至仅通过 VPN 链接从您的公司数据中心访问。

练习 7.1 – 扩展 ProductionVPC,使其包括两个公共子网和两个私有子网

在本练习中,我们将扩展上一章节中构建的 ProductionVPC 架构,使其包括位于另一个可用区的额外公共子网和两个私有子网——每个可用区一个。这样可以设计出在单个可用区发生故障时仍能提供高可用性的架构。

我们将扩展 VPC 以满足我们的设计规格,如下图所示:

图 7.9 – 跨两个可用区的公共和私有子网的 VPC

图 7.9 – 跨两个可用区的公共和私有子网的 VPC

使用根用户登录到您的 AWS 账户,在主 AWS 管理控制台的搜索框中搜索 VPC。点击 VPC 链接以打开 VPC 控制台。一旦进入控制台,确保您位于我们在上一章节中创建 ProductionVPC 的 us-east-1 区域。如有必要,通过从下拉列表中选择它,切换到 us-east-1 区域。

查看您的当前 VPC

  1. VPC 控制台 的左侧菜单中,点击 子网。您将看到与上一章节中创建的 ProductionVPC 关联的一个 公共子网一。您还会看到其他子网,但这些子网与 us-east-1 区域中的默认 VPC 相关联,如下图所示:图 7.10 – 具有单一公共子网的 ProductionVPC

    图 7.10 – 具有单一公共子网的 ProductionVPC

  2. 接下来,点击左侧菜单中的 路由表 链接。使用 VPC 向导,您的 ProductionVPC 已配置了主路由表和公共路由表。从以下截图可以看到,关联到 ProductionVPC 的主路由表的路由表 ID 是 rtb-0d6fb017c417d8e1b。您可以通过 列中的 来辨认它是主路由表。此主路由表设计为与 VPC 中的所有私有子网关联。

    如果你在控制台中点击主路由表 ID链接,底部窗格将提供有关路由表的更多信息。此外,如果你点击底部窗格的路由选项卡,你会注意到目前只有一条路由:本地路由。该本地路由是为 VPC 内部流量设计的。主路由表目前没有提供直接访问互联网的功能。这是一种最佳实践,因为对于需要直接访问互联网的子网,理想情况下你应该创建一个单独的公共路由表并将任何公共子网附加到它上面:

    图 7.11 – 配置 ProductionVPC 主路由表

    图 7.11 – 配置 ProductionVPC 主路由表

  3. 接下来,在顶部窗格中,你会注意到向导已经创建了一个公共路由表(其路由表 IDrtb-0452c63c6d2aa3a88)。我们知道这是公共路由表,因为在前面的截图中,你可以看到主路由表列中的。它还关联了一个子网:公共子网一

  4. 如果你点击公共路由表的路由表 ID链接,底部窗格将提供额外的信息,正如以下截图所示。具体来说,如果你点击公共路由表的路由选项卡,你将看到两条路由:一条本地路由和一条通往互联网的路由。通往互联网的路由以0.0.0.0/0作为目标地址。在这种情况下,通往互联网的路由有一个目标,即互联网网关。该互联网网关允许子网直接访问互联网,发送流量到互联网并接收来自互联网的流量,前提是安全组和/或网络访问控制列表NACLs)允许这些流量:

图 7.12 – 配置带有公共路由表的 ProductionVPC

图 7.12 – 配置带有公共路由表的 ProductionVPC

你还会注意到,AWS 默认不会为你的路由表创建名称标签。这有时会使得识别你的资源变得困难。你可以轻松地添加名称标签,使资源更容易识别。使用鼠标,只需将鼠标悬停在公共路由表区域上。对主路由表执行相同的操作,确保为路由表打上主路由表的标签。这样就可以轻松识别你的路由表,正如以下截图所示:

图 7.13 – 为你的路由表打标签

图 7.13 – 为你的路由表打标签

当你创建新的子网时,它们会自动关联到主路由表。这从技术上讲使它们成为私有子网。如果你需要创建一个公共子网,你需要记得将该子网与主路由表解除关联,并将其附加到一个提供通过互联网网关访问互联网的路由表上。

虽然你可以在主路由表中配置直接到互联网的路由,通过互联网网关发送流量,但这并不建议。你希望确保某些子网仅提供内部私有访问,而不直接暴露于互联网。由于作为后台服务部署的 EC2 实例需要互联网访问来下载软件更新等,例如,你可以在公共子网中设置 NAT 网关来满足这个需求。然后,你需要在主路由表中配置通过该 NAT 网关到互联网的路由,NAT 网关充当任何来自后台 EC2 实例的互联网请求的代理。这些后台 EC2 实例不需要公共 IP 地址,仍然可以通过 NAT 网关与互联网通信。

设置附加子网

在本部分练习中,我们将扩展我们的 VPC 以包含多个公共和私有子网。我们希望在两个可用区中分别托管两个公共子网和两个私有子网。我们希望这样做是因为我们想要提供高可用性,以便当一个可用区出现故障或离线时,我们可以在另一个可用区中访问资源的副本。

你已经在 VPC 中拥有一个公共子网。它被配置为名为公共子网一,并根据下图被放置在us-east-1a可用区:

图 7.14 – us-east-1a 可用区中的公共子网一

图 7.14 – us-east-1a 可用区中的公共子网一

作为本练习的一部分,我们将在us-east-1b可用区创建另一个公共子网:

  1. 在你的 VPC 控制台的左侧菜单中,点击子网

  2. 点击右上角的创建子网按钮。

  3. 在出现的创建子网向导中,从可用的 VPC 列表中选择ProductionVPC

  4. 公共子网二下。

  5. 接下来,在可用区下,确保选择us-east-1b。这是因为我们希望第二个公共子网被放置在与第一个公共子网不同的可用区。

  6. 对于 IPv4 CIDR 块,提供10.0.2.0/24的地址块。此 CIDR 块与第一个公共子网的 CIDR 块位于不同的范围内,但仍然是 VPC CIDR 范围的子集。

  7. 最后,如下图所示,点击创建子网

图 7.15 – 创建公共子网二

图 7.15 – 创建公共子网二

向导将创建子网并显示创建成功的消息。

如果你点击新创建的子网旁边的复选框,下方窗格将显示该子网的信息。点击路由表标签。你会注意到,这个新创建的子网已经自动与主路由表关联,如下图所示:

图 7.16 – 新创建的子网与主路由表关联

图 7.16 – 新创建的子网已与主路由表关联

由于我们希望这个子网成为一个公共子网,因此我们需要将它的关联从主路由表更改为公共路由表,如下所示:

  1. 点击编辑路由表关联按钮,如前面的截图所示。

  2. 在弹出的编辑路由表关联对话框中,从路由表 ID下拉列表中选择公共路由表,如下图所示:图 7.17 – 编辑路由表关联

    图 7.17 – 编辑路由表关联

  3. 点击保存

此时,两个公共子网已正确配置。接下来,我们将创建两个私有子网,一个在us-east-1a,另一个在us-east-1b

创建私有子网

按照以下步骤创建前述私有子网:

  1. 在 VPC 控制台中,点击左侧菜单中的子网链接。

  2. 在弹出的创建子网对话框中,从VPC ID下拉列表中选择ProductionVPC

  3. 接下来,在子网名称文本框中输入Private Subnet One

  4. 可用区下,选择us-east-1a——这是我们放置公共子网一的相同可用区。这样,公共子网一中的任何前端 Web 资源都可以访问私有子网一中的任何后端资源,确保这些资源位于相同的可用区内。

  5. 对于 IPv4 CIDR 块,提供10.0.3.0/24的 IP CIDR 范围——此 CIDR 块与其他子网不冲突,并且仍然是主 VPC IP 范围的子集。

  6. 最后,点击页面底部的创建子网按钮,如下图所示:

图 7.18 – 私有子网一设置

图 7.18 – 私有子网一设置

你会收到成功消息。接下来,我们将执行与之前相同的步骤,但这次是在us-east-1b创建第二个私有子网:

  1. 点击创建子网

  2. 从 VPC ID 下拉列表中选择ProductionVPC

  3. 在子网名称处,输入Private Subnet Two

  4. 可用区下,选择us-east-1b

  5. 对于 IPv4 CIDR 块,输入10.0.4.0/24作为此子网的 CIDR 块范围。

  6. 点击页面底部的创建子网按钮。

此时,你已经配置了一个具有两个公共子网和两个私有子网的 VPC。

注意

你不需要手动将两个私有子网与主路由表关联,因为这是默认自动完成的。

要检查这一点,请执行以下步骤:

  1. 从左侧菜单中选择路由表

  2. 从顶部窗格中,点击主路由表旁边的复选框。

  3. 在底部窗格中,你会注意到两个私有子网都与主路由表关联(不是显式关联,而是默认情况下关联),如下图所示:

图 7.19 – 私有子网路由表关联

图 7.19 – 私有子网路由表关联

在本练习中,我们扩展了我们的ProductionVPC,包括了两个公共子网和两个私有子网,分布在两个可用区内。这将使我们能够在每个可用区中部署重复的工作负载,以设计高可用性。

在下一步练习中,我们将部署我们的第一个自定义安全组到ProductionVPC。这个安全组将用于定义我们允许进入 EC2 实例的流量类型,该实例将在第三步练习中部署。

练习 7.2 – 创建堡垒主机安全组

在本练习中,我们将创建一个自定义安全组,将用于 EC2 实例。这个安全组将作为堡垒主机,如本章之前所讨论。我们开始吧:

  1. 登录到你的 AWS 账户并进入 VPC 控制台。确保你在us-east-1区域。通过左侧菜单,确认ProductionVPC在该区域中可用。

  2. 从左侧菜单中选择安全组链接,它位于安全类别下,如下图所示:图 7.20 – 从 VPC 控制台选择安全组

    图 7.20 – 从 VPC 控制台选择安全组

  3. 点击屏幕右上角的创建安全组按钮。

  4. BastionHost-SG下。

  5. 接下来,提供一个适当的描述,例如允许远程访问堡垒主机服务器

  6. VPC下,确保从下拉列表中选择ProductionVPC

  7. 接下来,在入站规则部分,点击添加规则按钮。

  8. 选择3389

  9. 0.0.0.0/0下。这个 IP 块代表所有外部网络,包括互联网。

  10. 接下来,点击页面右下角的创建安全组按钮。

你将收到成功创建的消息,以确认安全组已创建完成。我们将在下一步练习中使用该安全组,确保我们可以通过3389端口连接到我们的 EC2 实例。

练习 7.3 – 启动 EC2 实例

在本练习中,我们将在ProductionVPC公共子网一中启动一个基于 Windows 的 EC2 实例。我们将使用这个 EC2 实例作为堡垒主机,使我们能够配置 VPC 中的其他 EC2 实例:

  1. 登录到你的 AWS 账户,并在服务下拉菜单中选择EC2,位于计算类别下,如下图所示:图 7.21 – 访问 EC2 控制台

    图 7.21 – 访问 EC2 控制台

  2. 从右上角的区域列表中,确保你选择了美国东部北弗吉尼亚 (us-east-1) 区域。

  3. 0实例处于运行状态。

  4. 点击实例(运行中)链接,如下图所示。这将打开实例控制台:图 7.22 – EC2 仪表盘

    图 7.22 – EC2 仪表盘

  5. 实例 控制台中,选择屏幕右上角的 启动实例 按钮。

  6. 现在将显示 第 1 步:选择 Amazon Machine Image (AMI)。从可用 AMI 列表中,选择 Microsoft Windows Server 2016 Base - ami-05ce3abcaf51f14b2

  7. 第 2 步:选择实例类型 中,请确保选择 t2.micro 实例旁边的复选框。此实例类型作为您的免费套餐提供。

  8. 接下来,单击屏幕右下角的 下一步:配置实例详细信息 按钮。

  9. 第 3 步:配置实例详细信息 中,选择以下选项:

    • 对于 网络,选择 ProductionVPC

    • 对于 子网,请选择 公共子网一 子网。

    • 对于 自动分配公共 IP,选择 启用

    • 将所有剩余设置保留为它们的默认值,并单击屏幕右下角的 下一步:添加存储 按钮。

  10. 第 4 步:添加存储 中,接受默认的根卷大小,并单击屏幕右下角的 下一步:添加标签 按钮。

  11. 名称 中,以及 Windows-BastionSrv图 7.23 – 第 5 步:添加标签

    图 7.23 – 第 5 步:添加标签

  12. 接下来,单击屏幕右下角的 下一步:配置安全组 按钮。

  13. 第 6 步:配置安全组 中,单击 在“分配安全组”标题下选择一个现有安全组 选项。

  14. 接下来,在 安全组 ID 列中的列表中,选择与先前练习中设置的新 BastionHost-SG 相对应的安全组 ID。

  15. 最后,单击屏幕右下角的 审查并启动 按钮。

  16. 然后将显示 第 7 步:审查实例启动。审查您定义的设置,然后单击屏幕右下角的 启动 按钮。

  17. 此时,您将看到另一个对话框,要求您选择现有的 EC2 密钥对或创建新的密钥对。

密钥对 是用于加密用于对抗 EC2 实例操作系统进行身份验证所需凭据的加密公钥/私钥。这样,您可以远程访问它们。

对于基于 Microsoft Windows 的 EC2 实例,密钥对的公钥用于加密 管理员 密码。然后,您可以使用私钥解密密码,以便远程访问 Windows 机器。对于基于 Linux 的 EC2 实例,私钥可用于建立 安全套接字 Shell (SSH) 连接。建立 SSH 连接到您的基于 Linux 的 EC2 实例,允许您使用 Linux shell 界面远程操作服务器。让我们来看看:

  1. 选择现有密钥对或创建新密钥对 对话框中,从下拉列表中选择 创建新密钥对 选项。

  2. 接下来,提供一个密钥对名称。例如,我将我的密钥命名为 USEC2Keys

  3. 点击 .pem 格式的文件并保存到你的 Downloads 文件夹中。确保将密钥复制并保存在安全的地方,或保存到桌面以便于访问。

  4. 接下来,点击 Launch Instances 按钮启动你的 EC2 实例。

  5. Launch Status 页面上,点击页面右下角的 View Instances 按钮。

此时,你将被重定向到实例控制台,并可以看到你的 EC2 实例,如下图所示:

图 7.24 – 成功启动了 Windows BastionSRV EC2 实例

图 7.24 – 成功启动了 Windows BastionSRV EC2 实例

服务器完全启动并可访问需要几分钟的时间。根据之前的截图,查看 Status Check 列,确保 AWS 完成了所有检查;你会在 Status check 列看到 2/2 checks passed 信息。

现在,你可以使用 Microsoft 远程桌面客户端远程连接到 Windows 服务器。如果你在使用 Microsoft Windows 的笔记本电脑或台式机进行这些实验,那么就使用 远程桌面连接 应用程序。如果你在 macOS 计算机上进行这些实验,你需要从 Apple Play Store 下载 Microsoft 远程桌面客户端。

要连接到你的新 Windows Bastion Host 服务器,请按以下步骤操作:

  1. 从 EC2 实例控制台中,点击刚刚启动的 EC2 实例旁边的复选框。

  2. 在底部面板中,记下 EC2 实例的公网 IP 地址。

  3. 接下来,在仍然选择 EC2 实例的情况下,点击屏幕右上角的 Actions 菜单,然后点击 Security 子菜单。在这里,选择 Get Windows password 链接,如下图所示:图 7.25 – 获取 EC2 实例的 Windows 密码选项

    图 7.25 – 获取 EC2 实例的 Windows 密码选项

  4. 你将看到 Downloads 文件夹。

  5. 选择密钥后,你会注意到 Browse 按钮下方的文本框会自动填充加密的密钥,如下图所示:图 7.26 – 解密你的密钥对

    图 7.26 – 解密你的密钥对

  6. 点击屏幕右下角的 Decrypt Password 按钮;你将获得 Windows 管理员密码。记下这个密码。

  7. 接下来,启动你的 远程桌面连接 应用程序。

  8. 远程桌面连接 应用程序中,在文本框内输入你 Windows Bastion 服务器的公网 IP 地址,位于 Computer: 字段旁边,如下图所示:图 7.27 – 远程桌面连接客户端

    图 7.27 – 远程桌面连接客户端

  9. 点击 Connect 按钮。

  10. 您将被提示在 Windows 安全对话框中提供您的安全凭证,如下图所示:图 7.28 – Windows 安全 – 输入您的凭证

    图 7.28 – Windows 安全 – 输入您的凭证

  11. 对于 管理员

  12. 密码框中,输入您之前解密的密码,然后点击确定

  13. 如果密码正确输入,您将看到一个远程桌面连接安全提示,告知您由于其安全证书,无法验证与远程计算机的连接。此警告信息可以忽略,您可以继续登录服务器,如下图所示:图 7.29 – RDP 证书警告对话框

    图 7.29 – RDP 证书警告对话框

  14. 点击按钮以继续进行远程连接。

  15. 远程桌面客户端现在应该能连接到远程 Windows 服务器,如下图所示:

图 7.30 – 远程堡垒主机服务器

图 7.30 – 远程堡垒主机服务器

在本练习中,您成功启动了一个新的 EC2 实例,作为我们的堡垒主机服务器。您可以使用 RDP 客户端远程连接到 Windows EC2 实例,并根据需要在该服务器上执行任何操作。

重要提示

作为本练习的结束步骤,您应终止您的 EC2 实例,以确保不会超过您在第四章中配置的计费警报阈值,身份与访问管理。要终止 EC2 实例,请在 EC2 仪表板中,从左侧菜单中点击实例。接着,选择您启动的Windows BastionSrv EC2 实例旁边的复选框。然后,在右上方的菜单中,点击实例状态下拉菜单并选择终止实例。系统将提示您确认是否终止 EC2 实例。请点击终止按钮以继续。

在下一个练习中,我们将演示亚马逊 ECS 服务,重点介绍使用简单示例的 Fargate 启动类型。

练习 7.4 – 在亚马逊 Fargate 上启动应用程序

在本练习中,您将启动 ECS 上的任务,这本质上是一个 Docker 容器:

  1. ECS 身份登录到您的 AWS 账户。

  2. 从搜索结果中,选择弹性容器服务

  3. 系统将显示 ECS 欢迎屏幕,如下图所示:图 7.31 – 亚马逊 ECS

    图 7.31 – 亚马逊 ECS

  4. 从左侧菜单中,选择集群

  5. 在右侧面板中,点击创建集群按钮。

  6. 系统将提示您选择集群模板。由于您将部署一个 Fargate 集群,因此请选择设计为与 AWS Fargate 或外部实例容量一起使用的仅网络选项。

  7. 点击页面底部的下一步按钮。

  8. 在下一个页面中,将您的集群命名为 MyCluster

  9. 接下来,点击页面底部的创建按钮。

  10. 集群创建完成后,您将看到一条通知。点击查看集群按钮。

  11. 接下来,从左侧菜单中点击任务定义

  12. 在右侧面板中,点击创建新任务定义按钮。

  13. 然后,您将被提示选择启动类型的兼容性,如下图所示:图 7.32 – ECS 任务定义

    图 7.32 – ECS 任务定义

  14. 选择 Fargate 类型,并点击页面底部的下一步按钮。

  15. 为您的任务定义提供一个名称,例如 fargate-task

  16. 向下滚动,并在任务大小下,将任务内存(GB)设置为1GB

  17. 接下来,将任务 CPU(vCPU)设置为0.5 vCPU

  18. 接下来,在容器定义下,点击添加容器按钮。

  19. 您将在此选择一个现有的容器,因此选择nginx

  20. 类似地,对于 nginx,如以下截图所示:图 7.33 – Fargate 启动容器

    图 7.33 – Fargate 启动容器

  21. 接下来,为容器端口设置80

  22. 向下滚动并点击添加按钮。这将带您返回到创建新任务定义页面。继续向下滚动并点击创建按钮。

  23. 几秒钟后,您应该会看到您的任务定义已经创建。

  24. 点击查看任务定义按钮。这将带您返回到 ECS 仪表板。

  25. 接下来,点击左侧菜单中的集群链接。您将看到您的MyCluster集群现在可用。点击MyCluster链接。

  26. 接下来,点击任务标签。

  27. 点击运行新任务按钮。

  28. 运行任务页面中,确保将启动类型设置为Fargate

  29. 您会发现任务定义已自动填充您的任务。如果没有,请从下拉菜单中选择它。

  30. 设置 1,因为我们将只运行一个任务。

  31. VPC 和安全组下,选择ProductionVPC

  32. 对于子网,选择公共子网一

  33. 对于安全组,点击提供的安全组名称旁边的编辑按钮。

  34. 您将被提示创建一个新的安全组,如下图所示:图 7.34 – Fargate 任务安全组

    图 7.34 – Fargate 任务安全组

  35. 接受默认设置以创建一个允许来自互联网的 80 端口的入站规则。点击页面底部的保存按钮。

  36. 接下来,确保将自动分配公共 IP设置为启用

  37. 点击页面底部的运行任务按钮。

  38. 您将被带回 ECS 仪表板。

  39. 几秒钟后,您应该会发现任务的状态变为正在运行,如下图所示:图 7.35 – Fargate 运行中的任务

    图 7.35 – Fargate 运行中的任务

  40. 接下来,在任务下,点击任务 ID 链接。这将打开任务的详细信息页面。

  41. 记下公共 IP 地址,并将其复制粘贴到新的浏览器标签页中。

  42. 你应该会发现,你可以连接到nginx网页,如下图所示:图 7.36 – 在 Fargate 上运行的 nginx 应用

    图 7.36 – 在 Fargate 上运行的 nginx 应用

  43. 你刚刚部署了你的第一个 Fargate 任务!

  44. 为了清理,返回到 ECS 仪表板。从左侧菜单中,点击集群链接。

  45. 在右侧窗格中,点击MyCluster链接。

  46. 接下来,在任务选项卡中,选择任务旁边的复选框。

  47. 最后,点击停止按钮。系统会提示你确认操作。点击出现的对话框中的停止按钮。

  48. 这将停止你的任务。你还会收到一个通知,说明任务已成功停止。你无需担心集群,因为你只需为 Fargate 上的任务付费。

在本练习中,我们展示了如何使用 Fargate 启动类型,在 ECS 上启动一个简单的 nginx Docker 容器。接下来,我们将总结本章内容。

总结

在本章中,我们研究了广泛的 AWS 计算解决方案,从他们的旗舰解决方案,Amazon EC2 开始。我们讨论了 AMI,它是包含基础操作系统、任何应用程序以及用于启动你的 EC2 实例的补丁和更新状态的机器映像,作为一个完整的服务器。AMI 通过快速启动 AMI、社区和市场提供,你也可以根据企业需求创建自己的 AMI。

我们探讨了不同的 EC2 实例类型和家族,以及如何通过实例类型有效描述你的 EC2 实例所提供的硬件和软件规格。我们还研究了 EC2 实例的存储选项,EBS、EFS 和 FSx 都是可能的解决方案。

然后,你学习了如何根据应用需求选择特定的 EC2 定价选项,并通过结合按需、预留和 Spot 实例选项,找到具有成本效益的部署机会。

在下一章中,我们将研究 AWS 上的数据库。几乎每个应用都需要某种形式的数据库来托管结构化数据。亚马逊提供了关系型和非关系型数据库,帮助设计现代的 web 和移动应用。亚马逊还为特定细分领域提供额外的数据库解决方案,如社交网络平台、数据仓库解决方案以及用于托管高度敏感数据的数据库。

问题

  1. 哪种 AWS EC2 定价选项可以通过允许你使用现有的服务器绑定软件许可证来帮助你降低成本?

    1. 按需

    2. 预留

    3. Spot

    4. 专用主机

  2. 哪种 AWS EC2 定价选项使你能够利用 AWS 云中未使用的 EC2 容量,并可以提供比按需价格低至 90% 的折扣?

    1. Spot 实例

    2. 预留实例

    3. 按需实例

    4. 专用主机

  3. 以下哪项关于购买可转换 EC2 预留实例的好处是正确的?(选择 2 个答案)

    1. 你可以将一个可转换预留实例交换为不同区域的可转换预留实例。

    2. 你可以同时交换一个或多个可转换预留实例为可转换和标准预留实例。

    3. 为了获得更好的定价,你可以将一个无预付费的可转换预留实例交换为一个全预付费或部分预付费的可转换预留实例。

    4. 你可以将全预付费和部分预付费的可转换预留实例交换为无预付费的可转换预留实例。

    5. 你可以将一个或多个可转换预留实例交换为不同配置的另一个可转换预留实例,包括实例家族、操作系统和租用模式。

  4. AWS EC2 服务的哪个功能可以通过阻止用户从控制台或 CLI 发出终止命令来帮助防止意外终止 EC2 实例?

    1. 启用“终止保护”

    2. 启用“终止保护”

    3. 启用“防止终止”

    4. 启用“保护 EC2”

  5. 哪种存储解决方案可以让你在多个基于 Linux 的 EC2 实例之间共享一个公共文件系统,用于支持那些需要低延迟连接访问数据的应用程序?

    1. EFS

    2. EBS

    3. S3

    4. NTFS

  6. 以下哪种 AWS 提供的 IP 地址类型可以为你提供一个静态的、可公开路由的地址,即使你停止并重新启动与之关联的 EC2 实例,该地址也不会改变?

    1. 公共 IP 地址

    2. 私有 IP 地址

    3. 弹性 IP 地址

    4. 区域 IP 地址

  7. 哪项 AWS 服务可以让你配置多个基于 Windows 的 EC2 实例,使用基于行业标准 SMB 协议的共享存储解决方案,并消除管理 Windows 文件服务器的行政开销?

    1. 亚马逊 FSx for Windows 文件服务器

    2. 亚马逊弹性文件系统

    3. 亚马逊弹性块存储

    4. 亚马逊 DFS 卷用于 Windows 文件服务器

  8. 以下哪种类型的 EBS 卷可以用作 EC2 实例的启动卷?(选择 2 个答案)

    1. 通用型 SSD(gp2)

    2. 预配置 IOPS SSD(io1)

    3. 吞吐优化型 HDD(st1)

    4. 冷 HDD(sc1)

    5. FSx for Windows

  9. 以下哪项 AWS 服务可以让你快速启动一个预配置 WordPress 安装包的 Web 服务器,提供可预测的月度定价,集成证书管理,并提供免费的 SSL/TLS 证书?

    1. AWS Lightsail

    2. AWS EC2

    3. AWS RDS

    4. AWS Elastic Beanstalk

  10. 哪项 AWS 服务可以用来运行一段代码,该代码可以创建上传到一个 Amazon S3 桶的图片的缩略图,并将它们复制到另一个 S3 桶?

    1. AWS SNS

    2. AWS Lambda

    3. AWS RDS

    4. AWS Snowball

第八章: AWS 数据库服务

大多数应用程序需要以某种方式存储、访问、组织和操作数据。通常,数据会存储在实际应用程序之外的数据库中,原因有很多,包括提高效率。然而,数据库的设计不仅仅是存储数据。根据数据库的类型,数据可以以结构化或半结构化的方式组织和存储,提供高效的访问速度,并允许你对数据执行查询和扫描操作。数据还可以从数据库中的不同中组合,以帮助你创建复杂的分析和报告。你可能使用数据库的典型场景包括:存储电子商务网站的客户记录及其订单、存储产品目录以及存储家用物联网恒温器设备的温度信息。AWS 提供了三种主要的数据库解决方案,以及为特定应用类型提供的其他解决方案。

本章将涉及以下主题:

  • 托管数据库与非托管数据库

  • 数据库概念与模型简介

  • Amazon 关系数据库服务Amazon RDS)简介

  • 了解 Amazon DynamoDB(一个 NoSQL 数据库解决方案)

  • 了解 Amazon Redshift 的使用案例及数据仓库

  • 理解 Amazon Elasticache 的内存缓存选项的重要性

  • 了解针对特定细分需求的额外数据库服务

  • 数据库迁移服务DMS

在本章中,你将学习 AWS 提供的各种托管数据库解决方案,并启动你第一个运行 MySQL 引擎的 Amazon 关系数据库服务。稍后在本书中,我们将配置一个数据库,用于存储通过 Web 应用程序上传的数据。

技术要求

要完成本章的练习,你需要访问你的 AWS 账户,并以我们虚拟管理员Alice的身份登录,使用她的 IAM 用户凭证。

托管数据库与非托管数据库

传统上,在本地部署环境中,你需要配置一台服务器(物理服务器或虚拟服务器),并安装操作系统,然后在其上安装数据库软件。由于数据库的主要目的是存储数据,因此你还需要确保服务器上附加了足够的存储。由于数据存储的重要性,你还需要采取额外的安全措施来保护数据,并确保有足够的数据备份和副本(理想情况下,备份应存储在其他位置的异地)以应对灾难。

在 AWS 上,你可以设置 弹性计算云EC2)实例,并以相同的方式安装你的数据库,例如 Microsoft SQL ServerOracle,以便根据需要为前端 Web 和应用服务器提供服务。在这种情况下,你将完全负责管理数据库,配置所需的 弹性块存储EBS)卷以供存储,并确保做好足够的备份。你还需要设计高可用性和性能。

另外,AWS 还提供 托管数据库解决方案。AWS 会负责配置你的数据库实例,你只需要指定某些参数以确保应用所需的容量。AWS 还会配置并管理你的数据库所需的存储,并执行所有必要的备份和复制操作。最终,你将获得一个完全托管的解决方案,AWS 会处理你选择的几乎所有配置选项,除了确保你的应用程序针对所选择的数据库解决方案进行了优化。

了解特定细分需求的额外数据库服务

在这一部分中,我们向你介绍了非托管数据库的概念,以及传统上我们如何在物理或虚拟服务器上安装数据库软件。然而,在服务器上托管数据库需要额外的管理工作。虽然在 AWS 上你可以在 EC2 实例上安装数据库,但考虑使用 AWS 的托管数据库服务(如 Amazon RDS)更为合适,因为这能减轻客户的管理负担。在下一部分中,我们将向你介绍数据库概念和模型。

数据库概念和模型介绍

目前,有几种类型的数据库模型,但最常见的模型是 关系型非关系型 模型。关系型数据库已经存在多年,允许你高效地管理数据,并能够执行复杂的查询和分析。然而,它们也有一些限制,比如在你添加数据之前必须定义数据库模式(其结构),而且之后更改模式会比较困难。非关系型数据库提供了更多的灵活性,并且被广泛应用于现代的 Web 和移动应用中。我们来看看它们之间的主要区别。

关系型数据库

。在每个表中,你会有行和列——列定义了你数据的 属性,行包含了数据库中的单个 记录。因此,例如,在客户的表中,你可以有像 这样的列,然后你的行将包含与这些列相关的数据,包含你客户的名字和姓氏。

另一个需要考虑的重要因素是First Name和一个名为Date of Birth的第二列,在添加数据之前,必须先定义每一列允许的数据信息类型;对于First Name列,数据类型应为string,而对于Date of Birth列,数据类型应定义为date

关系型数据库中必须存在一个重要的列(属性),即主键字段。每一条记录都必须有一个在整个表中唯一的主键。这确保了表中每条记录的唯一性,使得你可以方便地查询表中的特定记录。如下面的表格所示,客户记录表有一个名为CustomerID的主键:

图 8.1 – 客户联系方式表

图 8.1 – 客户联系方式表

一个数据库也可以托管多个特定记录集的表格。与其将所有记录存储在一个表中,不如为相关数据创建单独的表。例如,你可以在一个表中存储客户联系方式,在另一个表中存储客户订单。在大多数情况下,这些表格之间会有某种关系。在这个例子中,表格与特定客户相关,一个表存储他们的联系方式,另一个表存储他们的订单。

将不同的数据集分离到不同的表中,目的是为了更好地管理、提高性能并避免数据重复。例如,如果你有一个单独的表来存储客户的联系方式以及他们的订单,那么每个订单记录都会重复列出客户的联系方式。通过将订单和联系方式分开到不同的表中,我们可以避免数据的重复并提高性能。以下是一个客户订单表的示例:

图 8.2 – 客户订单表

图 8.2 – 客户订单表

在前面的两个表格中,请注意通过将客户联系方式表与订单表分开,我们避免了数据的重复。如果将所有数据放在一个表中,那么我们将有多个包含相同信息的列重复出现,例如同一个客户每次下单时,名字和姓氏都会重复。

数据库中的表格可以相互关联,我们需要某种连接方式来有效地组织数据。在之前的示例中,除了在订单表中重复客户地址信息外,我们仅仅添加了Customer-ID列,用来标识该订单对应的客户。记住,Customer-ID列是客户联系方式表的主键,因此每个客户 ID 都唯一标识一个客户。

最终,我们现在可以通过使用客户 ID 作为参考点,结合两列数据来查询数据库。然后,我们可以通过查询生成一份报告,列出所有由客户Customer-IDCust002下的订单。在此报告中,我们可以列出从第一个表格提取的客户联系方式,以及从第二个表格中列出的订单信息,其中Customer-IDCust002。该报告可以发送给客户作为账户明细。

关系型数据库使你能够对大数据集进行复杂的查询、分析和报告。性能与需要执行的查询类型和托管的数据量直接相关。通常,这意味着你的基础设施可能需要不时升级,以应对需求较高的应用程序。

关系型数据库使用SELECT语句使你能够查询特定数据,而WHERE语句则可以限制SELECT查询以匹配特定条件。在AWS 认证云从业者考试中,你不需要掌握如何使用 SQL 语言。

关系型数据库也被称为在线事务处理OLTP数据库OLTP 数据库旨在定期向数据库中添加、更新和删除少量数据。典型的例子包括电子商务网站的客户订单数据库或大学的学生数据库。

非关系型(NoSQL)数据库

使用关系型数据库,你将数据以表格形式存储在定义好的结构中。每个表格的列(称为属性)只会包含一种类型的数据,并且这种类型需要预先定义。你通常会查询多个相关的数据表,通过跨表查询来获取所需的信息。

然而,关系型数据库的问题在于缺乏灵活性,因为数据必须是结构化的。此外,数据库中的表格越多,查询就越复杂,运行和管理数据库所需的资源也越多。关系型数据库在执行每秒数千次读取和写入操作时,也表现得不够理想。

相比之下,非关系型数据库不遵循传统的关系型数据存储方法。非关系型数据库的数据存储使用不同的模型,具体取决于存储的数据类型。以下是这些模型:

  • 键值存储:这是包含在对象中的键值对集合。

  • 文档数据存储:这通常是JavaScript 对象表示法JSON)格式的文档(尽管也可以使用其他格式),用于以结构化或半结构化的形式存储数据。数据可以包含键值对的嵌套属性。存储中的所有文档不要求保持相同的数据结构,这提供了更高的灵活性。

  • 列式数据存储:数据按列而非行组织为单元格。此外,读写操作是通过列而不是通过行进行的。

数据库的模式无需预定义,这创造了很多灵活性,因为您可以自由地向文档中添加字段(属性),而无需先定义它们。因此,您的文档可以包含不同数量的字段。例如,一个列出客户详细信息的文档可能包括他们的姓名、地址信息、订单历史和信用卡信息,而另一个文档则可能包含他们最喜欢的产品列表。

非关系型数据库作为关系型数据库的替代品开发,主要解决了需要灵活模式的场景,同时也能处理需要每秒上千次读写的大型数据存储,这是关系型数据库传统上难以做到的。非关系型数据库能够应对这种负载,因为查询不需要查看多个相关的表来提取结果。此外,非关系型数据库可以处理数据的频繁变化。

然而,像关系型数据库一样,非关系型数据库仍然要求至少有一个主键字段(属性),这是唯一必需的属性。除此之外,您的数据库表实际上是无模式的。主键用于确保每条记录在数据库中是唯一的。

在本节中,我们回顾了关系型和非关系型数据库之间的主要区别。我们研究了这两种类型数据库解决方案的使用案例,并比较了它们之间的关键差异。在 AWS 上,提供了关系型和非关系型数据库服务。在接下来的部分中,我们将详细介绍提供的服务。

亚马逊 RDS 简介

亚马逊 RDS在 AWS 平台上提供传统的关系型数据库作为完全托管的服务。它非常适用于事务型数据库需求,也称为OLTP,AWS 提供以下六种不同的数据库引擎:

  • MySQL

  • PostgreSQL

  • MariaDB

  • Microsoft SQL 服务器

  • Oracle

  • 亚马逊 Aurora

另一个你可能听说过的术语是关系型数据库管理系统RDBMS)。RDBMS 执行创建、读取、更新和删除(CRUD)数据库数据的功能,通过一个底层的软件组件,也就是我们称之为数据库引擎。

这里需要理解的一个重要点是,当你选择设置 Amazon RDS 数据库时,你是在为选择的引擎设置一个 数据库实例,该引擎将在该实例上运行。你可以在数据库实例上创建一个或多个该引擎支持的数据库。这意味着你可以在单个数据库实例上运行多个数据库。

此外,在 Amazon RDS 上,当你设置数据库实例时,你需要指定硬件能力,形式为 CPU 和内存分配。实例的类型还将决定实例可以提供的最大存储带宽和网络性能。AWS 提供三种不同类型的实例类,具有不同的虚拟硬件规格,适用于各种使用场景。具体如下:

  • 标准类(包括 m 类):这些类提供计算、内存和网络资源的平衡,适用于大多数应用需求。标准类提供以下规格:

    • 介于 2 到 96 个 vCPU 之间

    • 最大支持 384 GB 内存

  • 内存优化类(包括 r 类和 x 类):这些类非常适合需要更高内存水平的高要求应用,并且针对内存密集型应用进行了优化。内存优化类提供以下规格:

    • 介于 4 到 128 个 vCPU 之间

    • 最大支持 3,904 GB 内存

  • 突发类(包括 t 类):这些类专为非生产数据库设计,提供基准性能水平,并能够突发到完全的 CPU 使用率。突发类适用于 CPU 使用量适中的数据库工作负载,这些工作负载偶尔会出现性能高峰。突发类提供以下规格:

    • 介于 1 到 8 个 vCPU 之间

    • 最大支持 32 GB 内存

以下截图展示了你可以选择的不同 DB 实例类 选项:

图 8.3 – 数据库实例类型选项

图 8.3 – 数据库实例类型选项

除了计算资源外,Amazon RDS 还需要存储能力来托管所有必需的数据。存储平台运行在 Amazon EBS 上,因此它与实际的数据库实例类型解耦。这使得你可以升级存储卷,而不必必然地升级实例类型,反之亦然,只要兼容性得到保证。存储卷的吞吐量由选择的实例类型以及 每秒输入/输出操作次数 (IOPS) 决定。AWS 为你的数据库提供以下不同的存储选项:

  • 通用 SSD:为标准工作负载设计,适用于大多数数据库,通用 SSD 卷为 MariaDB、MySQL、PostgreSQL 和 Oracle 数据库提供 20 GiB 至 64 TiB 的存储空间,为 Microsoft SQL Server 提供 20 GiB 至 16 TiB 的存储空间。

    达到的 IOPS 数量取决于存储卷的大小,基准 I/O 性能为每 GiB 3 IOPS(最少 100 IOPS)。卷的大小越大,性能越高;例如,一个 60 GiB 的卷将提供 180 IOPS。

    通用型 SSD 还为小于 1 TiB 的卷提供了延时性能提升。这意味着较小的卷在需要时将获得额外的性能提升,而无需为短期偶发的性能峰值分配不必要的存储。然而,对于大于 1 TiB 的卷,性能提升无关紧要。

  • 预配置 IOPS SSD:AWS 建议对于需要快速且稳定 I/O 性能的生产应用,使用预配置 IOPS SSD。使用预配置 IOPS SSD 时,你可以指定 IOPS 速率和卷的大小。与通用型 SSD 类似,你可以根据使用的底层数据库引擎分配最多 64 TiB 的存储。然而,预配置 IOPS SSD 不提供任何性能提升。

  • 磁性存储:AWS 还提供了磁性存储卷以支持向后兼容性。它们不建议用于任何生产环境,并且限制为 1,000 IOPS 和最多 3 TiB 的存储。

最终,如果需要,你可以升级存储,但这通常需要短时间的停机,通常为几分钟(对于磁性存储,可能需要更长时间),因此必须提前规划。

部署在 Amazon VPC 中

Amazon RDS 是一个区域性服务,这意味着你需要首先选择要部署数据库实例的区域。Amazon RDS 数据库实例只能部署在 VPC 中,并且与 EC2 实例一样,部署在指定的子网中。由于子网始终只与一个可用区关联,这也意味着如果发生可用区故障,你的数据库将无法访问。使用 Amazon RDS,你只能部署单一主数据库实例。这种类型的实例既能执行读取操作,也能执行写入操作。Amazon 确实提供了多种解决方案,以防主数据库实例发生故障,我们将在本章稍后讨论这些选项。

在 VPC 中部署 RDS 数据库可以精细控制数据库的访问方式,并允许你配置多种网络安全组件,如你将使用的私有 IP 地址范围、保护 RDS 实例的安全组,以及保护将托管数据库的子网中流量的网络访问控制列表NACLs)。

在 VPC 中部署 RDS 数据库也意味着你可以配置多种访问该数据库的架构。以下是你可以配置的一些场景:

  • 3306用于 MySQL RDS 实例。

  • 通过不同 VPC 中的 EC2 实例访问的 VPC 中的 DB 实例:在第六章AWS 网络服务、VPC、Route53 和 CloudFront中,我们讨论了如何使用 VPC 对等连接服务连接两个 VPC。然后,两个 VPC 中的实例可以通过该对等连接使用私有 IP 地址进行通信,就像它们在同一网络中一样。一旦建立了对等连接,您就需要配置安全组的必要规则,以使流量能够在 EC2 实例和 RDS 数据库之间流动。VPC 对等连接可以让您在同一区域内、跨区域,甚至跨 AWS 账户之间建立对等连接。

  • 通过互联网访问的 VPC 中的 DB 实例:虽然没有什么可以阻止你将 RDS 数据库实例放置在 VPC 的公共子网中,但这并不被认为是生产环境中的最佳实践。数据库被视为包含关键信息且可能是敏感信息的后端服务。它们应该始终放置在 VPC 的私有子网中。将 RDS 数据库放置在公共子网中应仅限于测试目的或特定用例。

  • 通过私有网络访问的 VPC 中的 DB 实例:有了 VPC 后,您可以在本地网络和 VPC 之间设置 VPN 隧道或 Direct Connect 服务。这使您可以将 RDS 数据库放置在 VPC 的私有子网中,并通过 VPN 隧道或 Direct Connect 服务从公司办公室访问它。

对于生产环境,始终将 RDS 数据库实例放置在 VPC 的私有子网中。以下图所示的架构展示了这种最佳实践方法。在这里,RDS 数据库部署了一个私有子网,称为数据库子网。为了通过标准 Web 应用程序访问数据库,来自互联网的流量通过弹性负载均衡器ELB)进行路由(在第九章AWS 上的高可用性与弹性中详细讨论),并分发到放置在 VPC 内另一组私有子网中的 Web 服务器。然后,您的 Web 服务器连接到 RDS 数据库,执行如添加、更新或删除记录等数据操作,以满足应用程序的需求。流量可以根据网络访问控制列表NACLs)和安全组中定义的规则进行流动:

图 8.4 – 在 VPC 的私有子网中部署的 Amazon RDS

](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_08_04.jpg)

图 8.4 – 在 VPC 的私有子网中部署的 Amazon RDS

在前面的示意图中,互联网用户可以通过 web/app 服务器访问数据库,而不是直接访问数据库。用户将通过应用负载均衡器ALB)连接到 web/app 服务器(该负载均衡器会在健康的 EC2 实例之间分配流量)。web/app 服务器将通过某种流程将数据库操作请求发送到后端私有子网中的 RDS 数据库。

请注意,RDS 数据库只接受来自附加到适当安全组的 EC2 实例的流量。这确保了如果 EC2 实例被替换或附加了新的 EC2 实例,且这些新实例被附加到相同的安全组,它们仍然能够与 RDS 数据库通信。

注意

您的应用程序通过 RDS DNS 端点名称连接到后端数据库,而不是连接到数据库实例的具体 IP 地址。这使得您在发生灾难时能够轻松管理故障切换,我们将在本章的后续内容中讨论这一点。

备份与恢复

您的数据库对您来说非常重要,确保您能够从故障、数据丢失甚至数据损坏中恢复将是设计架构时的一个重要因素。AWS 使您能够解决灾难恢复和业务连续性问题,而 Amazon RDS 提供了多个配置选项供您选择。

您的 RPO 和 RTO 要求是什么?

当决定在 AWS 上保护数据库免受意外故障或数据损坏时,您需要考虑哪些配置选项能够满足您组织对恢复的期望。如果您的业务托管着关键数据,且在发生故障时需要快速恢复,您需要设计一个能够支持此需求的架构。为了帮助您确定恢复的关键性,您需要确定恢复点目标RPO)和恢复时间目标RTO)。这两个参数将帮助您设计出符合业务要求的恢复策略:

  • RTO:表示从灾难恢复并返回到工作状态所需的时间(以小时为单位)。恢复所需的时间将包括新建数据库实例、执行恢复操作以及完成其他行政或技术任务。

  • RPO:表示在发生灾难时您会丢失多少数据(同样以时间为单位,通常是小时)。RPO 越短,发生故障时您丢失的数据就越少。

如果您的组织规定只能接受 2 小时的 RTO 和 4 小时的 RPO,这意味着您需要在 2 小时内从故障恢复到正常状态,而您能接受的最大数据丢失量(可能因为您可以重新生成这些数据)为 4 小时的数据量。

根据您的 RPO 和 RTO 水平,您可以选择符合要求的灾难恢复策略。例如,如果您的 RPO 设置为 4 小时,并且您的恢复策略基于恢复数据库的较旧备份,那么您应每 4 小时执行一次数据库备份。

高可用性与多可用区(Multi-AZ)

对于运行 MariaDB、MySQL、PostgreSQL、Oracle、Microsoft SQL 和 Amazon Aurora 的 Amazon RDS 数据库引擎,AWS 提供了使用 RDS 多可用区 解决方案的高可用性和故障切换支持。多可用区是一种架构设计模式,其中数据库的主副本部署在一个可用区,而数据库的备用副本则部署在另一个可用区。然后,数据会从主副本同步复制到备用副本,持续进行。通常,对于关系型数据库,只有一个数据库可以保持 状态,意味着数据可以同时对其进行写入和读取。在多可用区部署的情况下,这仍然适用,数据库的备用副本只是同步接收主副本所做的所有更改。然而,您无法直接从备用副本进行写入或读取。

如果数据库的主副本发生故障,AWS 将执行故障切换操作,将数据库切换到备用副本。备用副本将被提升为新的主副本,之前的主副本将被终止,并替换为另一个备用副本。随后,复制将会在相反方向启动。在故障切换过程中,您的应用可能会经历短暂的中断(大约 2 分钟),但之后能够重新连接到数据库(即已被提升为新主副本的备用副本)并继续运行:

图 8.5 – 配置了多可用区的 Amazon RDS

](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_08_05.jpg)

图 8.5 – 配置了多可用区的 Amazon RDS

故障切换可以因多种原因触发,除了可用区故障外,还包括对主数据库进行修补或实例的升级。您也可以执行故障切换测试,以确保配置正确,通过重启主数据库并在重启时请求故障切换操作来验证。

通过多可用区部署,您可以大幅降低 RTO 和 RPO 水平。因为现有数据已被同步复制到另一个可用区的备用副本,故障切换可以在几分钟内完成,且数据丢失被最小化。

然而,在某些情况下,仅仅依靠多可用区作为灾难恢复(DR)策略可能不足够。例如,如果数据库的主副本发生数据损坏怎么办?那损坏的数据将会同步到备用副本。

备份与恢复

AWS 还提供了定期备份数据库的选项,您可以使用这些备份来执行时间点恢复。AWS 提供了两种选项:自动备份手动快照

自动备份

AWS 提供完全托管的自动备份服务,免费提供至数据库总大小。在执行自动备份时,第一次创建的快照将是完全备份;后续快照将是增量备份,确保只备份数据的变化部分。自动备份的一些附加功能包括:

  • 备份窗口:自动备份将在预定义的窗口内进行,客户可以进行配置。默认的备份时间为 30 分钟,但你也可以更改此时间。此外,如果备份需要的时间超过了分配的备份窗口时间,备份将在窗口结束后继续,直到完成为止。

  • 0 天,这基本上意味着禁用备份操作。如果在启动 RDS 实例时禁用了自动备份,你可以通过将备份保留期设置为正的非零值来稍后启用备份。

  • LatestRestorableTime,通常是最后的 5 分钟。

手动快照

除了自动备份,你还可以创建数据库的手动快照,以提供额外的保护。然后,你可以使用手动快照将数据库实例恢复到已知的状态,按需要频繁进行恢复。

如果计划对数据库进行重大更改,并且希望在更改前再创建一个额外的快照,手动快照非常有用。

自动备份和手动备份在因数据损坏需要恢复时特别有用。请记住,即使启用了多可用区(Multi-AZ),主副本上的任何数据损坏也会复制到备用副本,而拥有较旧的备份可以使你将数据库恢复到数据损坏发生之前的时间点。

跨区域快照

你可以将快照复制到其他区域,以进一步提高备份的可用性,以防发生区域性故障或灾难。你还可以配置自动备份和事务日志的复制,将其复制到另一个区域。当 DB 实例上的快照和事务日志准备好时,Amazon RDS 会立即启动跨区域复制。

I/O 挂起问题

需要注意的一个重要行为模式是,在备份过程初始化时,通常会经历短暂的 I/O 挂起(通常仅持续几秒钟)。在只有单个数据库实例部署的情况下,这会导致连接数据库时出现短暂的中断。这意味着,如果备份操作在工作时间内进行,则用户可能会在备份过程中经历一些中断。

为了解决这个问题,你可以选择确保备份过程发生在非工作时间,或者更好地,按照 Amazon 对数据库进行 Multi-AZ 部署的建议,特别是对于 MariaDB、MySQL、Oracle 和 PostgreSQL 引擎。这是因为在 Multi-AZ 配置中,备份是从数据库的备用副本中进行的,而不是主副本。请注意,对于 Microsoft SQL Server,即使在 Multi-AZ 部署中,备份期间 I/O 活动也会短暂暂停。

通过只读副本的横向扩展

传统上,由于架构的原因,关系型数据库在横向扩展方面表现不佳。关系型数据库通常只能有一个主副本(即可以写入数据的副本),这意味着如果主副本发生故障,你需要从备份中恢复数据。AWS 提供了 Multi-AZ 作为克服这一单点故障的方法,它允许你创建数据库的备用副本,并同步将数据复制到该副本。

然而,你不能使用备用副本来执行写操作或读取查询,因为备用副本仅在主副本发生故障时可用。如果你的数据库主副本发生故障,备用副本将被提升为新的主副本,你将开始对其进行读取和写入操作。

在横向扩展方面,AWS 提供了一个选项,允许通过名为只读副本的功能扩展数据库的读取副本。AWS RDS 可以利用其内置的复制功能,支持 Microsoft SQL、MySQL、Oracle 和 PostgreSQL,创建源数据库实例的附加只读副本。数据通过异步复制从源数据库复制到副本。这有助于减轻主副本的负载,将读取查询重定向到只读副本。仅需要读取数据库数据的应用程序组件可以被路由到读取副本,从而使主副本专注于那些需要写入数据库的应用程序。

图 8.6 – 带有只读副本的 AWS RDS

图 8.6 – 带有只读副本的 AWS RDS

只读副本还可以配置为跨区域复制,如前图所示。(唯一的例外是 Microsoft SQL Server 引擎,不支持多可用区只读副本或跨区域只读副本。)这意味着你可以在不同的区域保持数据库的只读副本,这些副本可以供其他仅需要读取数据的应用程序使用。跨区域存储只读副本还可以帮助你解决合规性或监管要求,规定你需要在较远的地方保留数据副本。

你还可以将读副本设置为多可用区(Multi-AZ),这将使你能够将读副本作为灾难恢复(DR)目标。如果你需要将读副本提升为独立的数据库,它将已经配置为多可用区。此功能适用于 MySQL、MariaDB、PostgreSQL 和 Oracle 引擎。最后,你可以为每个数据库实例添加最多五个读副本。

此外,在发生重大灾难时,读副本也可以被提升为主副本,此后它将独立于原始的主数据库副本。

本节中,我们探讨了亚马逊 RDS 及其管理型 RDS 的关键功能。我们回顾了提供的各种数据库引擎、与高可用性和可扩展性相关的概念,以及备份和恢复。

在下一节中,我们将简要介绍 AWS RDS 的一项服务,特别是亚马逊 Aurora。虽然亚马逊 Aurora 是 AWS 提供的 RDS 数据库解决方案,但它提供了几项增强的功能。

亚马逊 Aurora 简介

亚马逊 Aurora 是 AWS 的专有 MySQL 和 PostgreSQL 兼容数据库解决方案,旨在企业级生产环境中使用。亚马逊 Aurora 提供了丰富的功能,帮助你设计具有高可用性、可扩展性和成本效益的数据库解决方案,以满足各种业务需求。

亚马逊 Aurora 采用高韧性架构,数据库副本分布在至少三个可用区。它比标准 MySQL 数据库快五倍,比标准 PostgreSQL 数据库快三倍。

该服务提供 容错自愈存储能力,可以将每个数据库实例的规模扩展到 128 TB。亚马逊 Aurora 还支持最多 15 个低延迟的读副本。让我们回顾一下亚马逊 Aurora 的一些关键特性。

亚马逊 Aurora 数据库集群

亚马逊 Aurora 被部署为由一个或多个 数据库实例集群存储卷 组成的 数据库集群。该集群存储卷跨多个可用区,其中存储着集群数据的副本。

Aurora 数据库集群由两种类型的数据库实例组成,如下所示:

  • 主数据库实例:该实例支持读写操作,并执行所有数据修改操作到集群存储卷。你只有 一个 主数据库实例。

  • Aurora 副本:除了主数据库实例外,你可以有最多 15 个 Aurora 副本。Aurora 副本连接到与主数据库实例相同的存储卷,但仅用于读操作。当主数据库实例发生故障时,你可以将 Aurora 副本用作故障转移选项。你也可以将主数据库实例的读取查询卸载到副本上。

在架构方面,数据库实例(计算能力)和集群存储卷(存储)是解耦的,如下图所示。

图 8.7 – 亚马逊 Aurora 数据库集群架构

](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_08_07.jpg)

图 8.7 – Amazon Aurora DB 集群架构

计算能力和存储的解耦还意味着,即使是单个 DB 实例,由于存储卷分布在多个存储节点和多个可用区之间,它仍然是一个集群。

在配置 DB 实例时,你可以选择两种实例类别。这些类别分别是内存优化型(为内存密集型工作负载设计)和突发性能型(提供基准性能水平,并能在需要时提供完整 CPU 使用率的突发能力)。

虽然标准的 Amazon Aurora 部署看起来与部署 Amazon RDS 数据库类似,你需要选择计算能力和基础存储,AWS 也提供了一个无服务器的替代方案,接下来我们将简要介绍。

Amazon Aurora Serverless

Amazon Aurora Serverless(版本 1)是 Amazon Aurora 的按需自动扩展配置。DB 集群根据需求自动扩展计算能力,并且在不使用时会自动关闭。无服务器的替代方案会根据应用程序的使用情况自动启动,扩展计算能力,并在不使用时关闭。此外,集群的存储卷始终加密。

在使用场景方面,Amazon Aurora Serverless 非常适合工作负载不可预测的应用程序。另一个使用场景是你有一个轻量级应用程序,它每天可能会经历 30 分钟到几小时的高峰,或者在一年中的规律性时间间隔内出现高峰。例子包括预算、会计和报告应用程序。

在本节中,我们简要介绍了 Amazon Aurora 服务。在下一节中,我们将研究 Amazon DynamoDB,这是 AWS 提供的非关系型(NoSQL)数据库服务。

了解 Amazon DynamoDB(NoSQL 数据库解决方案)

Amazon 提供了一种完全托管的非关系型数据库解决方案,称为 Amazon DynamoDB。与 AWS 提供的关系型数据库服务(不包括 Amazon Aurora,它也有无服务器选项,如前所述)不同,你不需要担心为应用程序配置合适的 DB 实例。DynamoDB 提供了一个无服务器的解决方案,因为你不需要定义任何数据库实例配置,例如 CPU 或内存配置。Amazon 管理着托管 DynamoDB 服务的基础设施。

DynamoDB 是一个区域性服务,类似于 Amazon RDS,但具有更高的可扩展性和高可用性。你不需要像配置单个 Amazon RDS 数据库实例那样,在一个可用区中配置单个 DB 实例。相反,当你配置 DynamoDB 表时,Amazon 会自动配置数据库,并将数据分布在多个服务器上,以满足你的吞吐量和存储需求。所有数据都存储在固态硬盘SSDs)上,底层存储会在多个可用区之间进行复制。

DynamoDB 的架构意味着它可以用于类似于 Amazon RDS 的使用场景,尽管它们更适用于可以拥有数百万并发用户的应用程序,以及需要每秒执行数千次读写操作的场景。

表格、项和属性

让我们来看一下 DynamoDB 数据库的核心组件:

  • 表格:像 Amazon RDS 数据库一样,你的数据存储在表格中。因此,你可以有一个客户表来存储客户和他们订单的信息。每个表也会有一个唯一的主键,这是唯一标识表中每个记录的关键。记录在 DynamoDB 表格中被称为项。

  • 400 KB大小,可以包含称为属性的键值对。

  • First-NameLast-Name等。

与 Amazon RDS 不同,你不需要预定义表的模式。这提供了更大的灵活性,因为你的表会随着时间的推移而发展。除了主键外,你可以添加新的属性并定义它们,以便根据需要扩展表格。

此外,项不必为所有属性都有值——例如,你可以有一个包含客户地址信息、订单和他们在餐厅最喜欢的甜点的表格。有些项可能会有关于最喜欢甜点的值,而有些可能没有,这完全没问题。

然而,属性需要定义数据类型。以下是这里可用的选项:

  • 标量:只有一个值,可以是数字、字符串、二进制、布尔值或 null。

  • 集合:表示多个标量值,可以是字符串集合、数字集合或二进制集合。

  • 文档:这是一个复杂的结构,提供了嵌套属性的选项。你可以使用 JSON 格式的文档,并检索你需要的数据,而无需检索整个文档。文档数据类型有两个子类型:

    • 列表:一组有序的值

    • 映射:一组无序的名称-值对

在本节中,我们审视了 DynamoDB 数据库的不同组件。在下一节中,我们将学习如何为我们的数据库需求提供所需的容量。

为 DynamoDB 提供容量

在提供数据库容量时,你只需要提供定义读取容量单位RCUs)和写入容量单位WCUs)的参数。这些值使得 Amazon 能够确定为托管你的数据库和吞吐量级别而配置的底层基础设施。

根据你的 RCU 和 WCU,DynamoDB 将分配一个或多个分区来存储你的数据,并使用主键将你的项分布到多个分区。将数据分布到多个分区使得 DynamoDB 能够实现超低延迟的读写操作,无论你表中有多少项。

提供容量的两种选项如下:

  • 按需:DynamoDB 会根据您的读写请求动态地分配容量。此选项适用于应用流量不可预测且工作负载未知的场景。

  • 预置:您可以指定应用所需的每秒读写次数。如果您的应用访问模式是可预测的,这是理想的选择。您还可以始终启用 自动扩展 来自动调整流量变化。

在本节中,我们了解了 Amazon DynamoDB 和 AWS 的非关系型数据库解决方案。我们发现 DynamoDB 适用于现代 Web 应用,这些应用需要每秒进行数千次的读写操作,以及 DynamoDB 如何专门为此目的构建。

在下一节中,我们将了解 Amazon 的数据仓库解决方案——Amazon Redshift。

理解 Amazon Redshift 和数据仓库的应用场景

数据仓库解决方案是一种专门的数据库解决方案,旨在从其他关系型数据库中提取数据,并支持跨不同数据集执行复杂的查询和分析。例如,您可以结合客户订单、库存数据和财务信息,分析产品趋势、需求和投资回报率。

Amazon Redshift 的客户包括 商业智能BI)应用、报告和分析工具集。

在线分析处理(OLAP)

Amazon Redshift 专为分析设计,并优化了大量数据行扫描的效率,适用于一列或多列数据的扫描。与传统的行存储方式不同,Redshift 以透明方式按列组织数据;它将数据转换为每列的列式存储。我们来看看这意味着什么。

在传统数据库中,每条记录的数据是按行存储的。列代表数据的属性,每行会包含相关列的字段值。

让我们回顾一下之前看到的表格,看看数据是如何存储在磁盘上的块中的:

图 8.8 – 数据以块的形式存储在磁盘上

图 8.8 – 数据以块的形式存储在磁盘上

请注意,数据在磁盘上按顺序存储,每列的数据会在块中组成整个行(块 1、2、3,依此类推)。如果记录大小大于块大小,那么记录会跨越多个块存储。类似地,如果记录大小小于块大小,记录可能占用的空间小于一个块的大小。最终,这种存储数据的方式会导致存储利用效率低下。

话虽如此,在传统的关系型数据库中,大多数事务通常涉及对一小部分记录的频繁读写查询,在这种情况下,需要检索整个记录集。

现在,我们来看看 Redshift 如何存储数据。使用相同的客户数据表,每个数据块存储单一列在多个行中的值,具体如以下图所示:

图 8.9 – 存储在 Amazon Redshift 上的数据

图 8.9 – 存储在 Amazon Redshift 上的数据

Amazon Redshift 在添加数据时会将其转换为列式存储。通过这种架构,Amazon Redshift 可以存储比传统的行式数据库存储更多的记录数,其列字段值最多可以存储三倍数量的记录。这意味着,在读取给定记录集的列字段值时,你仅消耗传统行式存储的三分之一 I/O 操作。此外,由于存储在块中的数据类型相同,你可以使用为列式数据类型设计的压缩方法来实现更好的 I/O 性能,并减少整体存储空间。该架构非常适合数据仓库解决方案,因为从其本质上讲,你的查询是为了从非常多的行中提取数据进行分析,只读取少数列。此外,查询所需的内存也仅为处理行式数据块所需内存的一个小部分。

最终,Redshift 被设计为承载 PB 级别的数据,并支持大规模并行数据处理,以便进行高性能查询。

Redshift 架构

Redshift 架构基于一个集群模型,包含以下内容:

  • 领导节点:一个单独的节点,负责管理客户端应用程序与计算节点之间的所有通信。领导节点执行所有操作,比如执行复杂查询所需的步骤——领导节点将编译代码并将其分发到计算节点。

  • 128 个计算节点可以是一个 Redshift 集群的一部分。计算节点执行领导节点提供的已编译代码,并将中间结果返回进行最终汇总。每个计算节点都会有自己的专用 CPU、内存和磁盘类型,这决定了节点的类型:

    • 高密度计算节点:这些节点可以在磁盘上存储最多 326 TB 的数据。

    • 高密度存储节点:可以在固态硬盘SSD)上存储最多 2 PB 的数据。

    • RA3 实例:这一代由 Nitro 技术驱动的计算实例配备了托管存储(与其他先前的节点类型不同)。你可以根据性能需求选择一些节点,并且只为你实际使用的托管存储付费。这种架构将计算和存储组件解耦。此外,数据存储被拆分,本地 SSD 存储用于快速访问缓存数据,而 Amazon S3 则用于提供长期耐久存储,并自动扩展。如果你希望使用托管存储,你需要升级你的高密度计算节点和高密度存储节点。

在本节中,我们向你介绍了 Amazon Redshift 服务,它是一个为OLAP操作设计的云托管数据仓库解决方案。在下一节中,我们将查看 Amazon Redshift 的另一个功能,即 Redshift Spectrum 服务,它允许你直接查询存储在 Amazon S3 中的数据。

关于 Redshift Spectrum

Amazon Redshift 的另一个解决方案是Redshift Spectrum服务,它允许你对直接存储在 Amazon S3 存储桶中的数据执行 SQL 查询。如果你将频繁访问的数据存储在 Redshift 中,而一些不常用的数据存储在 Amazon S3 中,这特别有用。与其将不常用的数据导入 Redshift 并偶尔查询,不如将它们存储在 Amazon S3 中,并使用 Redshift Spectrum,这样会更加经济实惠。

还需要注意的是,S3 中的数据必须是结构化的,你必须定义结构才能使 Redshift 能够使用这些数据。

了解使用 Amazon Elasticache 进行内存缓存选项的重要性

你经常会发现自己定期访问一组数据,这就是我们所说的频繁访问的数据。每次你在数据库上运行查询时,你都在消耗资源来执行查询操作,然后检索数据。总体来说,这会增加数据库的负载,甚至可能影响性能,因为你不断向数据库写入新数据。

作为整体应用架构的一部分,你应该考虑使用 AWS 提供的内存缓存引擎,以减轻主数据库的负载。Amazon Elasticache是一个提供云中内存缓存的 Web 服务。通过在 Amazon Elasticache 上缓存频繁访问的数据,应用程序可以配置从中检索数据,而不是进行更昂贵的数据库调用。

AWS 提供了两种内存缓存引擎,如下所示:

  • Amazon Elasticache for Redis:这是作为集群构建的,集群包含一个或多个缓存节点,所有节点都运行 Redis 缓存引擎软件的实例。Redis 专为复杂数据类型设计,提供多可用区(Multi-AZ)功能、数据加密、符合 FedRAMP、HIPAA 和 PCI-DSS 标准,以及高可用性和自动故障转移选项。

  • Amazon Elasticache for Memcached:这是为简单数据类型设计的。在这里,你可以运行具有多个核心或线程的大型节点并进行横向扩展。它应该在需要对象缓存的地方使用。

在本节中,我们学习了各种 AWS Elasticache 服务,这些服务为我们的应用程序提供了内存缓存功能。内存缓存可以通过缓存频繁访问的数据,而不是反复运行昂贵的查询,来减轻主数据库的负担。在下一节中,我们将了解 AWS 提供的其他数据库,这些数据库解决了特定的细分市场需求。

学习针对特定细分需求的额外数据库服务

除了 Amazon RDS 和 DynamoDB 外,AWS 还提供满足特定应用需求的其他数据库。在本节中,我们将介绍其中的两个数据库:Amazon NeptuneAmazon Quantum Ledger DatabaseQLDB)。

Amazon Neptune 介绍

Amazon Neptune 是一种完全托管的图数据库服务,是一种 NoSQL 数据库。图数据库旨在将数据存储为节点(如人、地点、位置等)和连接。每个节点都有某些属性,节点之间存在关系。例如,Alice 住在 London,而在 London 有一位名叫 Alice 的居民。这是一个简单的例子,但您可以开始想象节点及其关系的复杂性。这些节点之间复杂的关系与数据本身同样重要,非常适合图数据库解决方案。传统的关系型数据库需要您在表之间定义复杂的联接,即便如此,在尝试提取数据时仍会导致低效。

Amazon Neptune 支持广泛使用的图形模型,如属性图和 W3C 的 RDF 以及它们各自的查询语言,如 Apache TinkerPop、Gremlin 和 SPARQL。Amazon Neptune 是一种高可用的数据库解决方案,提供时间点恢复和连续备份到 Amazon S3,并且具有可用区复制功能。Amazon Neptune 的典型应用场景包括欺诈检测、知识图谱、药物发现和网络安全等应用。

Amazon QLDB

某些类型的数据具有高度敏感性,维护数据完整性至关重要。此类数据的例子包括银行交易记录,您需要跟踪借贷历史,或者保险索赔申请,您需要保持可验证的索赔过程历史。另一个例子是必须追踪供应链网络中零部件的流动,并能够证明这些物品到达客户的过程。

虽然您可以使用关系型数据库来托管这些账本类型的数据,但您需要构建审计追踪功能,这可能非常繁琐并容易出错。此外,由于关系型数据库中的数据本身并不是不可变的,因此很难验证数据是否被更改或删除。

一种替代解决方案是构建一个区块链网络。像 Hyperledger Fabric 和 Ethereum 这样的区块链框架使您能够构建去中心化的数据库,其中存储的数据是不可变的,并且可以通过加密方式验证。然而,区块链网络非常复杂,并且设计为去中心化模型,其中包含多个节点,需要在记录提交到数据库之前验证每个记录。

Amazon QLDB 是一项完全托管的分类账数据库服务,允许你在集中式数据库模型中存储不可更改的记录,并且具备加密验证的事务日志功能。Amazon QLDB 可以保持所有数据变更的历史记录。以下是 Amazon QLDB 的主要优势:

  • 不可更改且透明:它使你能够跟踪并维护每次数据变更的序列事务日志(日志)。使用 QLDB 时,事务日志是不可更改的,这意味着它无法被修改或删除。QLDB 跟踪每次应用数据的变更,并保持所有变更的完整且可验证的历史记录。

  • 加密可验证:你可以使用 SHA 256 加密哈希函数生成安全的输出文件,记录数据变更历史。这也被称为 摘要,它作为任何数据变更的证据。它可以验证所有数据变更的完整性。

  • 易于使用:它使用灵活的文档数据模型。你可以使用类似 SQL 的查询语言来查询数据,这种语言被称为 PartiQL。Amazon QLDB 事务符合 ACID 标准。

  • 无服务器:Amazon QLDB 是一项完全托管的数据库服务,无需预配置数据库实例或担心容量限制。你可以通过创建分类账并定义表格来开始。在此过程中,QLDB 会根据应用的需求自动扩展。

在本节中,我们探讨了几个针对特定应用的额外数据库解决方案。在下一节中,我们将介绍 AWS 提供的数据库迁移服务,帮助你将本地数据库迁移到云端。

数据库迁移服务

亚马逊提供 数据库迁移服务 (DMS),可以用于将数据从一个数据库迁移到另一个数据库。通常,这作为从本地到云的迁移策略的一部分,帮助你将位于数据中心的数据库服务迁移到你的 AWS 云账户中。AWS DMS 支持同质迁移(如 MySQL 到 MySQL 或 Oracle 到 Oracle),以及异质迁移(如 Oracle 到 Microsoft SQL Server 或 Amazon Aurora)之间的迁移。

需要注意的一个重要点是,在迁移过程中,你可以继续使用源数据库,这样可以将业务操作的停机时间降到最低。此外,你还可以使用 DMS 执行从本地环境到云端的持续数据复制,以提供高可用性或灾难恢复能力。

练习 8.1 – 扩展你的 VPC 以托管数据库子网

第七章中,AWS 计算服务,你扩展了你的 VPC,以包括私有子网和公共子网。通常,你只会在公共子网中托管需要直接暴露到互联网的服务。例如,之前在第七章中我们部署的堡垒主机服务器(我们将在下一章中讨论)。

大多数应用程序是跨层级部署的——例如,你可以有一个 Web 层,一个应用层和一个数据库层。这些不同的层级旨在将应用程序堆栈的不同组件分离开来,从而实现一定程度的隔离,并从分层安全模型中受益。在第七章中,AWS 计算服务,作为练习 7.1 – 扩展 ProductionVPC,使其包括两个公共子网和两个私有子网,你还在两个可用区配置了两个私有子网来托管你的应用服务器。在这个例子中,应用层和 Web 层是相同的。然而,在许多实际场景中,它们将是分开的。

在本练习中,你将扩展你的 VPC,以添加一个额外的层级,即数据库层,在该层内你将能够启动一个 Amazon RDS 数据库。像 EC2 实例一样,Amazon RDS 也需要在 VPC 中部署。

在下图中,你可以看到你的 VPC 现在有三个层级——一个公共(DMZ)层,用于托管堡垒主机服务器、NAT 网关和弹性负载均衡器,一个应用层,由Private Subnet One – AppPrivate Subnet Two – App子网组成,最后是一个数据库层,由Private Subnet Three – DataPrivate Subnet Four – Data子网组成。请注意,这些子网分布在两个可用区,以便在发生可用区故障时为你提供高可用性服务。我们将在下一章中更详细地讨论高可用性:

图 8.10 – 扩展 VPC 以包括数据库层

图 8.10 – 扩展 VPC 以包括数据库层

让我们开始扩展你的 VPC,使其包括我们的数据库层:

  1. 重新登录到你的 AWS 账户,作为管理员Alice

  2. 导航到VPC仪表板,并确保你位于US-East-1区域。

  3. 在左侧菜单中,点击子网

  4. 接下来,点击屏幕右上角的创建子网按钮。

  5. 你将看到创建子网向导页面。

  6. VPC ID下,从下拉菜单中选择ProductionVPC

  7. 子网设置部分,在子网 1 of 1下,为你的第一个数据库子网提供一个名称。对于本练习,将你的子网命名为Private Subnet Three – Data

  8. 可用区下,选择us-east-1a可用区。

  9. 接下来,处理10.0.5.0/24

  10. 接下来,您无需创建此子网并重复向导来创建第二个数据库子网,只需点击添加新子网按钮,参考以下截图:图 8.11 – 创建多个子网

    图 8.11 – 创建多个子网

  11. 一个新的子节子网 2/2将出现,允许您在同一向导中创建额外的子网。在子网名称下,输入私有子网四 - 数据

  12. 对于可用区,从下拉列表中选择us-east-1b可用区。

  13. 对于10.0.6.0/24

  14. 点击页面底部的创建子网按钮。

AWS 将成功创建两个新子网,您将使用它们来托管 Amazon RDS 数据库。在右侧菜单中,点击子网以查看当前与您的ProductionVPC相关联的所有子网,如以下截图所示:

图 8.12 – 生产 VPC 中的子网

图 8.12 – 生产 VPC 中的子网

现在,您已经为您的ProductionVPC创建了另外两个子网,您可以继续本次练习的下一部分。与 EC2 实例一样,Amazon RDS 数据库也需要您配置必要的安全组,以允许流量进入数据库实例。

在我们的分层安全模型中,我们希望确保只有我们的应用服务器能够与后台的数据库进行通信。在此部分练习中,您将创建一个新的安全组,并配置该安全组以允许来自您稍后部署的任何应用服务器的数据库相关流量。为此,您必须在新的数据库安全组上配置入站规则,以接受来自应用服务器的安全组,特别是来自AppServers-SG安全组的 MySQL 流量(端口3306)。让我们开始:

  1. 确保您当前在VPC仪表板中。然后,在左侧菜单中,点击安全组

  2. 点击屏幕右上角的创建安全组按钮。

  3. 对于Database-SG,在描述中输入允许来自 AppServer-SG 的 MySQL 流量

  4. VPC下,确保从下拉列表中选择ProductionVPC

  5. 接下来,在入站规则部分,点击添加规则按钮。

  6. 类型下,选择MySQL/Aurora

  7. 确保sg-。您应该会看到所有安全组的列表。选择AppServers-SG安全组。

  8. 如有需要,提供可选描述。

  9. 点击屏幕右下角的创建安全组按钮。

AWS 现在会确认安全组已成功创建。

在本次练习中,您扩展了 VPC 以托管两个额外的私有子网,这些子网将用于托管我们的 Amazon RDS 数据库。您还创建了一个新的安全组,允许来自与AppServer-SG安全组关联的任何 EC2 实例的3306流量。

在下一个练习中,我们将配置一个 Amazon RDS 数据库子网组,该组将用于告知 Amazon RDS 可以将我们的数据库部署到哪些子网中。

练习 8.2 – 创建数据库子网组

在您的 VPC 中启动 RDS 数据库之前,您需要定义一个 DB 子网组。DB 子网组是 VPC 中的两个或更多子网的集合,您希望在其内部部署数据库实例。在创建 DB 子网组时,必须在 VPC 中选择至少两个与区域内两个不同可用区关联的子网。Amazon RDS 使用子网组的 IP 地址 CIDR 块为您的 RDS 数据库实例分配 IP 地址。

Amazon RDS 随后可以在您选择的子网中的一个部署数据库实例,该子网是子网组的一部分。在多可用区部署的情况下,主副本将部署在特定可用区内的一个子网中,而备用副本将部署在另一个可用区内的另一个子网中。

请注意,数据库子网组中的子网可以是公共的或私有的,但不能混合使用。理想情况下,您应将私有子网配置为您 VPC 中子网组的一部分,因为您希望在私有子网中部署任何后端数据库。您的数据库应仅可从 Web/应用服务器访问,而不直接从互联网访问。

设置数据库子网组,请按照以下步骤操作:

  1. 确保您已登录为 IAM 用户AliceAWS 管理控制台

  2. 从左上角菜单中,单击服务下拉箭头,选择RDS,位于数据库类别下。这将带您进入 Amazon RDS 仪表板。

  3. 确保您位于us-east-1地区,并从左侧菜单中单击子网组

  4. 接下来,在屏幕的主窗格中,单击创建 DB 子网组按钮。

  5. 在显示的页面上,您需要定义您的数据库子网组详细信息:

    • 为您的数据库子网组提供一个名称;例如,ProductionVPC-DBSubnet

    • 对于描述,键入DB Subnet Group to host RDS Database in Production VPC

    • VPC下拉菜单中,从中选择ProductionVPC

    • 接下来,在可用区域下,选择包含您要添加的子网的可用区。在本练习中,选择us-east-1aus-east-1b旁边的复选框。

  6. 接下来,在10.0.5.0/2410.0.6.0/24的 IPv4 CIDR 块下,如下截图所示:图 8.13 – 创建数据库子网组

    图 8.13 – 创建数据库子网组

  7. 接下来,在屏幕右下角点击创建按钮。

AWS 将使用您提供的详细信息创建您的数据库子网组,如下截图所示:

图 8.14 – 成功创建数据库子网组

图 8.14 – 成功创建数据库子网组

在本练习中,你了解了 RDS 数据库子网组,它允许你定义至少两个子网,跨越两个可用区,当你选择启动数据库时,Amazon RDS 可以在这些子网中部署你的 RDS 数据库实例。

在下一个练习中,我们将启动我们的 RDS 数据库在ProductionVPC中。我们还将使用这个数据库来托管我们网页应用的后端数据,随后在下一章的第四个练习中部署该应用。

练习 8.3 – 在 ProductionVPC 中启动你的 Amazon RDS 数据库

在本练习中,你将启动一个 Amazon RDS MySQL 数据库,在ProductionVPC的数据库子网组中。我们开始吧:

  1. 确保你已经以 IAM 用户Alice登录到 AWS 账户。

  2. 转到 Amazon RDS 仪表板。

  3. 从左侧菜单中,选择数据库

  4. 在面板的右侧,点击创建数据库按钮。

  5. 接下来,你将看到运行 MySQL 引擎的t2.micro数据库实例,作为免费套餐的一部分,提供以下功能,适用于最多 12 个月:

    • 750 小时的 Amazon RDS 在单一可用区 db.t2.micro 实例中。

    • 20 GB 的一般用途存储(SSD)。

    • 20 GB 用于自动备份存储和任何用户启动的数据库快照。

  6. 对于选择数据库创建方式,选择标准创建旁边的选项。

  7. 接下来,在数据库引擎选项中,选择MySQL

  8. 保持版本版本设置的默认值。

  9. 模板下,选择免费套餐选项。

  10. 接下来,你需要提供一些设置:

    • 对于数据库实例标识符,输入productiondb

    • 凭证设置下,保持主用户名admin,并提供你选择的密码。确保记下这个密码,否则你将无法连接到数据库。

  11. 数据库实例类别下,保持默认设置。

  12. 存储下,保持默认设置,除了存储自动扩展,你应该禁用启用存储自动扩展的选项。

  13. 可用性与耐用性下,你会注意到启用多可用区(Multi-AZ)的选项是灰色的。这是因为在免费套餐中,Multi-AZ 不可用。

  14. 接下来,在productionvpc-dbsubnet下。

  15. 3306下。

  16. 数据库认证选项下,确保启用密码认证

  17. productiondb下。

  18. 保持DB 参数组选项组的默认设置。

  19. 备份下,确保启用自动备份,然后将备份保留期设置为1 天

  20. 备份窗口下,选择无偏好选项。对于实际应用,你可能希望将备份窗口设置为非工作时间段。

  21. 维护小节下,保持默认设置。

  22. 最后,点击屏幕右下角的创建数据库按钮。

你的 RDS 数据库将需要几分钟来启动。在启动过程中,还会执行初始备份。一旦数据库成功启动并准备好使用,你将看到它的状态设置为可用,如下截图所示:

图 8.15 – RDS 数据库创建成功通知

图 8.15 – RDS 数据库创建成功通知

在下一个练习中,你将学习如何部署 DynamoDB 表格。

练习 8.4 – 部署 Amazon DynamoDB 表格

在这个练习中,你将部署一个非常简单的 DynamoDB 表格。让我们开始吧:

  1. 确保你已登录到 AWS 账户,且使用的是名为Alice的 IAM 用户。

  2. 接下来,导航到 DynamoDB 仪表板。你可以在AWS 管理控制台的顶部搜索框中搜索DynamoDB

  3. 如果这是你第一次访问DynamoDB 控制台页面,你将看到一个启动画面。

  4. 点击创建表格按钮。

  5. 食谱旁边的文本框中提供一个表格名称。

  6. RecipeName中,确保类型设置为字符串

  7. 表格设置下,取消勾选使用默认设置旁边的框。

  8. 读/写容量模式部分,选择按需选项。

  9. 点击页面底部的创建按钮。DynamoDB 将在几秒钟内为你创建一个新表格,如下截图所示:图 8.16 – DynamoDB 表格 – 食谱

    图 8.16 – DynamoDB 表格 – 食谱

  10. 点击项目标签。

  11. 你可以在项目标签中开始添加项目。点击创建项目按钮。

  12. 你将看到一个对话框,在其中可以向数据库添加新项(记录)。

  13. Vegan Sausage Rolls旁边的文本框中。

  14. 点击保存按钮。

  15. 请注意,新的项已经添加,并且该项的主键值是食谱的名称Vegan Sausage Rolls

  16. 再次点击创建项目按钮。

  17. Vegan Peri Peri Burger旁边的文本框中。

  18. 点击加号并选择配料。你还会注意到,下面的StringSet中出现了一个额外的条目,这就是你输入刚刚创建的字段值的地方。点击空数组行旁边的加号并选择附加

  19. 生菜 西红柿 黄瓜中。点击屏幕的其他部分以更新值,如下截图所示:图 8.17 – DynamoDB 项条目

    图 8.17 – DynamoDB 项条目

  20. 点击保存按钮。

  21. 此时,你的表格已更新了新记录。你将看到表格中有两个项。Vegan Sausage Roll项只有一个字段并且有值,即主键。Vegan Peri Peri Burger项有两个字段与之相关,其中包括主键和一个名为配料的属性。请参考以下截图:

图 8.18 – DynamoDB 配方表

图 8.18 – DynamoDB 配方表

如您所见,DynamoDB 提供了很大的灵活性,不需要在输入数据之前定义严格的模式。

接下来,我们将通过总结本章内容来结束。

总结

在本章中,我们了解了 Amazon 提供的各种数据库服务,包括关系型和非关系型数据库服务。您了解了 AWS 如何使您能够快速部署新的 RDS 数据库,并提供数据库作为服务的完全管理,而不需要您自己配置 EC2 实例并在其上安装数据库软件。

Amazon RDS 提供六种引擎——MySQL、PostgreSQL、Microsoft SQL、Oracle、MariaDB 和 Amazon Aurora。Amazon RDS 是一项区域性服务,必须部署在您的 VPC 中。您可以使用诸如 Multi-AZ 和备份恢复策略等服务来配置高可用性。您还可以扩展 RDS 数据库的只读副本,以减轻主数据库的读取查询负担。

Amazon Aurora 带有更多的功能,并解决了传统 RDS 引擎的一些局限性,包括自我修复和高可用性等功能。

接着,我们了解了 Amazon DynamoDB,这是一种为现代 Web、移动应用和物联网应用设计的非关系型数据库,能够每秒处理成千上万的请求。Amazon DynamoDB 提供完全无服务器的解决方案——您无需自行配置数据库实例或存储。您只需指定WCUsRCUs,AWS 会为您配置底层基础设施。

此外,我们还研究了 Amazon Elasticache 服务提供的两种内存缓存引擎——Redis 和 Memcached——并比较了在不同场景下应使用哪种引擎。

最后,我们考察了 AWS DMS3,它提供了同构迁移(例如 Oracle 到 Oracle 的迁移)和异构迁移(例如 Oracle 到 Microsoft SQL 类型的迁移)。AWS DMS 可以非常轻松地将本地数据库迁移到云端。

在下一章中,我们将讨论与高可用性和可扩展性相关的概念。此外,我们还将进行各种实验,帮助您学习如何结合我们迄今为止学习的各项核心服务。您将通过部署一个多层应用架构来实现这一点。

问题

  1. 一家公司计划将其本地的 MySQL 数据库迁移到 Amazon RDS。他们应该使用哪个 AWS 服务来完成这项任务?

    1. Amazon Snowball

    2. AWS 数据库迁移服务 (AWS DMS)

    3. AWS VM 导入/导出

    4. AWS 服务器迁移服务

  2. 以下哪项是使用 Amazon RDS 数据库而不是在 EC2 实例上安装 MySQL 兼容数据库的主要好处?

    1. 数据库的管理,包括补丁更新和备份,由 Amazon 负责。

    2. 数据库的管理,包括补丁更新和备份,由客户负责。

    3. 你可以完全访问 RDS 数据库运行的操作系统层。

    4. 你可以选择安装 RDS 数据库的驱动器和分区。

  3. AWS RDS 支持六种数据库引擎。以下是支持 Amazon RDS 的 三种引擎。

    1. Microsoft SQL

    2. Oracle

    3. MySQL

    4. FoxPro

    5. Db2

  4. 你正在为一个财富资产管理公司构建应用程序,用于存储股票、共同基金和外汇的投资组合数据和交易记录。因此,你需要一个后端数据库解决方案,以确保类似账本的功能,因为他们希望维护应用程序数据的准确历史记录,例如,跟踪客户的借贷历史。你会推荐哪种 AWS 数据库解决方案来满足这一业务需求?

    1. Amazon RDS

    2. Amazon DynamoDB

    3. Amazon QLDB

    4. Amazon Redshift

  5. 哪种 AWS 数据库解决方案能够帮助你构建一个完整的数据仓库解决方案,能够处理复杂的分析查询,针对 PB 级别的结构化数据,使用标准 SQL 和行业认可的商业智能工具?

    1. AWS DynamoDB

    2. AWS Redshift

    3. AWS Neptune

    4. AWS Pluto

  6. 你希望托管一个生产级的企业关系数据库解决方案,该方案提供高级功能,如自修复存储系统,能够扩展到每个数据库实例 128 TB。以下哪个 AWS 数据库解决方案满足这个需求?

    1. Amazon DynamoDB

    2. Amazon Aurora

    3. Amazon Redshift

    4. Amazon Neptune

  7. 哪个 Amazon Redshift 的 AWS 特性可以让你直接对存储在 Amazon S3 存储桶中的数据执行 SQL 查询?

    1. Redshift DaX

    2. Athena

    3. Redshift Spectrum

    4. Redshift 缓存

  8. 哪项 AWS 服务可以帮助你将本地的 MySQL 数据库迁移到运行 Oracle 引擎的 Amazon RDS 数据库?

    1. AWS 跨区域复制

    2. AWS SMS

    3. AWS DMS

    4. AWS EFS

  9. 你正在运行一个单一的 RDS DB 实例。你会推荐哪种配置,以避免在执行备份时出现 I/O 暂停问题?

    1. 配置 RDS 只读副本。

    2. 配置 RDS 多可用区。

    3. 配置 RDS 跨区域备份。

    4. 配置 DynamoDB DaX。

第九章:AWS 上的高可用性与弹性

大多数应用程序遵循一个设计模式,包含多个层次——例如网络层、计算层和存储与数据库层。我们称之为多层应用程序。例如,你可以拥有一个三层应用程序栈,其中包括提供前端 Web 接口访问的 Web 服务层、一个可能进行所有数据处理的应用层以及一个用于存储和管理数据的后端数据库层。

在本章中,我们将开始将迄今为止学习的各种核心亚马逊网络服务AWS)整合在一起,设计和架构一个完整的端到端E2E)解决方案。此外,在前几章中,我们只部署了各种 AWS 服务的单个资源实例——例如,单个 弹性计算云EC2)实例提供计算能力,或者在上一章中,我们在虚拟私有云VPC)的公有子网中部署了单个亚马逊 关系数据库服务RDS)数据库实例。

在实际场景中,通常需要集成一些组件,以帮助实现高可用性HA)和可扩展性。我们可以通过让多个 EC2 实例为同一应用程序或网站提供服务来提高应用程序的可用性。这样,如果某个 EC2 实例发生故障,用户仍然可以继续访问其他健康的 EC2 实例提供的服务,而不会受到故障或异常实例的影响。我们还可以确保将 EC2 实例分布在多个可用区AZs)中,确保如果某个 AZ 发生故障或仅仅下线,用户可以被重定向到另一个 AZ 中健康的 EC2 实例。

同样,我们需要提供可扩展的解决方案。AWS 提供了可以在需要时自动扩展的服务;例如,当我们注意到流量增加时,可以添加更多 EC2 实例来应对负载。反过来,当需求下降时,相同的 AWS 服务也可以自动缩减规模,使我们能够节省因运行低负载服务器而产生的不必要费用。

最后,我们还需要考虑服务的全球可用性。许多公司有全球客户,尽管许多 AWS 服务是为区域性可用性和可扩展性选项设计的,但其他 AWS 服务可以帮助我们实现全球可用性,甚至提供针对区域性故障的韧性。

在本章中,我们将讨论以下关键概念:

  • 垂直和水平扩展概念简介

  • 开放系统互联OSI)模型概述

  • 使用亚马逊 弹性负载均衡ELB)分配 Web 流量

  • 使用 AWS 自动扩展实现弹性

  • 设计多区域高可用性(HA)解决方案

技术要求

要完成本章及其中的练习,你需要访问你的 AWS 账户,并以Alice身份登录,这是我们在第四章中创建的身份和访问管理IAM)用户(管理员)账号,身份和访问管理

垂直扩展和水平扩展概念介绍

当你在 VPC 中部署某个 EC2 实例时,你需要选择一个实例类型和一个或多个特定大小的弹性块存储EBS)(或实例存储)卷。根据应用需求,EC2 实例始终需要一个根卷和一个或多个数据卷。

然而,偶尔你可能需要升级原有配置——例如,你可能需要更多的内存或更多的中央处理单元CPU),以应对服务器上的负载。你可能会遇到存储空间不足的情况,因此需要增加 EBS 卷的存储容量。将实例升级到更高规格时,我们称之为垂直扩展。要通过这种方式执行大多数升级,通常需要停止处理应用请求,并且大多数情况下,你可能需要先关闭 EC2 实例。

实际的升级可能需要几分钟到几个小时,具体取决于你正在升级的内容。例如,升级实例类型通常涉及关闭服务器、修改实例类型,然后重新启动,如下图所示:

图 9.1 – 更改 EC2 实例类型:垂直扩展

](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_09_01.jpg)

图 9.1 – 更改 EC2 实例类型:垂直扩展

在前面的截图中,你将选择实例类型旁边的下拉箭头,以选择一个更高规格的 EC2 实例类型。选择后,只需点击应用,然后重新启动 EC2 实例。EC2 实例将以升级后的规格启动。

同样,你也可以升级附加到服务器的存储卷,或者附加额外的存储卷。你可以修改现有的存储卷来增加存储大小,或者将存储类型从通用型固态硬盘(gp2)更改为预配置 IOPS(io1)。在升级存储时,AWS 需要执行一些优化任务,这将根据卷的大小需要一些时间。

然而,垂直扩展确实存在一些局限性。它无法提供高可用性(HA);因此,如果 EC2 实例出现问题并发生故障,你将需要提供一个新的 EC2 实例来替换它。

与其让单个 EC2 实例托管你的应用程序,不如考虑托管多个 EC2 实例并提供相同的应用程序服务。这样,如果一个 EC2 实例出现故障,客户可以被重定向到另一个健康状态的 EC2 实例。

通常,你需要多个 EC2 实例参与集群,以应对需求并在任一实例发生故障时提供高可用性(HA)。AWS 提供了一项名为 Auto Scaling 的服务(我们将在本章稍后详细介绍),它可以根据性能参数(例如跨多个服务器的平均 CPU 利用率)自动启动(或终止)EC2 实例,以应对负载。随后启动额外的 EC2 实例来提供相同应用程序的能力称为 水平扩展

通过水平扩展,当需求增加时,你可以向你的 EC2 集群中添加更多实例,而当需求减少时,你可以终止不必要的实例。

这需要仔细的架构设计,因为应用程序需要知道它正在由多个 EC2 实例运行。例如,如果你有两个 EC2 实例运行两个副本的 WordPress 博客,内容数据通常存储在附加到单个 EC2 实例的本地存储中——在这种情况下,是 EBS 卷。如果你还记得 第七章 中的内容,AWS 计算服务 – EC2、Lightsail,EBS 卷一次只能附加到一个 EC2 实例。

重要提示

Amazon EBS Multi-Attach 是一项新功能,它允许你将单个预配置的 IOPS SSD(io1 或 io2)卷附加到位于同一可用区(AZ)中的多个实例。但它有一些限制,并不一定取代 弹性文件系统EFS)卷的使用场景。有关更多信息,请参阅 docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html

这意味着你写的任何博客文章将存储在一个 EC2 实例上,而运行 WordPress 的另一个 EC2 实例将无法访问这些内容,从而导致两个服务器之间的不一致。解决此问题的一种方法是提供一些在 EC2 实例之间共享数据的能力,例如将应用数据托管在 EFS 卷上,EFS 卷可以作为多个 EC2 实例的文件共享。WordPress 应用还需要配置为将所有博客内容和相关媒体存储在这个中央的 EFS 卷上,如下图所示:

图 9.2 – 在应用层启用水平扩展

图 9.2 – 在应用层启用水平扩展

在本节中,我们比较了 AWS 上的垂直扩展和水平扩展选项。垂直扩展是指在现有系统上进行升级,添加更多的 CPU、内存或存储。垂直扩展不提供任何高可用性(HA),因为如果 EC2 实例出现故障,无法切换到另一个实例。水平扩展旨在向你的计算集群中添加更多节点(计算或其他),有助于减少单个实例的整体负载。通过水平扩展,你还可以提供高可用性,这样如果某个节点出现故障,流量可以重新引导到其他健康的节点。

接下来,我们将介绍OSI 模型,它是一个关于应用程序如何通过网络通信,以及网络流量如何从物理层的网络电缆和 Wi-Fi 流动到应用程序本身的参考模型。对该参考模型有广泛的了解,将帮助你更好地理解和协助排查应用程序在网络间的通信问题。

OSI 模型概述

网络流量在各种设备和应用程序之间的流动和分配是通过一个名为OSI 模型的概念来定义的。该模型于 1984 年发布,提供了网络流量如何在特定网络系统中流动的视觉描述。

OSI 模型有七个层级,流动从上至下,层级 7 位于最上层,层级 1 位于最下层。OSI 模型作为一个参考点,被各种供应商用于表明他们提供的产品在哪一层的网络通信上工作。这是因为不同的硬件和软件产品在不同的层级上运行。

OSI 模型还帮助识别网络问题。在分析任何网络问题的源头时,确定是只有单个用户受到影响,还是网络段或整个网络发生故障,有助于识别可能出现故障的设备或媒介。

以下图示展示了 OSI 模型的七个层级:

图 9.3 – OSI 模型

图 9.3 – OSI 模型

在下一节中,我们将讨论 ELB,它在高可用性(HA)和水平扩展的整体设计架构中起着至关重要的作用。

使用 Amazon ELB 分发 Web 流量

当您有多个 EC2 实例作为托管某个应用程序的一个实例池时,您需要一个机制来将流量分配到这些实例上,以便在实例池中分担负载。从最基本的层面来看,这正是亚马逊 ELB 的设计目标。亚马逊 ELB 将流量分配到多个目标,这些目标可以是 EC2 实例、容器、互联网协议IP)地址,甚至是 Lambda 函数。它们可以处理应用程序的变化流量,将负载均匀地分配到这些注册的目标上,无论是在单个 AZ 还是跨多个 AZ 的给定区域内。这也意味着 ELB 可以帮助设计具有高可用性(HA)和容错性的架构,并与像自动扩展(Auto Scaling)这样的服务协同工作,为您的应用程序提供自动扩展功能。然而,请注意,ELB 仅限于区域级别,因此不能使用 ELB 跨区域分配流量。

负载均衡器与 VPC

亚马逊负载均衡器设计用于与您的 VPC 一起工作。AWS 推荐为负载均衡器启用多个 AZ。然后,亚马逊弹性负载均衡ELB)会在您指定的 AZ 中创建负载均衡器节点。负载均衡器将流量分发到其节点,并通过 AZ 跨节点进行分配。节点随后会连接到相关 AZ 中的目标。

这里需要注意的一个重要点是,您的基于互联网的客户端只需连接到负载均衡器,负载均衡器会将流量分发到 VPC 中的目标。这意味着除非有特定的理由,您不再需要将任何目标(如 EC2 实例)放置在公有子网中。您可以将 web 服务器放置在私有子网中,并且由于它们已注册到负载均衡器,流量将被路由到它们。此外,这也意味着您的 web 服务器可以仅使用私有 IP 地址工作,减少了整体的攻击面,因为没有任何公有 IP 地址,正如下面的图所示:

图 9.4 – 亚马逊 ELB VPC 配置

图 9.4 – 亚马逊 ELB VPC 配置

如前图所示,web 服务器将从应用程序负载均衡器ALB)接收流量(我们接下来会讨论负载均衡器的类型)。ALB 将根据为负载均衡器启用的可用区(AZ)的数量,使用默认的轮询方法分配流量。

此外,当您创建负载均衡器时,您需要指定是创建面向互联网的负载均衡器还是内部负载均衡器。这里会有更详细的说明:

  • 面向互联网的负载均衡器—它具有一个可以公开解析的 域名系统DNS)名称,使其能够路由来自基于互联网的客户端的请求。DNS 名称将客户端请求解析到负载均衡器节点的公共 IP 地址。在前面的图中,我们可以看到一个面向互联网的负载均衡器示例,它接受来自互联网客户端的流量。

  • 内部负载均衡器—内部负载均衡器的节点只有私有 IP 地址,其 DNS 名称可解析为节点的私有 IP 地址。这意味着内部负载均衡器只能路由来自已访问 VPC 的客户端的请求。

内部负载均衡器在设计多层应用程序架构时特别有用—例如,当您有多个 Web 服务器接收来自互联网客户端的流量,然后需要通过另一个负载均衡器将流量发送给分布在多个 AZ 中的私有子网中的应用程序或数据库服务器进行处理时。在这种情况下,Web 服务器将注册到面向互联网的负载均衡器,而应用程序/数据库服务器将注册到内部负载均衡器,如下图所示:

图 9.5 – 内部与面向互联网的 ELBs

图 9.5 – 内部与面向互联网的 ELBs

另一个需要注意的重要点是,为了让 ELB 接受流量,您需要配置安全组,指定负载均衡器可以接受的流量的端口、协议和源的入站规则。此外,目标关联的安全组也必须配置为允许来自负载均衡器的入站流量。通常,您可以通过将流量源指定为与负载均衡器本身关联的安全组来实现这一点。

Amazon 提供了四种类型的 ELB,如下所示:

  • ALB

  • 网络负载均衡器NLB

  • 网关负载均衡器GWLB

  • 经典负载均衡器CLB

接下来,让我们分别详细了解这些。

ALB

我们将从 Amazon ALB 开始,这是大多数应用程序常用的负载均衡器类型。ALB 设计用于作为客户端连接到运行在目标上的应用程序的单一入口点,例如一组 EC2 实例。建议您的 EC2 实例分布在多个可用区(AZ)中,以提高在单一 AZ 故障时应用程序的整体可用性。

ALB 设计用于在应用层分发流量(使用 超文本传输协议HTTP)和 安全超文本传输协议HTTPS))。应用层也被称为 OSI 模型的第七层。因此,ALB 非常适合确保在互联网上均匀分配流量到您的 Web 应用程序。

ALB 的一些关键优势包括以下几点:

  • 支持基于路径的路由,允许你根据请求中的 统一资源定位符URL)转发请求

  • 支持基于主机的路由,允许你根据请求中的 URL 转发请求

  • 支持将请求路由到单个 EC2 实例上的多个应用程序

  • 支持将 Lambda 函数注册为目标,以及容器化应用程序等

ALB 有一个配置组件,称为监听器。该监听器服务允许你定义负载均衡器如何将来自客户端的请求路由到注册的目标。这些规则由优先级、动作以及任何满足条件后会执行动作的条件组成。你的监听器应该至少有一个默认规则,且你可以拥有更多的附加规则。这些规则还定义了连接到目标时应使用的协议和端口。

配置 ALB 时,你还需要配置一个或多个 www.mycompany.com)以及另一个目标组,该目标组包含托管你网站实际电子商务部分的目标(例如,shop.mycompany.com)。ALB 的另一个特性是,你还可以将一个目标注册到多个目标组中。

这种方法使你能够更好地管理网站流量,并使用不同的目标确保更好的性能和管理。例如,如果你的电子商务部分正在进行一次重大升级,导致该部分网站暂时无法使用,用户仍然可以访问你网站的公司部分,查看最新的信息或服务,如下图所示:

图 9.6 – AWS ALB 多个监听规则

图 9.6 – AWS ALB 多个监听规则

在前面的图示中,你会注意到我们有三个目标组,其中一个目标属于两个组。目标组 1 可以是我们的主要公司网页,而 目标组 3 则可以是我们的电子商务网站。每个监听器还将包含一个默认规则,右侧的监听器包含一个附加规则,将请求路由到另一个组。

健康检查

除了定义监听器规则来将流量路由到目标组内的适当目标外,ALB 还会对你的目标进行健康检查,以判断它们是否处于健康状态。如果某个目标(例如 EC2 实例)在基于健康检查设置的预定义请求范围内没有响应,它将被标记为不健康,ALB 会停止向其发送流量,将流量重定向到那些处于健康状态的目标。

通过这种方式,最终用户始终会被引导到功能正常并响应 ALB 的 EC2 实例(或其他任何目标),从而减少他们遇到故障的机会。

流量路由

在将流量路由到目标组中的各个目标时,ALB 默认使用轮询方法,但你也可以配置基于最少未完成请求LOR)的路由算法。

如前所述,我们在电商商店的示例中使用 ALB 将流量分配到两个目标组。第一个目标组将托管提供公司网站访问的 EC2 实例(www.mycompany.com),第二个目标组可能托管电商部分(shop.mycompany.com)。这也被称为wwwshop。除了基于主机的路由,ALB 还可以用于以下用例:

  • mycompany.com/store 用于寻找购买产品的用户,另一部分流量则转发到 mycompany.com/blog,为寻找阅读最新市场趋势文章的用户提供服务。

  • 主机头条件—这允许你根据请求 URL 中的字段来路由流量,例如查询模式或源 IP 地址。

  • 在单个 EC2 实例上运行多个应用—这允许你在同一个 EC2 实例上注册多个应用,并使用不同的端口号。

  • 支持通过 IP 地址注册目标—这允许你将 ALB 的流量重定向到使用私有 IP 地址的本地服务器,通过 虚拟私人网络VPN)隧道或 Direct Connect 连接。

  • 支持将 Lambda 函数注册为目标—这允许你将 Lambda 函数配置为目标。任何转发的流量都会调用 Lambda 函数,并传递任何 JavaScript 对象表示法JSON)格式的内容。

  • 支持容器化应用—包括 弹性容器服务ECS),你可以在其中调度并将任务注册到目标组。

在本节中,我们讨论了如何使用 ALB 路由流量,并查看了不同的用例。接下来,我们将探讨 ALB 的一些安全功能。

ALB 和 WAF

亚马逊还提供了多种安全工具,我们将在后续章节中详细讨论。其中一个工具是 Web 应用防火墙WAF),它帮助防护常见的 Web 漏洞,如 SQL 注入和 跨站脚本XSS)。亚马逊 ALB 提供了 WAF 集成功能,帮助你保护应用免受这些常见的 Web 攻击。

NLB

NLB 旨在 OSI 模型的第四层操作,并能够处理每秒数百万个请求。NLB 设计用于负载均衡 传输控制协议TCP)和 用户数据报协议UDP)流量,并保持超低延迟。使用 NLB 时,你可以保留客户端的源 IP,允许你的后端服务看到客户端的 IP 地址,这可能是应用程序正常运行所需的。

NLBs 还提供对静态 IP 地址和弹性 IP 地址的支持,后者允许您为每个可用区(AZ)配置一个固定 IP。这可能是您的应用程序的需求,因此您需要使用 NLBs。

NLBs 不会检查应用层,因此无法识别内容类型、Cookie 数据或任何自定义头信息。

NLBs 的一些主要优势包括:

  • 能够处理波动的工作负载并处理每秒数百万个请求。

  • 支持为您的负载均衡器配置静态 IP 地址,并为每个子网配置一个弹性 IP 地址。

  • 您可以通过 IP 地址注册目标——这使您可以注册 VPC 外的目标,例如您本地环境中的目标。

  • 支持使用多个端口将请求路由到单个实例上的多个应用程序。

  • 支持容器化应用程序,例如运行在 Amazon ECS 上的应用程序。

在本节中,我们讨论了 NLBs 并了解了它们的各种使用场景,特别是在需要支持每秒数百万个请求并且在 OSI 模型的第四层通过 TCP 和 UDP 协议进行操作时。在下一节中,我们将介绍 GWLBs,旨在让您能够在 AWS Marketplace 上分发流量到各种软件设备。

GWLB

在允许流量进入您的 VPC 之前,您可能希望对该流量进行安全检查和分析,以阻止任何可疑活动。通常,您可以在 EC2 实例上部署自己的安全工具来检查流量,或者从 AWS Marketplace 采购第三方工具,例如防火墙、入侵检测系统/入侵防御系统IDSes/IPSes)等。借助 Amazon GWLBs,管理通过这些第三方工具路由的流量变得更加容易。

Amazon GLWB 可以管理这些第三方虚拟设备的可用性,并充当所有流量进入和退出这些服务的单一入口和出口点。这使您能够扩展可用性,并在您的虚拟设备集群之间进行负载均衡流量。GWLB 在 OSI 模型的第三层(网络层)操作,并通过6081与虚拟设备交换应用流量。流量在两个方向上发送到设备,允许其执行有状态的流量处理。

CLB

Amazon CLB 是上一代 ELB,设计用于在 OSI 模型的第 4 层和第 7 层操作,但不具备 ALB 所提供的扩展功能,也无法提供 NLB 所能期待的吞吐量。CLB 使您能够在单一可用区或跨多个可用区分发流量到 EC2 实例。它们非常适合测试和非生产环境,或者如果您现有的应用程序正在EC2-Classic 网络模式下运行。

在这一部分,我们讨论了 Amazon ELB,它使你能够将传入的流量集中分发到多个目标,例如提供 Web 应用访问的 EC2 实例集群。Amazon ELB 还可以对目标进行健康检查,并将流量从不健康的目标重定向到响应正常且健康的目标。这减少了最终用户因不小心连接到不健康的实例而导致的停机风险。

Amazon ELB 最终帮助你设计高可用性(HA)架构,并支持与 Amazon Auto Scaling 一起的可扩展性功能,我们将在下一部分中讨论这一点。

使用 Amazon Auto Scaling 实现弹性

AWS 上最令人惊叹的服务之一就是当需求增加时能够自动扩展工作负载,需求下降时则自动缩减。这项服务是作为各种核心技术的一部分提供的——例如,计算服务如 EC2 和数据库服务如 DynamoDB。

自动扩展响应特定条件,如需求增加(例如,当 EC2 实例集群的平均 CPU 利用率超过 70% 的阈值时),可以帮助在最需要时提供额外的容量。然而,你并不会被新集群的大小所束缚。你可以配置 Auto Scaling,使得如果需求下降至特定阈值以下,它会终止 EC2 实例,从而 节省成本。接下来我们将详细探讨 EC2 实例的自动扩展。

Auto Scaling 是一个区域服务,你可以跨 AZ 扩展,允许你在指定区域内跨 AZ 启动 EC2 实例,以实现 高可用性(HA)弹性

在下图中,我们可以看到两个额外的 EC2 实例被添加到跨 AZ 的集群中,分别是 2A2B。这是由于平均 CPU 利用率上升至 80% 以上。一旦新实例加入集群,平均 CPU 利用率应该开始下降,因为现在负载被分配到六个实例,而不是原来的四个实例:

图 9.7 – Auto Scaling 服务示例

图 9.7 – Auto Scaling 服务示例

Amazon Auto Scaling 帮助你根据需求按需配置 EC2 实例,并在资源需求下降至或低于某个阈值时终止这些实例。使用 Amazon Auto Scaling,你无需进行复杂的容量规划。接下来,我们将介绍 Amazon Auto Scaling 服务的一些核心组件。

自动扩展组

当你配置 Auto Scaling 时,你会定义一个叫做自动扩展组的集合。这个自动扩展组将监控和管理你的 EC2 实例集群。作为配置的一部分,你需要定义以下内容:

  • EC2 实例的最小数量—这是组的最小规模,自动伸缩将确保你的 EC2 实例数量不会低于此值。如果某个实例出现故障,导致实例总数低于此值,自动伸缩服务将启动额外的 EC2 实例。

  • 期望的 EC2 实例数量—如果你指定了期望的容量(通常是因为你知道在此值下,用户的体验是最优的),那么自动伸缩服务将始终确保你拥有与期望容量相等数量的 EC2 实例。请注意,期望数量可以与最小数量相同,这意味着自动伸缩服务会确保你始终拥有这个最小数量的 EC2 实例。

  • EC2 实例的最大数量—这是集群的最大规模。你需要指定希望扩展到的最大规模。这也意味着自动伸缩不会部署超过最大数量的实例,比如如果运行在这些实例上的应用出现错误导致不必要的扩展。

在下图中,我们可以看到 Amazon 自动伸缩如何根据你的自动伸缩组配置,提供期望数量的 EC2 实例,并根据需要扩展到 EC2 实例的最大数量:

图 9.8 – 自动伸缩组

图 9.8 – 自动伸缩组

自动伸缩服务将根据你定义的参数启动和/或终止 EC2 实例作为组的一部分,然后根据你设置的伸缩策略进行扩展或缩减。你还需要定义如何对组内的 EC2 实例进行健康检查—这可以是自动伸缩服务自行执行健康检查,或者使用与 EC2 实例注册的 ELB 健康检查服务。根据健康检查的结果,你的伸缩策略将相应触发。

配置模板

要设置 AWS 自动伸缩,你需要配置启动模板启动配置。配置模板使你能够定义组内启动的 EC2 实例的规格。例如,模板将定义亚马逊机器镜像AMI标识符ID)、实例类型、密钥对、安全组和块设备映射。

在配置模板中,你还可以定义启动时运行的脚本,称为引导程序,它将允许你在可能的情况下自动配置 EC2 实例,以便它能参与现有实例的集群。例如,在 EC2 实例启动时,你可以配置它使用 Apache Web 服务,使其充当 Web 服务器。这些脚本可以在模板的用户数据部分定义,可以使用Bash编写 Linux 操作系统OS)的脚本,或使用PowerShell编写 Windows 操作系统的脚本。它们在这里有更详细的描述:

  • 启动配置—启动配置是一个基本模板,你可以在其中指定实例的信息,如 AMI ID、实例类型、密钥对和安全组。你可以将启动配置与多个 Auto Scaling 组关联,但每次只能为一个 Auto Scaling 组启动一个特定的启动配置。此外,一旦你定义了启动配置的参数,就无法更改它,如果需要修改,必须重新创建启动配置。

    启动配置是定义 Auto Scaling 组配置模板的原始方式,虽然仍然可用,但亚马逊现在不再推荐使用它。相反,建议使用启动模板,它提供了更多的功能和灵活性,我们接下来会详细介绍。

  • gp3io2EBS 卷标签弹性推理专用主机。不能使用启动配置来设置专用主机。

启动模板是配置用于启动 EC2 实例的模板的首选选项,因为它们提供了更多的灵活性。接下来,我们将探讨不同的扩展选项,以适应不同的使用场景。

扩展选项

Auto Scaling 服务的最后一个配置组件是确定你的扩展策略。扩展是指自动增加或终止计算能力,以满足最终用户的需求和应用程序的负载。扩展操作是由事件触发的——例如,服务器集群中的平均 CPU 使用率在过去 20 分钟内超过了 80%,用户将开始体验到性能下降。基于这个事件,Auto Scaling 可以配置为启动一个或多个 EC2 实例,将平均 CPU 使用率降低到 60% 以下。

根据你的业务使用场景,你可以选择多种扩展选项,如下所述:

  • 始终保持当前实例水平—你的扩展选项可以配置为保持 EC2 实例的数量不变,在这种情况下,你不会进行扩展或收缩;而是 AWS Auto Scaling 会替换任何失败或不健康的 EC2 实例,以保持集群的规模。

  • 手动扩展—你可以更改最小、最大和所需的实例数量,Auto Scaling 会根据你的更改做出必要的调整。

  • 基于计划的扩展—你可以配置 Auto Scaling 在预定的时间表上自动启动新的 EC2 实例或终止现有实例,指定一个日期和时间来执行扩展操作。例如,一个大型工资公司可以在每月的第三周扩展运行工资应用程序的 EC2 实例数量,因为客户需要在特定的截止日期之前提交所有工资数据。在其他周,工资公司可以使用少量实例,并仍能提供最佳的客户体验。

  • 动态扩展(按需扩展)—当无法预测需求时,这是理想的选择。动态扩展将在发生事件时触发,例如 CPU 利用率长时间超过预定义的阈值。类似地,如果需求下降,你可以自动缩减资源。动态扩展有三种不同的形式,具体如下:

    • 目标跟踪扩展策略—Auto Scaling 会根据特定指标的目标值来启动或终止 EC2 实例。例如,如果你知道平均 CPU 利用率 45% 对于最终用户体验是理想值,而任何高于该阈值的情况都会影响性能,那么你可以将 CPU 利用率的目标跟踪扩展策略设置为 45%。如果应用程序的需求增加,导致该指标上升,那么将启动额外的 EC2 实例。类似地,如果需求下降,导致该指标远低于 45%,Auto Scaling 可以终止 EC2 实例。你可以将目标跟踪扩展策略比作家庭温控器,它试图保持理想的室内温度。

    • 步进扩展—在这种情况下,容量的增加或减少基于一系列步进调整,其中阈值超出程度决定了扩展的量。

    • 简单扩展—在这种情况下,容量根据单一的扩展指标增加或减少。

  • 预测性扩展—一种更高级的扩展形式,使用负载预测计划扩展操作最大容量行为。最大容量行为使你能够覆盖实例池中的最大实例数,如果预测的容量超过了该最大容量值。

在本节中,我们介绍了 AWS Auto Scaling 服务,它使你能够在指定区域内自动扩展计算资源(以及其他资源,如数据库),跨多个可用区(AZ)进行扩展。你可以根据需求扩展或缩减资源,确保始终拥有足够的资源提供最佳的最终用户体验。当需求较低时自动缩减资源,还能确保有效的成本管理。

在下一节中,我们将探讨如何提供全球高可用性和容错机制,以支持你应用程序所依赖的 AWS 资源。

设计多区域高可用性解决方案

第六章AWS 网络服务 – VPCs、Route53 和 CloudFront 中,我们探讨了 Amazon Route 53,它提供 DNS 和流量路由策略,帮助设计具有高可用性和韧性的架构,包含提升性能和安全性最佳实践的配置。我们还探讨了 Amazon CloudFront 如何帮助在靠近最终用户的位置缓存内容,从而减少延迟并提高整体性能。

虽然 Amazon Auto Scaling 和 ELB 服务帮助你在给定区域内提供高可用性和可扩展的服务,但它们本身并不提供全球服务的可用性。如果你仅在单个区域托管应用程序,并且该区域发生故障,最终用户将无法访问你的应用程序,直到该区域恢复在线并提供资源。

然而,像 Route 53 和 CloudFront 这样的服务使你能够扩展应用程序的可用性,使其在全球范围内更加可靠。在本节中,我们将探讨一种在你的主要区域发生重大故障时提供全球可用性的选项,尤其是当你可能拥有全球客户群时。

具体来说,Amazon Route 53 提供了几种路由策略,其中一种被称为故障转移路由策略,它帮助你为应用程序的可用性设计一个主动/被动配置。

在下图中,我们将在两个可用区(AZ)中部署两个应用副本。然后,我们使用 故障转移 路由策略配置 Amazon Route 53,其中你的网站主版本部署在伦敦区域,副本部署在悉尼区域。以下图示和相关关键点展示了提议的架构:

图 9.9 – 配置了故障转移路由策略的 Route 53,启用应用架构的主动/被动解决方案

图 9.9 – 配置了故障转移路由策略的 Route 53,启用应用架构的主动/被动解决方案

在前述图示中,我们有一个 基于伦敦区域的主站点,其部署如下:

  • EC2 实例作为 Auto Scaling 组的一部分进行部署。在伦敦区域(我们的主站点),我们有一个期望/最小容量为四个 EC2 实例,可以根据需求扩展至最多六个 EC2 实例,以支持需求。

  • 流量通过 ALB 分发到伦敦区域内两个可用区(AZ)中的 EC2 实例。这些流量源自互联网的最终用户,通过 Route 53 路由。

  • Route 53 对主站点执行健康检查。健康检查通过 ALB 对每个 EC2 实例进行,如果主站点可访问,Route 53 会继续将流量仅指向主站点。

  • 如果发生区域故障,或者如果 Auto Scaling 组未能保持负载均衡器后面的 EC2 实例健康,Route 53 会将该站点标记为不健康并执行故障转移。

  • 在故障切换过程中,Route 53 会将所有流量重定向到悉尼的备用站点,如图 9.9中右侧的黄色虚线流量所示。

  • 当流量被重定向到备用站点时,虽然最初可能只有最少数量的实例,但 Auto Scaling 可以根据需求扩展节点数量,直到达到指定的最大实例数。

上述示例和图表说明了我们如何将 Auto Scaling 和 ALB 等区域服务与 Route 53 等全球服务结合,设计一个高可用且具备弹性的应用程序架构。

在这一节中,我们学习了如何使用 ELB 和 Route 53 服务来设计提供多区域高可用性(HA)选项的应用程序解决方案。

在下一节中,我们将通过一系列实践练习,帮助你配置迄今为止学到的各种服务,包括 IAM、简单存储服务S3)、VPC、EC2、RDS、ELB 和 Auto Scaling,以构建一个二层应用程序解决方案。这个二层应用程序解决方案将包括一个 Web/应用层和一个后端数据库层。

为了完成接下来的练习,确保你已经完成了所有之前章节中的所有练习非常重要。此外,要完成练习,你需要访问应用程序的源代码文件,这些文件可以在Packt Publishing的 GitHub 仓库中找到:github.com/PacktPublishing/AWS-Certified-Cloud-Practitioner-Exam-Guide

最后,在执行每个练习时,你将提供一些背景信息,帮助你理解架构以及部署背后的原因。所有练习需要在us-east-1区域完成,这里是你已经构建了生产 VPC并托管RDS 数据库的地方。

对于所有练习,请确保你已登录到 AWS 账户,并以我们的 IAM 用户Alice身份进行操作。

扩展练习 – 场景设定

即将进行的练习基于以下场景。你为一个虚构公司The Vegan Studio工作,该公司属于酒店行业。具体来说,该公司在美国US)经营着一系列咖啡馆和餐厅,专为那些想要享受无肉菜肴的顾客提供纯素食菜品。公司在全球拥有超过 4000 名员工,保持员工的参与感并让大家感觉像一个大家庭是公司引以为傲的一项成就。

每年,他们会为员工举办几场比赛。今年,他们正在举办一个本月我的好事比赛。一位开发人员设计了一个 Web 应用程序,您现在需要在 AWS 的us-east-1区域以高可用性和可扩展性的方式部署它。比赛将持续一个月,鼓励所有员工提交他们完成的任何好事的声明。将从参赛作品中选择五位获奖者,并授予特别礼品篮。参与者如果需要,必须备份他们的好事证据(只是为了确保没有人在耍花招)!

接下来,我们将引导您完成一系列练习,部署由您的开发人员设计的具有 HA 和可扩展性特性的应用程序。

重要提示

一些 AWS 服务,如 ELB 和网络地址转换NAT)网关,会产生费用。我们建议您尽快完成所有练习,然后在最后执行清理练习。总体而言,成本不会超过 $5. 为了确保成本最低,我们不会为您在前一章节部署的 RDS 数据库配置多可用区。

下面的练习将使用一个多层应用程序设计,将部署在您之前在前几章节中构建的生产 VPC中。请回想一下,该 VPC 包括公共子网和私有子网,跨越两个可用区。在前几章节中,您已经构建了以下基础架构如下图所示:

图 9.10 – 部署“每月好事”竞赛应用程序之前的生产 VPC 架构

图 9.10 – 部署“每月好事”竞赛应用程序之前的生产 VPC 架构

根据之前的图表,您当前的架构包括以下主要 AWS 服务和资源:

  • us-east-1区域创建了一个 VPC,跨越两个可用区的公共和私有子网。私有子网已被设计用于支持一个两层应用程序解决方案,包括 Web/应用程序层和数据库层。

  • 公共子网通常用于部署遥控管理和 NAT 网关的堡垒主机。在即将到来的一系列练习中,我们不会部署任何堡垒主机,因为这在这些练习中是不需要的。但是,我们将修改堡垒主机安全组以允许入站22端口。

  • 应用程序层的私有子网目前没有部署任何 EC2 实例。

  • 数据库层的私有子网目前托管在us-east-1a可用区中的单个实例 MySQL RDS 数据库。

通过本章的即将到来的练习,我们将在架构上建立一个具有 HA 和可扩展性特性的全功能应用程序解决方案。

练习 9.1 – 设置 Amazon S3 存储桶以托管源文件

在本次练习中,您将首先创建一个 Amazon S3 存储桶,用于托管您的应用程序的源文件。您需要先下载源文件,该文件以 ZIP 文件夹格式提供,并将其内容解压到一个新文件夹中或直接解压到电脑桌面,方便访问。

第一步是准备您的源代码文件。您的源代码文件包含一个数据库连接文件,您需要修改该文件以连接到您在上一章中配置的特定 RDS 数据库。请按照以下步骤操作:

  1. 一旦解压下载的文件夹,您可以看到 vegan-php-files 文件夹的内容,如下图所示:图 9.11 – vegan-php-files 源代码

    图 9.11 – vegan-php-files 源代码

  2. 您会注意到,在 v5 目录中,有一个名为 db 的文件,它是 PHP: 超文本预处理器 (PHP) 文件。此文件包含默认的数据库连接字符串,您需要在将源代码上传到 S3 存储桶之前先修改此文件。具体来说,您需要提供 RDS 数据库连接详细信息,包括 RDS 端点 DNS 名称、主用户名、密码和数据库名称。回忆一下,您在上一章中已经记下了这些值

  3. 在记事本或文本编辑工具中,打开 v5 文件夹中的 db.php 文件。

  4. 在 PHP 文件中,您需要用适当的数据库连接值编辑占位符的值。在以下截图中,您将看到这些占位符:图 9.12 – db.php 文件

    图 9.12 – db.php 文件

  5. 您需要用数据库连接的详细信息替换占位符,并确保所有值都放在单引号内。不要对代码做其他任何更改。以下是您在创建数据库后可以获得这些值的截图。数据库端点在主连接与安全选项卡中可见,用户名和数据库名称则位于配置选项卡中。请注意,密码不可见,因为您在启动数据库实例时应该已经记下了它:图 9.13 – Amazon RDS 数据库设置

    图 9.13 – Amazon RDS 数据库设置

  6. 将文件保存在原位置。

  7. 登录到您的 AWS 管理控制台,并导航到 Amazon S3 仪表板。

  8. 在左侧菜单中点击存储桶

  9. 在仪表板的右侧窗格中点击创建存储桶

  10. 对于 vegan-good-deed,请确保选择的区域是 us-east-1 区域。

  11. 滚动到页面底部,保持所有设置为默认值,并点击创建存储桶按钮。您的 Amazon S3 存储桶将被创建,并且您将被重定向回可用存储桶的列表页面。

  12. 点击刚刚创建的存储桶,您将被重定向到对象列表页面,您将注意到目前没有对象,如下面的截图所示:图 9.14 – 新建存储桶创建

    图 9.14 – 新建存储桶创建

  13. 点击上传按钮。

  14. 接下来,您需要尝试调整浏览器页面的大小,以便与 S3 存储桶vegan-php-files文件夹轻松拖放所有文件和文件夹到 S3 存储桶的对象区域,如下面的截图所示。您需要确保应用程序的文件夹层次结构得以保持:图 9.15 – 复制文件和文件夹到 S3 存储桶

    图 9.15 – 复制文件和文件夹到 S3 存储桶

  15. 您的 Amazon S3 上传页面将提供要上传的文件和文件夹的摘要。然后,您需要点击页面底部的上传按钮。

  16. 一旦所有文件和文件夹都上传完成,您将收到上传成功的消息。

现在您的应用程序的源代码和文件已上传完毕,我们将继续下一个练习。作为这一系列练习的一部分,您需要配置您的 EC2 实例以下载应用程序的源代码文件。在启动 EC2 实例时,使用 Bash 脚本从 Amazon S3 存储桶下载源代码,并将其放置在 EC2 实例中适当的文件夹中以提供应用程序服务。

因为您的 EC2 实例需要访问我们创建的前一个 S3 存储桶并下载源代码,所以我们需要配置一个 IAM 角色,您的 EC2 实例将使用该角色来进行 Amazon S3 的身份验证。

练习 9.2 – 创建 IAM 角色

在这个练习中,您将创建一个 IAM 角色,您的 EC2 实例将使用它来进行身份验证并访问您 Amazon S3 存储桶中的源代码文件。请按以下步骤进行:

  1. 确保您已登录到您的 AWS 帐户并导航到 IAM 仪表板。

  2. 从左侧菜单中点击角色

  3. 点击创建角色,如下面的截图所示:图 9.16 – 创建 IAM 角色

    图 9.16 – 创建 IAM 角色

  4. 选择信任实体类型字段中,点击AWS 服务选项,并在选择用例下的常见用例中选择EC2

  5. 点击页面底部的下一步:权限按钮。

  6. S3。接下来,选择AmazonS3ReadOnlyAccess策略,然后点击下一步:标签按钮,如下面的截图所示:图 9.17 – 创建 IAM 角色(续)

    图 9.17 – 创建 IAM 角色(续)

  7. 设置一个键值对以使用EC2-to-S3-Read-Access作为键来标记您的角色。这使我们可以轻松识别这个角色。点击页面右下角的下一步:审阅按钮。

  8. EC2-to-S3-Read-Access,以及一个描述。

  9. 最后,点击创建角色按钮。

AWS 将创建您的 IAM 角色,您将在稍后的章节中启动 EC2 实例时引用此角色。

在此阶段,您已经配置了以下 AWS 服务:

  • 一个包含公共和私有子网的 Amazon VPC,跨越两个可用区(AZ)。您有一个公共子网来托管堡垒主机和 NAT 网关,四个私有子网——两个用于您的Web/应用层的 Web/应用服务器,另外两个用于您的数据库层

  • 一个 RDS 数据库,将存储所有数据,例如 The Vegan Studio 员工提交的本月好事

  • 一个配置为指向 RDS 数据库的 Amazon S3 存储桶,存储源代码文件。

  • 一个 IAM 角色,允许您的 EC2 实例从 S3 存储桶下载源代码文件。

当您部署应用程序时,您将安装 Apache Web 服务,并在 EC2 实例上托管您的应用文件。具体而言,您将部署两个 EC2 实例,这些实例将分布在两个可用区(AZ)中。为了在这些 EC2 实例之间分配流量,您需要配置一个 ALB,该 ALB 将配置为接受来自互联网的入站 HTTP(端口80)流量,并将它们分发到您的 EC2 实例。在下一个练习中,您需要配置您的 ALB。

练习 9.3 – 配置 ALB

在本练习中,您将配置一个 ALB,该 ALB 将用于接受来自互联网的用户的入站流量,并将其分配到您稍后在本章中部署的 EC2 实例。

如本章前面所述,ALB 可用于使用 HTTP 和 HTTPS 协议分配 Web 和应用流量。您将配置一个面向互联网的负载均衡器,以便能够接受来自互联网的入站请求。

CLB 和 ALB 需要您还配置一个安全组,在该安全组中您定义允许哪些流量入站到这些负载均衡器。因此,第一步是返回 VPC 仪表盘并为您的 ALB 创建一个新的安全组,如下所示:

  1. 转到 VPC 仪表盘,并确保您仍在us-east-1区域。

  2. 从左侧菜单中,点击安全组

  3. 点击屏幕右上角的创建安全组按钮。

  4. 提供一个名称,如ALB-SG,以及描述,如允许来自互联网的 HTTP 入站流量

  5. 确保从 VPC 下拉列表中选择ProductionVPC

  6. 点击添加规则按钮,在入站规则下。

  7. 对于0.0.0.0/0,该源表示公共互联网。

  8. 提供一个可选的描述,然后点击屏幕右下角的创建安全组按钮。

AWS 将创建您的安全组,我们将用它来配置我们的 ALB。

重要提示

ELB 不包括在 AWS 的免费套餐中,您必须确保在完成所有实验后删除它们。

既然我们已经配置了安全组,就可以继续配置我们的负载均衡服务了。然而,你的 ALB 需要一个目标组来发送流量。目标组将用于注册那些将接受 ALB 流量的 EC2 实例。因此,第一步是创建目标组,如下所示:

  1. 导航到 EC2 仪表板,并确保你处于us-east-1区域。

  2. 从左侧菜单中,点击目标组,位于负载均衡菜单下。

  3. 从右侧面板中,点击创建目标组

  4. 接下来,你将看到一个两步向导。在步骤 1中,选择Production-TG

  5. 80下设置。

  6. 接下来,在Production-VPC下设置。

  7. 向下滚动,直到你到达健康检查部分。

  8. 接下来,设置健康检查协议HTTP

  9. 对于/health.html,如以下截图所示:图 9.18 – 负载均衡器目标组健康检查

    图 9.18 – 负载均衡器目标组健康检查

  10. 接下来,展开高级健康检查设置字段。

  11. 设置端口值为流量端口

  12. 设置为3

  13. 设置为2

  14. 接下来,设置为2

  15. 最后,设置为10秒。

  16. 点击页面底部的下一步按钮。

  17. 这将引导你到步骤 2,在这里你通常会注册任何 EC2 实例。然而,由于我们还没有启动任何 EC2 实例,你可以忽略这一步,直接点击页面底部的创建目标组按钮。

    接下来,既然我们已经配置了目标组,我们可以启动我们的 ALB。ELB 可以通过 EC2 管理控制台或命令行接口CLI)进行配置。

  18. 从左侧菜单中,点击负载均衡器,位于负载均衡类别下。

  19. 接下来,点击屏幕右侧面板顶部的创建负载均衡器按钮。

  20. 在页面的应用负载均衡器部分,点击创建按钮,如下图所示:图 9.19 – 选择应用负载均衡器作为负载均衡器类型

    图 9.19 – 选择应用负载均衡器作为负载均衡器类型

  21. Production-ALB下设置。

  22. 确保Production-VPC位于us-east-1aus-east-1b AZ 区域。

  23. us-east-1a AZ 中,选择us-east-1b AZ,选择公共子网二子网。

AWS 会将 ALB 节点部署在这些公共子网中,将来自互联网的流量路由到我们注册为负载均衡器目标的私有子网中的 EC2 实例。面向互联网的负载均衡器应创建在已配置有互联网网关的子网中,例如此情况下:你的 VPC 的公共子网。

  • 接下来,从下拉列表中选择ALB-SG安全组。你还可以删除ALB-SG安全组。* 在80端口下。接下来,从下拉列表中选择你之前创建的Production-TG目标组。* 最后,向下滚动并点击创建负载均衡器按钮。* 你将收到一条确认消息,表示负载均衡器已成功创建。点击列表中的Production-ALB负载均衡器。片刻后,负载均衡器的状态应从正在配置变为活动

此时,我们已经配置好了 ALB。接下来,让我们查看一下架构图,看看我们的配置进展如何:

图 9.20 – 配置 S3 桶、IAM 角色和 ALB 后的生产 VPC 架构

图 9.20 – 配置 S3 桶、IAM 角色和 ALB 后的生产 VPC 架构

为了允许流量进入应用服务器,我们需要确保与这些服务器关联的安全组已正确配置。具体而言,AppServers-SG安全组必须允许来自我们在前面练习中部署的 ALB 的 HTTP 协议流量(端口80)。

此外,在第七章中,AWS 计算服务,你已将AppServers-SG安全组配置为接受来自BastionHost-SG安全组的流量。这是为了允许3389端口上的入站流量,从而使 Windows 远程桌面客户端能够执行远程访问操作。虽然在本章剩余的练习中我们将不会部署任何堡垒主机,但我们将修改AppServers-SG安全组中的入站规则,使其接受来自BastionHost-SG安全组的流量时,协议和端口设置为 SSH 协议的端口22。这是因为我们将部署 Linux EC2 实例来托管我们的应用程序,任何 Linux 服务器的远程管理都需要配置 SSH 访问。

练习 9.4 – 修改生产 VPC 安全组

在本练习中,我们将修改AppServers-SG安全组中的 RDP 入站规则,使其配置为接受来自BastionHost-SG安全组的 SSH 协议(端口22)流量。接下来,我们将添加一条新规则,接受来自 ALB 安全组ALB-SG的 HTTP 协议(端口80)流量。最后,我们将修改BastionHost-SG安全组,使其配置为接受来自互联网的 SSH 协议(端口22)流量。这对于稍后希望对 Linux 服务器进行任何远程管理时非常有用。

修改BastionHost-SG安全组,步骤如下:

  1. 转到 VPC 仪表板,并确保你位于us-east-1区域。

  2. 从左侧菜单中点击安全组

  3. 在中间面板中,勾选BastionHost-SG安全组旁边的复选框。

  4. 在下方的窗格中,点击入站规则,然后点击编辑入站规则按钮。

  5. 接下来,通过点击页面最右侧的删除按钮,删除现有的RDP规则。

  6. 点击添加规则按钮。

  7. 在类型字段中,选择0.0.0.0/0

  8. 最后,点击AppServers-SG安全组。

  9. 再次点击左侧菜单中的安全组链接,以查看 VPC 中的所有安全组。

  10. 在中间的窗格中,选中AppServers-SG安全组旁边的复选框。

  11. 在下方的窗格中,点击入站规则,然后点击编辑入站规则按钮。

  12. 接下来,通过点击页面最右侧的删除按钮,删除现有的RDP规则。

  13. 点击添加规则按钮。

  14. 在类型字段中,选择sg-。您将看到一个安全组列表会显示出来。请选择列表中的BastionHost-SG安全组。

  15. 接下来,再次点击添加规则按钮。

  16. 在类型字段中,选择sg-。您将看到一个安全组列表会显示出来。这次,从列表中选择ALB-SG安全组。

  17. 最后,点击页面右下角的保存规则按钮。

我们不需要修改Database-SG安全组,因为该安全组已经配置为仅接受来自AppServers-SG安全组的流量,使用 MySQL 端口3306

回顾图 9.20中的架构图,Web/应用 EC2 实例将被放置在私有子网中。我们的 The Vegan Studio 员工将能够通过 ALB 访问这些 EC2 实例上的每月善行比赛应用程序。然而,这些 EC2 实例将需要访问互联网,以下载更新和存储在 Amazon S3 桶中的源代码文件。

请记住,与公共子网不同,私有子网不提供直接的互联网访问权限。任何位于私有子网中的 EC2 实例需要通过 AWS NAT 网关来定向互联网-bound 流量,正如在第六章中讨论的那样,AWS 网络服务 – VPC、Route53 和 CloudFront

在下一个练习中,我们将部署一个 NAT 网关。

练习 9.5 – 部署 NAT 网关

在本练习中,我们将在生产 VPC 的公共子网一中部署一个 NAT 网关。理想情况下,您希望在您拥有资源的各个可用区的每个公共子网中部署多个 NAT 网关,以避免单点故障SPOF)。但是,出于本实验的目的,我们将使用单个 NAT 网关。

此外,您还需要配置您的主路由表,为其添加一条新路由,以允许通过此 NAT 网关的出站互联网流量。

我们将通过首先为我们的 AWS 账户分配一个弹性 IP 地址来开始这个练习,这是配置 NAT 网关的必要步骤。操作步骤如下:

  1. 转到您的 VPC 仪表板,并确保您在 us-east-1 区域。

  2. NAT 网关需要弹性 IP 地址,因此您需要首先为您的 AWS 帐户分配一个。从左侧菜单中,点击弹性 IP。在右侧窗格中,点击分配弹性 IP 地址按钮。

  3. 您将看到分配弹性 IP 地址页面。确保选择亚马逊的 IPv4 地址池,然后点击分配按钮。

AWS 将从其可用地址池为您的 AWS 帐户分配一个弹性 IP 地址。接下来,您需要设置您的 NAT 网关,步骤如下:

  1. 从左侧菜单中,点击NAT 网关

  2. 在右侧窗格中,点击创建 NAT 网关按钮。

  3. Production-NAT

  4. 接下来,从子网下拉列表中选择公共子网 1子网。

  5. 接下来,在弹性 IP 分配 ID下拉列表中,选择您刚刚分配给您帐户的弹性 IP。

  6. 最后,在页面底部点击创建 NAT 网关按钮。

NAT 网关将需要几分钟时间进行配置。一旦准备就绪,NAT 网关状态将设置为可用,如下屏幕截图所示:

图 9.21 – NAT 网关

图 9.21 – NAT 网关

现在您已部署了 NAT 网关,您需要配置主路由表以使用 NAT 网关访问互联网,步骤如下:

  1. 在 VPC 仪表板的左侧菜单中,选择路由表

  2. 勾选主路由表旁边的复选框。

  3. 在底部窗格中,点击路由选项卡。

  4. 接下来,点击页面右侧的编辑路由按钮。

  5. 将显示编辑路由页面。点击添加路由按钮。

  6. 0.0.0.0/0下。

  7. 接下来,在列表中点击Production-NAT NAT 网关。继续选择此项。

  8. 最后,点击保存更改按钮。

主路由表现在已配置为使用 NAT 网关访问互联网。

现在您已正确配置了 NAT 网关和主路由表,我们可以继续部署将在下一个练习中托管每月善行应用的 EC2 实例。

练习 9.6 – 使用 Amazon 自动扩展部署应用服务器

在此练习中,我们将配置 Amazon 自动扩展服务以为我们的部署定义启动配置,其中将包括一个脚本来配置我们的 EC2 实例使用 Apache web 服务并从 Amazon S3 存储桶下载应用源文件。作为练习的一部分,您还将创建一个 EC2 实例配置文件,该文件将用于包含您之前创建的 IAM 角色,并允许 EC2 实例承担该角色。

EC2 实例还将作为我们在 ALB 练习中创建的 Production-TG 目标组的目标进行配置。然后,Production-ALB ALB 将能够将来自我们 Vegan Studio 员工的互联网流量分发到这些 EC2 实例,使他们能够提交任何他们所执行的善举,供我们的评审小组审查。

此外,我们将配置自动扩展策略,以始终确保我们在两个可用区(us-east-1aus-east-1b)的每个私有子网中都有两个正在运行的 EC2 实例。在健康检查方面,这些将分别在 EC2 层和通过 ALB 使用你在练习 9.3中定义的健康检查参数进行。

创建一个自动扩展启动配置

作为本练习的一部分,你需要访问我们在 GitHub 仓库中提供的一个 Bash 脚本,github.com/PacktPublishing/AWS-Certified-Cloud-Practitioner-Exam-Guide。在你之前下载并解压的vegan-php-files.zip文件中,你将在顶层文件夹中找到一个名为userdata-script的文件。你需要修改此脚本以匹配你的配置。用记事本或文本编辑器打开脚本文件,并更改脚本的最后一行,将[Source Bucket]替换为你存储桶的实际名称。例如,如果你的存储桶名称是vegan-good-deed,那么最后一行应该从aws s3 cp s3://[Source Bucket] /var/www/html –recursive更改为aws s3 cp s3://vegan-good-deed /var/www/html –recursive。确保保存文件。

接下来,我们来看看设置 AWS 自动扩展启动配置所需的步骤,如下所示:

  1. 转到 EC2 仪表板,并确保你处于us-east-1区域。

  2. 从左侧菜单中选择启动配置,位于自动扩展类别下。

  3. 在右侧窗格中,点击创建启动配置按钮。

  4. 系统将向你展示创建启动配置页面。

  5. 为你的启动配置提供一个名称——例如,Production-LC

  6. 接下来,你需要搜索亚马逊 Linux 2 AMI。在新64 位 x86架构下可能难以找到此 AMI,正如以下截图中我所标出的那样:图 9.22 – 亚马逊 Linux 2 实例的 AMI ID

    图 9.22 – 亚马逊 Linux 2 实例的 AMI ID

  7. 返回你正在配置自动扩展启动配置的浏览器窗口,点击AMI下拉箭头,并将你之前复制的 AMI ID 粘贴到搜索框中。然后你应该能找到相关的 AMI 供使用。确保选择该 AMI。

  8. 接下来,在 t2.micro 下。你可以从过滤后的列表中选择 t2.micro 实例类型。然后点击选择按钮。

  9. 接下来,在包含你之前创建的 IAM 角色的EC2-to-S3-Read-Access实例配置文件下。

  10. 接下来,展开高级详情部分。

  11. 用户数据下,确保选择作为文本,并在提供的文本框中粘贴你刚才修改过的 Bash 脚本文件。

  12. 接下来,在IP 地址类型下,确保选择不为任何实例分配公共 IP 地址。因为 EC2 实例将启动在私有子网中,不需要公共 IP 地址。

  13. 存储(卷)字段中的设置保持为默认值。

  14. 接下来,在AppServers-SG安全组下。

  15. 密钥对(登录)部分,从密钥对选项下拉列表中选择选择现有密钥对

  16. USEC2Keys密钥对下拉列表中选择。

  17. 接下来,勾选框以确认你有访问你之前在第七章中下载的私钥文件的权限,AWS 计算服务

  18. 最后,点击屏幕底部的创建启动配置按钮。

此时,你已经成功创建了第一个自动扩展启动配置,如以下截图所示:

图 9.23 – 亚马逊自动扩展启动配置

图 9.23 – 亚马逊自动扩展启动配置

现在你已经创建了启动配置,可以继续配置你的自动扩展组。

配置自动扩展组

在创建自动扩展组时,你可以定义自动扩展策略。由于我们不会对应用服务器进行实际负载测试,所以我们将简单配置自动扩展策略,确保在两个可用区(AZ)中始终至少有两个 EC2 实例。操作步骤如下:

  1. 从 EC2 仪表盘的左侧菜单中,点击自动扩展组链接,位于自动扩展下。

  2. 点击屏幕右侧窗格中的创建自动扩展组按钮。

  3. Production-ASG中。

  4. 在屏幕的下一部分,你将看到一个下拉列表,可以选择一个启动模板。但是,我们配置的是启动配置,而不是启动模板。要访问你的启动配置,请点击屏幕右侧的切换到启动配置链接。

  5. 接下来,在你之前创建的Production-LC启动配置下。

  6. 点击下一步按钮继续到步骤 2

  7. Production-VPC中,从VPC下拉列表中选择。

  8. 子网下拉列表中,确保选择私有子网一 - 应用私有子网二 - 应用,如以下截图所示:图 9.24 – 自动扩展组子网选择

    图 9.24 – 自动扩展组子网选择

  9. 点击下一步按钮。

  10. 步骤 3,负载均衡 - 可选中,我们将使用您之前创建的 ALB。选择附加到现有负载均衡器选项。

  11. 接下来,确保在附加到现有负载均衡器部分选择从您的负载均衡器目标组中选择

  12. 从下拉列表中,选择与Production-ALB ALB 关联的Production-TG目标组。

  13. 接下来,在健康检查 - 可选部分中,勾选ELB复选框。这样可以启用 ELB 健康检查,除了 EC2 健康检查之外。

  14. 点击屏幕底部的下一步按钮。

  15. 2每个。我们希望始终在我们的实例组中保持两个 EC2 实例。

  16. 扩展策略 - 可选下,确保选择,然后点击下一步按钮。

  17. 步骤 5,添加通知中,不要添加任何通知,点击下一步按钮。

  18. 名称生产服务器中。

  19. 点击下一步按钮继续。

  20. 然后,您将看到一个审查页面。请审查您定义的配置设置,确保按照前面的一系列步骤正确操作。当您满意时,请点击页面底部的创建自动扩展组按钮。

AWS 将开始配置您的自动扩展组,并根据组的参数启动两个 EC2 实例。这些 EC2 实例将根据您在之前的启动配置中定义的配置进行配置。

一旦自动扩展完成 EC2 实例的部署,您将能够查看部署的详细信息,如下图所示:

图 9.25 – 自动扩展组部署完成

图 9.25 – 自动扩展组部署完成

此时,您的应用程序已经部署在两个 EC2 实例上。如果您点击活动标签,您将看到 AWS 自动扩展服务根据最小和期望容量未满足的情况启动了两个 EC2 实例。自动扩展服务将始终确保您拥有所需数量的 EC2 实例。接下来,我们将回顾部署情况并访问应用程序。

审查您的部署并访问应用程序

您可以检查自动扩展服务是否已正确部署您的应用程序。具体来说,您可以检查是否已部署两个 EC2 实例并将其注册到您的 ALB。此外,您还可以检查 ALB 是否已将这些 EC2 实例标记为健康,表示健康检查已通过。

以下是执行这些检查并访问应用程序的步骤:

  1. 在 EC2 仪表板中,点击左侧菜单中的目标组链接,位于负载均衡下。

  2. 在右侧面板中,点击您之前创建的Production-TG目标组。

  3. Production-TG目标组的详细信息页面中,你会注意到已经启动了两个 EC2 实例,且它们都处于健康状态,具体如以下截图所示:图 9.26 – 健康的 EC2 实例已注册到负载均衡器目标组

    图 9.26 – 健康的 EC2 实例已注册到负载均衡器目标组

  4. 接下来,点击左侧菜单中的实例链接。

  5. 你会注意到,已经启动了两个名为Production-Servers的实例,其中一个 EC2 实例位于us-east-1a可用区,另一个位于us-east-1b可用区,具体如以下截图所示:图 9.27 – 自动扩展组成功启动两个 EC2 实例

    图 9.27 – 自动扩展组成功启动两个 EC2 实例

  6. 接下来,我们可以访问我们的应用程序。从左侧菜单中,点击负载均衡器链接,在负载均衡下找到该项。

  7. 在右侧面板中,你会看到你的 ALB 详细信息,如以下截图所示:图 9.28 – 生产环境 ALB 详细信息

    图 9.28 – 生产环境 ALB 详细信息

  8. 在底部面板中,你会找到你的 ALB 的DNS 名称链接。复制这个 URL 并将其粘贴到新浏览器窗口中。如果你成功完成了所有之前的练习,你将能够访问本月好事比赛网页应用程序,具体如以下截图所示:图 9.29 – 本月好事比赛网页应用程序

    图 9.29 – 本月好事比赛网页应用程序

  9. 你可以通过输入自己做过的好事的细节来测试应用程序。一旦你填写了网页中间的表单,点击提交按钮。

  10. 你会注意到,当你点击提交按钮后,网页重新加载时,你的本月好事将从 MySQL RDS 数据库中读取并显示在页面上。如果你提交更多条目,这些内容也会被反馈。这展示了应用程序如何写入并从后端 RDS 数据库读取数据。

我们再看看应用程序架构图,了解你是如何构建这个多层解决方案的:

图 9.30 – 多层应用架构

图 9.30 – 多层应用架构

你架构的关键组件包括以下内容:

  • 一个位于us-east-1区域的 VPC,包含跨us-east-1aus-east-1b可用区的公有和私有子网。该 VPC 总共有六个子网:两个公有子网用于托管 ALB 节点和 NAT 网关,两个私有子网用于托管应用层,另外两个私有子网用于托管数据库层。

  • 你还有一个 Amazon S3 存储桶,用于托管所有应用程序源代码和文件。

  • 一个 IAM 角色,将允许你的 EC2 实例获得授权,从 S3 存储桶中读取和下载应用程序源代码。

  • us-east-1a可用区中部署了一个 RDS 数据库实例,作为单个数据库实例。理想情况下,你会希望为高可用性配置数据库为多可用区部署。

  • 使用自动扩展组和启动配置部署的两个 EC2 实例。启动配置包含必要的引导脚本,用于将 EC2 实例设置为 Web 服务器并自动将应用程序提供给用户。此外,自动扩展组会自动将任何部署到 ALB 目标组中的 EC2 实例注册到该目标组。目标组会对 EC2 实例进行健康检查,根据定义的健康检查结果将其标记为健康或不健康。

  • 最后,应用程序代码拥有必要的数据库连接,用于访问后端 RDS 数据库并存储任何应用数据。请注意,将数据库连接详情存储在应用程序中并不是最佳实践,AWS 提供了多个选项,如AWS Systems Manager 参数存储AWS Secrets Manager来管理这类敏感数据。为了简化本实验,我们将数据库连接详情存储在了应用程序代码中。

接下来,我们将查看如何通过模拟 EC2 实例故障来测试 AWS 自动扩展服务。

测试自动扩展服务

在本部分练习中,你将停止一个 EC2 实例以模拟故障。当 EC2 实例处于停止状态时,它将无法响应负载均衡器的健康检查。负载均衡器会将该 EC2 实例标记为不可用。这会向自动扩展组发送通知,确认组内 EC2 实例少于两个,这少于预期的容量。自动扩展组随后会替换该实例和新服务器。让我们继续模拟该 EC2 实例的故障,步骤如下:

  1. 在 EC2 仪表板中,点击左侧菜单中的实例链接。

  2. 接下来,在屏幕的右侧窗格中,你将看到有两个 EC2 实例正在运行。选择位于us-east-1b可用区中的实例,如下截图所示:图 9.31 – 运行状态中的 EC2 实例

    图 9.31 – 运行状态中的 EC2 实例

  3. us-east-1b可用区选择。

  4. 系统会弹出一个对话框,提示你确认是否要停止所选的实例。点击停止按钮继续。

  5. 然后,AWS 将执行 EC2 实例的关机操作,这将需要几分钟时间。等待直到 EC2 实例处于已停止状态,然后继续点击左侧菜单中的自动扩展组链接,位于自动扩展类别下。

  6. 接下来,在右侧窗格中,点击Production-ASG自动扩展组。

  7. 接下来,点击活动标签。

  8. 您将看到额外的活动,清楚地显示自动伸缩服务已终止了已停止的 EC2 实例。这是因为在停止状态下,实例无法响应健康检查。然后,系统会启动一个新的 EC2 实例来替换被终止的实例(见下图),以便根据自动伸缩组配置维持我们的期望容量为两个实例。您会注意到,自动伸缩服务不会尝试重新启动已停止的实例。自动伸缩组将使用相同的启动配置来配置服务器并将其注册到 ALB 的目标组,如下图所示:图 9.32 – 自动伸缩活动历史

    图 9.32 – 自动伸缩活动历史

  9. 现在,自动伸缩服务已经替换了您的 EC2 实例,您可以通过 ALB 的 URL 访问您的应用程序,以确认应用程序仍然按预期运行。请注意,当一个 EC2 实例停止时,应用程序仍然可以通过 ALB 的 URL 访问,因为流量会被转发到仍在us-east-1a可用区运行的另一个 EC2 实例。

恭喜!恭喜您完成了一系列练习,达到了这一阶段。您现在已经学会了如何使用 AWS 服务的组合来设计和架构一个多层应用解决方案,以帮助您构建一个高可用且可扩展的应用程序。

在下一个练习中,您将执行清理操作,终止不需要的资源,以避免进一步的费用。

练习 9.7 – 清理

在本练习中,您将终止之前练习中部署的各种资源。第一步是删除自动伸缩组,这将终止您的 EC2 实例。如果您尝试手动终止 EC2 实例,自动伸缩组会自动启动新的实例。请按以下步骤操作:

  1. 从 EC2 仪表板,点击左侧菜单中自动伸缩下的自动伸缩组

  2. 在右侧窗格中,选择Production-ASG自动伸缩组。在文本框中点击delete,然后点击删除按钮。

  3. 接下来,点击左侧菜单中自动伸缩服务下的启动配置

  4. 接下来,选择Production-LC启动配置,并在操作菜单中点击删除启动配置。确认删除请求。

  5. 接下来,点击负载均衡器,在负载均衡菜单下。

  6. 在右侧窗格中,选择Production-ALB负载均衡器,并从操作下拉列表中点击删除

  7. 接下来,点击Production-TG目标组,并从操作下拉列表中点击删除,删除目标组。

您的负载均衡器和自动伸缩组已从您的账户中移除。接下来,导航到 Amazon RDS 控制台,如下所示:

  1. 从左侧菜单中点击数据库

  2. 在右侧面板中,选择您之前在 第八章 中创建的数据库,AWS 数据库服务

  3. 操作 下拉列表中,点击 删除

  4. 在确认文本框中取消勾选 delete me,然后点击 删除 按钮。您的 Amazon RDS 数据库将被删除。

  5. 接下来,我们还需要删除之前创建的数据库子网组。从左侧菜单中点击 子网组

  6. 在右侧面板中,选择您之前创建的数据库子网组并点击 删除 按钮。

    现在您的数据库已经被删除,我们可以删除 VPC。请导航到 VPC 控制台。

  7. 在删除 VPC 之前,您需要删除 NAT 网关。从左侧菜单中点击 Production-NAT NAT 网关,然后在确认框中选择 delete 并点击 删除 按钮。

  8. 接下来,您需要检查是否还有网络接口仍然附加在您的 VPC 上。通常,您会发现 Amazon RDS 网络接口(RDSNetworkInterface)可能仍然附加在 Database-SG 安全组上。如果是这样,您需要先删除此接口,然后才能删除 VPC,步骤如下:

    1. 导航到 EC2 控制台,选择 Production-VPC 安全组 ID。选择网络接口,然后从 操作 菜单中点击 删除 按钮。以下截图显示了附加的网络接口:

图 9.33 – 附加到您 VPC 的网络接口

图 9.33 – 附加到您 VPC 的网络接口

  1. 返回 VPC 控制台。接下来,从左侧菜单中点击 您的 VPC

  2. 在右侧面板中,选择 Production-VPC 安全组,然后从 操作 下拉列表中选择 删除 VPC

  3. 您将看到一个包含所有将被删除的 VPC 组件的列表。在确认您的删除请求时,请在确认文本框中输入 delete,然后点击 删除 按钮。

您的 VPC 现在应该已被删除。在 VPC 控制台中,您仍然需要删除一个组件,那就是您为 AWS 账户分配的弹性 IP 地址。因为只有当弹性 IP 地址与正在运行的实例(或在我们的案例中,NAT 网关)关联时,才是免费的。请按以下步骤操作:

  1. 从左侧菜单中点击 弹性 IP

  2. 在右侧面板中,选择您分配给 AWS 账户的 IP 地址,然后从 操作 下拉列表中点击 释放弹性 IP 地址 链接。接着,在 释放弹性 IP 地址 对话框中,点击 释放 按钮。

此时,您的弹性 IP 地址已被释放回 AWS。您账户中未使用的弹性 IP 地址将不会产生任何费用。

这完成了本章的清理工作,您现在可以放心,您将不再因本实验室产生任何额外费用。

重要提示

尽管您在本章中部署的应用程序的所有源代码仍存储在 Amazon S3 存储桶中,虽然您可以删除这个资源,但我们建议您保留这个存储桶,因为我们将在下一章节的练习中继续使用它。

接下来,我们将总结本章内容以及考试中需要记住的关键概念。

总结

在本章中,您学习了垂直扩展和水平扩展之间的区别。我们讨论了增加 EC2 实例规格和容量的选项。然后,我们研究了 AWS ELB 服务及其如何用于均匀分发进入的应用程序流量到一组 EC2 实例上。您了解了不同类型的 ELB 及其使用案例——ALB、NLB、GWLB 和 CLB。我们讨论了如何使用 ELB,在多个可用区分布支持应用程序的 EC2 实例,从而在可用区故障或中断时提供服务的高可用性。

接下来,我们将研究如何使用 Amazon 自动伸缩服务自动扩展(向支持应用程序的服务器群增加更多 EC2 实例)。自动伸缩可以帮助我们在需求增加时扩展,而在需求减少时同样地收缩,确保您始终拥有正确数量的 EC2 实例,以提供最佳的用户体验UX)。

然而,ELB 和自动伸缩服务仅限于区域服务。这意味着仅使用这两个服务无法提供全球的高可用性。为了在多个区域提供高可用性,我们讨论了如何使用 Route 53 和其他全球服务,如 CloudFront。Route 53 提供多种路由策略,使得可以将流量分发到分布在全球各地的应用服务器,并提供构建完整灾难恢复DR)和业务连续性解决方案的选项。

在接下来的章节中,我们将讨论一些 AWS 服务,这些服务旨在帮助您在 AWS 上构建应用程序,摆脱传统的单块架构,转向现代的解耦架构和微服务架构。

问题

  1. 您计划开发一个支持多语言的网站,为此,您将拥有一个用于提供网站英文版的 EC2 实例群和另一个用于提供网站西班牙语版的 EC2 实例群。对于每个语言版本,您将配置不同路径的 URL,因此网站的英文版路径将包含 /en/,而西班牙语版将包含 /es/

    您将使用哪种类型的负载均衡器来路由流量,以确保用户连接到他们想要的语言版本的网站?

    1. CLB

    2. NLB

    3. ALB

    4. 基于路径的负载均衡器

  2. 你正在构建一个多层架构,Web 服务器部署在公有子网中,应用服务器部署在 VPC 的私有子网中。你需要部署 ELB 来将流量分配到 Web 服务器集群和应用服务器集群。你会选择哪种类型的负载均衡器来分配流量到应用服务器?

    1. 面向互联网

    2. 内部负载均衡器

    3. 动态负载均衡器

    4. 静态负载均衡器

  3. 哪种 ELB 最适合处理波动的工作负载,并且能够扩展到每秒数百万个请求?

    1. ALB

    2. NLB

    3. CLB

    4. 高级负载均衡器

  4. AWS 自动扩展服务的哪个配置功能可以让你定义可在你的实例集群中启动的 EC2 实例的最大数量?

    1. 自动扩展组

    2. 自动扩展启动配置

    3. 自动扩展最大实例数量

    4. 自动扩展策略

  5. 当 ELB 检测到一个不健康的 EC2 实例时,它会执行什么操作来分配传入的流量?

    1. 它继续向故障实例发送流量。

    2. 它会终止故障的实例,确保其不再成为 ELB 目标组的一部分。

    3. 它只将流量发送到剩余的健康实例。

    4. 它会重启不健康的 EC2 实例。

  6. AWS ALB 集成了哪项服务来保护你的应用免受常见的网络攻击?

    1. WAF

    2. Shield

    3. Inspector

    4. 密钥管理服务KMS

第十章:应用集成服务

AWS 提供了一套服务,帮助您构建能够实现应用组件之间通信的架构,从而摆脱传统的单体架构设计。这些集成服务促进了分布式系统、无服务器应用程序和解耦应用程序的设计模式。

最终,将您的应用从传统的一体化单体架构中解耦,可以减少更改时的影响。同时,它也促进了更容易的升级和更快的推出新功能。

在本章中,我们将介绍几项提供集成功能的服务。这些包括使用队列服务在应用组件之间进行消息传递的解决方案、通知服务,可用于应用对应用A2A)通知或应用对人A2P)通知类型、事件驱动的工作流设计,以及将多个服务协调成无服务器工作负载。

在本章中,我们将涵盖以下主题:

  • 了解像 Amazon Simple Notification ServiceSNS)这样的通知服务

  • 使用 Amazon Simple Queue ServiceSQS)和 Amazon MQ 解耦您的应用架构

  • 设计事件驱动的工作流,通过 EventBridge 将应用程序数据与各种 AWS 服务连接

  • 使用 Amazon Step Functions 和 Amazon Simple Workflow ServiceSWF)将多个 AWS 服务协调成无服务器工作负载

技术要求

要完成本章中的练习,您需要访问 AWS 免费套餐账户,并且需要有权限访问各个 AWS 服务。您还需要访问您在第六章中构建的 VPC,AWS 网络服务 – VPC、Route53 和 CloudFront

了解像 Amazon SNS 这样的通知服务

Amazon SNS 是一个基于推送的消息和通知系统,可以用于让一个应用组件将消息发送到其他应用组件或直接发送给最终用户。

Amazon SNS 使用发布/订阅模型,其中一个应用组件将充当消息发布者,其他应用组件将作为订阅者消费这些消息。Amazon SNS 允许您设计高吞吐量的多对多消息传递,适用于分布式系统、微服务和事件驱动的应用程序。

让我们看一个例子。假设你希望在任何一个 IAM 用户上传对象到他们有权限访问的某个特定 Amazon S3 存储桶时收到通知。为此,你可以配置发生 s3:ObjectCreated:* 操作。这条通知可以发送到一个SNS 主题(稍后讨论),你可以通过电子邮件地址订阅该主题。这样,每当用户将新对象上传到 S3 存储桶时,Amazon SNS 就会通过电子邮件向你发送通知。这是一个使用 SNS 的 A2P 消息示例。

让我们看另一个例子。假设你托管一个 S3 存储桶,允许最终用户上传默认格式的图像,并且你有一个要求将这些图像转换成多种格式。为实现这一要求,你可以使用 Amazon Lambda,如我们在 第七章中讨论的那样,AWS 计算服务,它是一个无服务器计算解决方案,允许你响应事件或触发器运行代码。

对于这个特定的例子,你可以配置 S3 通知服务将消息发送到 Amazon SNS 主题,并让 Lambda 函数订阅该主题。消息可以包含已上传的新图像信息,并触发 Lambda 函数访问存储桶中的图像,创建不同格式的图像,并将其保存到另一个 S3 存储桶中。这个自动化过程是使用 SNS 的 A2A 消息示例。

接下来,我们将深入了解 Amazon SNS 服务的一个关键组件,特别是 SNS 端点。

Amazon SNS 端点

如前所述,Amazon SNS 是一种基于推送的消息解决方案,使一个或多个发布者可以将消息推送给一个或多个订阅者。使用 Amazon SNS 时,你的订阅者需要使用支持的端点类型。这些端点在下图中有所描述:

图 10.1 – Amazon SNS 订阅者端点

图 10.1 – Amazon SNS 订阅者端点

Amazon SNS A2A 端点包括 Amazon SQS、HTTP/S 端点、AWS Lambda 和 Amazon Kinesis Firehose。然后,来自 Amazon Kinesis Firehose 的数据可以卸载并存储在 Amazon S3 存储桶、AWS Elasticsearch 和 Amazon Redshift 中,以及其他第三方服务提供商。

Amazon SNS A2P 端点包括电子邮件、手机短信和手机推送端点。

Amazon SNS 还确保消息具有高度的持久性。消息会存储并复制到跨地理位置分布的多个设备、服务器和数据中心。

Amazon SNS 主题

Amazon SNS 服务的核心是 SNS 主题功能,它是一个逻辑访问点,充当发布者和订阅者之间的通信通道。在你向订阅者发送消息之前,首先需要创建一个主题。你的发布者需要知道向哪个 SNS 主题发送消息,而你的最终客户端必须订阅该主题才能接收这些消息。

在下图中,我们可以看到一个应用组件允许我们将对象上传到 Amazon S3 存储桶 (1)。Amazon S3 可以设置事件通知服务,推送通知,声明上传操作已发生,并将此通知发送到 Amazon SNS 主题。在此图中,管理员已订阅该 SNS 主题。任何由于对象上传到 S3 存储桶而产生的通知将被发送到管理员:

图 10.2 – 示例 – 配置 S3 事件通知的 SNS 通知

图 10.2 – 示例 – 配置 S3 事件通知的 SNS 通知

你的发布者还需要获得权限,才能向主题发布消息。在前面的示例中,我们希望在每次新的对象上传到 S3 存储桶时向管理员发送通知,你还需要创建权限,授予 S3 存储桶向 SNS 主题发送消息的能力。你可以通过配置 IAM 策略来实现,指定哪个存储桶可以向主题发送消息,并将其作为内联策略直接附加到 SNS 主题。

订阅者将在发布者发布新消息时接收到消息。在前面的示例中,发布者是 S3 通知服务,订阅者是管理员的电子邮件地址。

请注意,当你创建主题时,需要为其指定一个名称。名称最长可包含 256 个字符,可以包含连字符(-)和下划线(_)。Amazon SNS 将分配一个 sns —— 区域、AWS 账户 ID 和主题名称。例如,一个名为 new-recipe-upload-alert 的 SNS 主题,在伦敦区域创建,AWS 账户 ID 为 123456789789,则其 ARN 为 arn:aws:sns:eu-west-2:1234567890123789:new-recipe-upload-alert

接下来,我们将看看你可以在 Amazon SNS 上创建的主题,这取决于应用程序的使用场景。

标准主题与 FIFO 主题

在配置 Amazon SNS 时,默认情况下会创建一个标准主题。标准主题用于消息的传递顺序不会影响应用程序的情况,并且重复消息不会在工作流中产生问题。所有支持的传递协议都支持标准主题。

此外,你还可以创建FIFO 主题。这些主题旨在确保严格的消息顺序并防止消息重复。请注意,只有 Amazon SQS 终端(特别是 Amazon SQS FIFO 队列)可以订阅 FIFO 主题。我们将在本章稍后讨论 Amazon SQS 服务。

Amazon SNS 扩展场景

Amazon SNS 提供的一个关键特性是能够将推送到 SNS 主题的消息复制到多个终端。这个功能被称为扩展场景,它允许并行异步处理。

让我们看一个例子。假设你是一家剧院公司,销售各种演出的门票。你需要处理来自客户的在线支付并向他们发放票务。同时,你还需要将所有销售信息存储在 AWS 的数据仓库解决方案中,该解决方案由 Amazon Redshift 提供。设计这个架构的一种方式如下图所示:

图 10.3 – Amazon SNS 扩展场景示例

图 10.3 – Amazon SNS 扩展场景示例

在上面的图示中,传入的票务销售消息被发送到 SNS 主题,然后复制到 SQS 队列和 Amazon Kinesis Data Firehose 流。发送到 SQS 队列的任何消息都由支付功能处理,以完成销售交易。架构中还可以添加其他队列,用于订单履行和客户通知。

接下来,相同的消息将被 Amazon Kinesis Data Firehose 处理,数据被送入 Amazon Redshift 集群。请注意,要将数据从 Amazon Kinesis Firehose 流式传输到 Redshift,你需要先将数据交付到 S3 桶中,然后执行 Amazon Redshift COPY 命令将数据加载到 Amazon Redshift 集群中。我们将在下一章讨论 Amazon Kinesis。

同时,消息将继续保存在 S3 桶中,可以使用生命周期管理过程进行归档,正如我们在第五章中讨论的,Amazon Simple Storage Service(Amazon S3)。这有助于满足存储所有票务销售历史信息的合规性要求。

Amazon SNS 定价

Amazon SNS 是一项托管服务,无需预付费用。你按使用量付费,费用基于使用的主题类型;即,标准主题或 FIFO 主题。标准主题的费用是根据每月发出的 API 请求数量以及向各个端点的交付次数来计算的。例如,移动推送通知的费用是每百万条通知 $0.50,在你耗尽免费层 1 百万条通知的额度后开始计费。

你的消息最大负载大小为 256 KB。除了短信消息外,按每 64 KB 为一个请求收费。所以,256 KB 的负载大小等于四个请求。此外,如果你需要发送大于 256 KB 的消息,你可以使用 Amazon Extended SNS 客户端库,它允许你通过 Amazon S3 服务发送负载数据。使用此方法时,会产生额外的 Amazon S3 存储费用。

对于 FIFO 主题,你的费用将基于发布的消息数量、订阅的消息数量及其各自的负载数据量。

在本节中,我们讨论了由 Amazon SNS 提供的基于推送的消息传递解决方案。Amazon SNS 基于发布/订阅模型,能够帮助您设计和架构 A2A 消息传递和 A2P 消息传递。Amazon SNS 能够帮助您构建不同应用组件之间的集成,从而设计分布式系统、微服务和无服务器架构。

您还了解了 Amazon SNS 的一些核心功能,包括标准主题和 FIFO 主题,以及 Fanout 场景概念。

在下一节中,我们将介绍另一种消息集成服务,称为 Amazon SQS。Amazon SQS 是一种基于拉取的消息传递解决方案,非常适合设计解耦架构,帮助您从单体应用架构迁移开来。

使用 Amazon SQS 和 Amazon MQ 解耦应用程序架构

Amazon SQS 是另一个完全托管的消息集成解决方案,它能够将应用组件解耦到分布式系统中,并促进微服务的设计和架构。使用像 Amazon SQS 这样的队列系统的主要优势之一是能够脱离单体应用设计。在单体设计中,您的应用所有组件彼此依赖,并且需要始终可用,通常会遭遇频繁的故障和停机。像 Amazon SQS 这样的队列系统可以帮助应用的不同组件独立工作,队列能够以请求/任务的形式存储消息,直到容量变得可用。通过异步处理以及不同组件独立扩展的能力,您可以享受更高的可用性,每个组件可以根据需要扩展,而不会影响整体工作流。

在下图中,我们可以看到 Amazon SQS 如何用于在应用程序的各个组件之间排队消息,从而实现解耦架构(也称为松耦合):

图 10.4 – Amazon SQS 用例示例

图 10.4 – Amazon SQS 用例示例

在前面的图示中,一个媒体转码的例子使用了 Amazon SNS 和 Amazon SQS 服务,将用户上传的原始视频转换为各种格式和分辨率。在这个架构中,我们有不同的自动扩展组,这些组负责配置一批服务器,每批服务器负责将视频转换为特定格式。为处理发送到不同服务器组的消息,创建了独立的队列。以下是工作流的简要说明:

  1. 用户通过一个前端 Web 服务器集群上传视频,该集群属于一个自动扩展组,根据需求进行扩展和收缩。

  2. 视频被上传到主存储桶。

  3. 与此同时,一个 SNS 通知被以扇出配置发送到多个 Amazon SQS 队列(参见本章前面讨论的 SNS 扇出场景)。

  4. 每个 SQS 队列存放消息,供适当的应用服务器在有空闲容量时拉取。

  5. 相关的应用服务器从相应的 SQS 队列中检索消息,该队列标识出需要在主存储桶中处理的视频。然后,应用服务器从主存储桶中检索原始视频。

  6. 应用服务器将视频的格式和分辨率转换,并将完成的视频以正确的格式上传到转码存储桶。

虽然 Amazon SNS 提供基于推送的消息通知解决方案,但 Amazon SQS 是一个完全托管的基于拉取的消息队列系统,它还会在短时间内保留消息(默认保留时间为 4 天,但可以配置最长为 14 天)。

这意味着,如果你有需要处理大量来自前端 Web 请求的队列消息的后端服务,你可以将这些消息保留,直到后端服务能够处理队列中的新消息。Amazon SQS 提高了应用解决方案的整体容错能力,使得解耦的应用组件能够独立运行。

Amazon SQS 队列类型

Amazon SQS 提供了两种类型的队列,旨在帮助解决不同的使用场景。接下来将讨论这两种队列。

Amazon SQS 标准队列

标准队列支持几乎无限数量的每秒 API 调用(SendMessageReceiveMessageDeleteMessage),并且设计为至少发送一次消息。然而,这意味着在某些情况下,消息可能会重复发送。此外,消息可能不会按照它们进入队列的顺序发送。因此,你的应用程序必须能够处理未按照进入队列的顺序传递的消息,以及偶尔的重复消息:

图 10.5 – Amazon SQS 标准队列

图 10.5 – Amazon SQS 标准队列

标准队列在需要每秒处理大量事务时特别有用。然而,请注意,标准队列的飞行消息数量配额为 120,000。例如,当需要处理大量电商应用中的信用卡验证请求时,你可能会使用标准队列。

Amazon SQS FIFO 队列

FIFO 代表 先进先出。FIFO 队列旨在保持消息的顺序,并确保每条消息只被送达一次,没有重复。

FIFO 队列仅以每秒 300 次交易的速率提供吞吐量。这意味着它们无法提供无限的吞吐量;然而,通过使用称为批处理的过程,可以提供更高的消息吞吐量,每个 API 方法(SendMessageBatchReceiveMessageDeleteMessageBatch)支持每秒 3,000 次交易。这 3,000 次交易代表了 300 次 API 调用,每次调用携带 10 条消息。

此外,正如下面的图示所示,消息按照它们进入队列的顺序进行传递,Amazon SQS 将保持此顺序:

图 10.6 – Amazon SQS FIFO 队列

图 10.6 – Amazon SQS FIFO 队列

因此,FIFO 队列非常适合那些事件顺序很重要的应用程序,例如确保用户输入的命令按照正确的顺序运行。FIFO 队列还确保不会重复处理,例如支付交易。然而,当需要极高的扩展性或每秒需要处理超过 3,000 次交易(带批处理时)时,它们并不理想。

Amazon SQS 定价和安全性

为了确保敏感数据的保护,您可以使用 Amazon 密钥管理服务KMS)对消息进行加密。在定价方面,Amazon MQ 不需要前期成本。您根据请求的数量和内容以及与 Amazon S3 和 AWS KMS 的交互支付费用。请注意,作为免费套餐的一部分,您每月还可以获得前 100 万次请求的免费额度。

在本节中,我们介绍了 Amazon SQS 提供的另一种托管消息解决方案。Amazon SQS 是一种基于拉取的消息队列解决方案,可以解耦您的应用程序组件,使它们能够独立工作。消息存储在标准队列或 FIFO 队列中,应用程序组件在有可用容量时按需检索这些消息。

在下一部分中,我们将介绍 Amazon MQ,这是一种为 Apache ActiveMQ 和其他消息中介设计的消息中介服务。

Amazon MQ

消息中介是一种旨在帮助您促进应用程序组件之间信息交换的软件。消息中介允许不同的服务直接相互通信,即使这些服务是用不同的编程语言编写的或运行在不同的平台上。

许多组织在其本地环境中已经有现有的消息中介服务,以支持它们的本地应用程序。其中一项服务是Apache ActiveMQ,它可能是最流行的基于 Java 的消息中介之一。

当客户寻求迁移其本地应用程序时,您必须考虑这些第三方消息中介服务的使用位置。AWS 提供了一项名为 Amazon MQ 的服务,这是一项完全托管的消息中介服务,提供与流行消息中介的兼容性。

亚马逊建议使用 Amazon MQ 将应用程序从现有的消息代理迁移,这些消息代理需要与 JMS 等 API 或 AMQP 0-9-1AMQP 1.0、MQTTOpenWireSTOMP 等协议兼容。

如果作为迁移的一部分,您打算完全重新设计您的应用程序层,那么您可能希望考虑使用 Amazon SNS 和 Amazon SQS,因为您不再需要第三方消息代理。亚马逊推荐这些服务用于新应用程序,这些应用程序可以受益于几乎无限的可扩展性和简单的 API。

在本节中,我们探讨了 Amazon MQ,它使客户能够轻松迁移到云中的消息代理,并与现有的消息代理(如 Apache ActiveMQ 和 RabbitMQ)兼容。使用 Amazon MQ,您可以减少在提供、配置和维护依赖于与 JMS 等 API 或 AMQP 0-9-1、AMQP 1.0、MQTT、OpenWire 和 STOMP 等协议连接的消息代理时的整体操作开销。

在下一部分中,我们将探讨基于事件的工作流服务,以及亚马逊提供的服务,帮助您为应用程序架构事件驱动的解决方案。

使用 AWS EventBridge 设计事件驱动的应用程序工作流

Amazon EventBridge 是一个无服务器的 事件总线服务,允许您从应用程序、基于 SaaS 的服务和 AWS 服务流式传输实时事件到各种目标。这些目标可以包括 AWS Lambda、Kinesis、HTTP/S 端点,或另一个账户中的事件总线服务。Amazon EventBridge 帮助您创建需要响应并对生成的事件执行某些操作的应用程序架构。

当给定资源的状态发生变化时,可以生成事件,例如,当 EC2 实例从运行状态变为停止状态时。另一个事件示例是,当您的自动扩展组启动或终止一个 EC2 实例时。根据应用架构的需要,可以通过响应此类状态变化来创建额外的功能。

使用 EventBridge,您可以设置规则来定义匹配传入模式或事件的条件。当事件发生时,如规则所定义,它可以被发送到目标进行进一步处理。例如,当一个导致关键服务器停止(意外)的事件发生时,可以将其发送到 Lambda 函数进行自动重启。

EventBridge 还可以配置为在定义的计划下触发事件。例如,如果你有一大批 EC2 实例用于测试新应用程序,并且你通常在每周一至周五的正常工作时间内进行测试,那么在这些工作时间之外就没有必要让服务器持续运行。你可以设置一个定时事件,触发一个 Lambda 函数,在每周一至周五的下午 6 点停止服务器,并在每个工作日的早上 8 点重新启动服务器。这样可以确保在正常工作时间之外,服务器处于停止状态。如果这些是按需 EC2 实例,在服务器保持停止状态时,你不会产生费用。

Amazon EventBridge 是 Amazon CloudWatch Events 的更新版本。在 CloudWatch Events 中,你只能使用一个默认的事件总线来路由所有 AWS 事件以及自定义事件。然而,在新的 Amazon EventBridge 中,除了默认事件总线,你还可以引入自定义事件总线。自定义事件总线可以专门为你的工作负载创建,并使你能够控制对事件的访问,这些事件仅限于一组 AWS 账户或自定义应用程序。此外,你可以使用基于内容的过滤和高级规则来路由事件。EventBridge 可以处理更多的处理任务,减少下游事件的负载,并使用如 Zendesk、PagerDuty 和 Datadog 等合作伙伴事件源。

在下图中,我们可以看到 EventBridge 的高层工作方式。我们可以看到事件的来源、可以使用的事件总线类型以及这些事件可能的目标:

图 10.7 – EventBridge 的工作原理

图 10.7 – EventBridge 的工作原理

以下是 Amazon EventBridge 的关键概念和组件:

  • 事件:如前所述,事件表示给定环境或资源的状态变化。这可以是应用程序、AWS 资源,甚至是 SaaS 合作伙伴服务或应用程序的状态变化。

  • 规则:规则使你能够将事件匹配到目标进行处理。你可以设置一个规则将事件路由到一个目标,或者设置并行处理将事件路由到多个目标。规则的处理顺序没有固定要求,但你可以自定义发送到目标的 JSON,确保只有感兴趣的数据被传递给目标。

  • 目标:目标可以处理这些事件并执行某些操作。目标包括 Lambda 函数、SNS 主题、ECS 任务和 SQS 队列。事件以 JSON 格式传递给目标。

  • 事件总线:事件总线可以接收事件。你的 AWS 账户中有一个默认的事件总线,用于接收来自 AWS 服务的事件,但你也可以为自定义应用程序创建自定义事件。合作伙伴事件总线可用于接收来自合作伙伴 SaaS 应用程序和服务的事件,然后将这些事件传递到你的 AWS 账户。

本节中,我们了解了 Amazon EventBridge,它允许你从应用程序、基于 SaaS 的服务和 AWS 服务流式传输实时事件到多种目标进行处理。目标可以包括 AWS Lambda 函数、Kinesis 流、ECS 任务、SQS 队列等。此外,你还可以配置 Amazon EventBridge 以处理在定义的时间表上触发的计划事件。与之前的 CloudWatch Events 服务相比,Amazon EventBridge 提供了更多的灵活性和高级功能。

在接下来的章节中,我们将介绍面向任务的集成服务,如 Amazon Step Functions 和 Amazon SWF。

使用 Amazon Step Functions 和 Amazon SWF 协调多个 AWS 服务,构建无服务器工作负载

本节中,我们将介绍两种不同的 AWS 服务,帮助你设计应用组件之间基于任务的工作流。我们将首先了解 AWS Step Functions,其次是 AWS SWF。

AWS Step Functions

应用程序通常由多个组件组成,这些组件构成了单独的工作流和流程。每个工作流代表应用程序中的一个元素,然后依次进行,以提供完整的端到端解决方案。Amazon Step Functions 使你能够将这些工作流定义为一系列包含“状态”的状态机,这些“状态”构成了工作流。这些状态根据输入做出决策,执行某些操作,并向其他状态产生输出。

状态可以是以下任何一种类型:

  • 成功或失败状态:执行停止时的成功或失败状态

  • 等待状态:状态等待超时或计划时间

  • 并行状态:状态执行并行的执行分支

  • 映射状态:状态访问一个项列表,如订单列表

  • 选择状态:状态在执行分支之间进行选择

  • 任务状态:一个专注于执行特定任务的状态,可能调用其他 AWS 服务,如 Lambda 函数,来执行任务

状态机通过不同的状态协调工作,并使用任务状态执行实际的工作。Step Functions 帮助你将工作流可视化为一系列基于事件的步骤,以及每个步骤在工作流中的状态,以确保你的应用程序按定义的顺序运行。

Amazon Step Functions 使用Amazon States LanguageASL)。这是一种基于 JSON 格式的结构化语言,帮助你定义状态机,包括任务状态,执行特定的操作。ASL 用于定义状态如何从一个状态过渡到下一个状态,例如选择状态,或当需要通过错误停止执行时,如失败状态,等等。

使用 Step Functions,您还可以引入人工互动,特别是在需要人工干预的地方。让我们来看一个信用卡申请过程的例子。您可能会有几个步骤作为申请过程的一部分。在下图中,我们可以详细看到这些步骤:

图 10.8 – 信用卡申请工作流示例

图 10.8 – 信用卡申请工作流示例

在前面的图示中,我们有一个 Step Functions 工作流过程,展示了潜在客户如何申请新信用卡。最初的工作流包括注册信用卡,这需要验证客户的详细信息。接下来的步骤可能涉及让客户选择所需的信用额度。这个工作流可能包括以下步骤:

  1. 新客户注册信用卡。最初的过程包括检查用户的详细信息。可以调用多个并行的 Lambda 函数来执行所需的验证。例如,在英国,可以通过选民名单验证客户的姓名和地址。

  2. 如果自动验证过程成功,那么就不需要复审,下一步将被调用。如果需要复审,则可能需要人工干预来执行额外的验证任务。如果人工验证成功,下一步可以继续;否则,申请将被拒绝。

  3. 接下来,客户将获得一个自动批准的信用额度。客户还可以选择一个更高的信用额度,这将需要额外的复审。如果客户选择的信用额度在自动批准额度内,申请将自动被批准。如果客户选择的信用额度超过自动批准额度,则需要进行另一步人工干预。在此,信用卡公司可能会要求提供额外信息,如工资单,以检查客户的信用状况。

  4. 如果人工干预成功,申请将被批准;如果不成功,申请将被拒绝。工作流中可能会有额外的步骤来对拒绝决策提出上诉。

Step Functions 使我们能够构建分布式应用程序解决方案并设计微服务交互,以提供完整的端到端解决方案。接下来,我们将了解您可以为 Step Functions 设置的不同类型的工作流。

工作流类型

使用 Amazon Step Functions,您可以配置两种类型的工作流,如下所示:

  • 标准工作流:这些工作流的执行是精确一次的,可以运行最长达 1 年。如果您的工作流需要人类交互和审批流程,标准工作流非常适合。您按每次状态转换计费,也就是每次执行步骤完成时。标准工作流还提供执行历史记录和可视化调试功能。

  • 快速工作流:这些工作流至少执行一次,但最多只能运行 5 分钟。快速工作流非常适合自动化任务和高事件频率的工作负载,如流数据处理和物联网数据摄取。您根据执行次数和持续时间计费。快速工作流还提供无限的状态转换速率。最后,所有执行历史都会发送到 Amazon CloudWatch。

下面是一个简单工作流的示例,用于创建任务计时器。在这个例子中,正在配置一个 Step Functions 状态机,它实现了一个等待状态,并在等待期结束后使用 Lambda 函数发送 Amazon SNS 通知。任务发送的消息是一个简单的Hello World消息。以下截图展示了工作流及其关联的 JSON:

图 10.9 – AWS Step Functions 任务计时器示例

图 10.9 – AWS Step Functions 任务计时器示例

在本节中,我们讨论了两种类型的 Step Functions 执行方式,并确定了它们之间的核心区别。Step Functions 工作流最长可以运行 1 年(使用标准工作流类型时),因此对于需要长时间运行并可能需要人类交互的应用模型特别有用。一个例子是健康保险理赔申请过程,可能需要人工干预来验证医院账单和提供给索赔人的治疗服务。下一节中,我们将介绍另一种任务导向的应用集成服务,即 Amazon SWF。

亚马逊简单工作流服务(SWF)

Amazon SWF 是另一个任务导向的应用集成服务,允许您协调应用程序中分布式组件之间的工作。此类任务协调可能涉及管理依赖关系、调度任务以及处理任务的重试和超时,以完成应用程序的逻辑工作流。

Amazon SWF 有一个概念,即您可以实现“工作者”来完成任务。工作者可以在 AWS EC2 实例上运行,也可以在您本地环境中可用的计算服务上运行。作为逻辑工作流的一部分,Amazon SWF 还允许您在任务的逻辑分配中加入人类交互,就像前面一节中讨论的 Amazon Step Functions 一样。使用 Amazon SWF,您可以存储任务、分配任务给工作者、跟踪进度并维护状态。

尽管这一切听起来很像 Amazon Step Functions,但一个关键的区别是,在使用 Amazon SWF 时,您必须用任何语言编写决策程序,该程序从 Amazon SWF 获取每个任务的最新状态,并利用这些状态启动后续任务。

另一方面,Amazon Step Functions 提供了一项完全托管的服务,它通过视觉工作流协调应用程序组件,具有更具生产力和灵活性的方式。如果您正在 AWS 上构建新应用程序,您应该考虑使用 Amazon Step Functions。然而,如果您需要外部服务与您的流程交互,或者您需要启动嵌套流程,其中子进程需要将结果返回给父进程,您应该考虑使用 Amazon SWF。

本节简要介绍了 Amazon SWF。Amazon SWF 使您能够协调分布式应用程序组件之间的任务,同时提供诸如持久可靠地维护其执行状态等功能。

练习 10.1 – 使用 Amazon SNS 的 Amazon S3 事件通知

在上一章中,您使用多个 AWS 服务设计、架构并部署了一个完整的 web 应用程序。其中一个服务是 Amazon S3 服务,您创建了一个存储库来托管您的应用程序源代码。源代码包含多个文件,这些文件帮助您构建 web 应用程序。

维护此源代码至关重要,所有对代码的更改都需要进行监控。您可以采用几种最佳实践策略来管理源代码,包括使用 DevOps 原则。在本练习中,您的高级管理员 Alice 希望知道每当有新文件(对象)上传到存储在 Amazon S3 桶中的源代码存储库时。

Amazon S3 提供一个称为事件通知的功能。此功能使您能够在某些事件发生时接收通知,例如对象被创建或删除。该服务可以配置为将此类通知发送到 Amazon SNS 主题,管理员可以使用电子邮件作为终端订阅该主题。让我们配置一个 Amazon S3 通知,以便每当有新文件上传(即创建)到托管源代码存储库的 S3 桶时,发送电子邮件提醒给 Alice

本练习分为四个主要步骤,如以下小节所述。

第一步 – 创建 SNS 主题并订阅该主题

第一步是创建一个 SNS 主题,这个主题将作为 Alice 订阅的逻辑访问点。发送到该主题的消息将通过电子邮件发送给 Alice:

  1. 在 AWS 管理控制台中,在顶部搜索框中搜索 SNS 并选择该服务,以进入 Amazon SNS 控制台。

  2. 如果您以前从未创建过 SNS 主题,您应该会看到 Amazon SNS 欢迎屏幕。

  3. 点击最左侧的菜单图标(三条横线表示),以展开侧边栏。

  4. 接下来,从菜单中点击主题链接。

  5. 点击屏幕右侧面板中的创建主题按钮。

  6. 创建主题页面的详细信息部分,选择类型下的标准类型。

  7. 输入主题名称,例如 source-code-changes。接下来,输入主题的显示名称,例如 Source Code Changes Alert

  8. 保留所有其他设置为默认值,然后点击创建主题按钮。

  9. 一旦主题创建完成,你将被重定向到主题页面。请记下主题的 ARN,参考以下截图:图 10.10 – Amazon SNS 主题

    图 10.10 – Amazon SNS 主题

  10. 现在你已创建了一个主题,你可以为其创建一个订阅。我们将使用电子邮件作为通知的终端,你可以使用你的电子邮件地址来接收通知。

  11. 在主题页面的底部面板中,参考之前的截图,你会看到一个创建订阅的部分。点击创建订阅按钮。

  12. 创建订阅页面,你会注意到主题 ARN 已被选中。如果没有,请确保粘贴你之前记下的主题 ARN。

  13. 接下来,在协议下,从下拉列表中选择电子邮件

  14. 终端下的文本框中,提供你的电子邮件地址。

  15. 点击页面底部的创建订阅按钮。

  16. 你将收到一个确认声明,表示你的订阅已创建。然而,它的状态将设置为等待确认。AWS 会向你的电子邮件账户发送确认请求。你需要登录你的电子邮件账户并确认订阅以激活它。我刚刚登录我的电子邮件账户进行相同的操作,以下是我的 Gmail 账户的截图:图 10.11 – 主题订阅的电子邮件订阅请求

    图 10.11 – 主题订阅的电子邮件订阅请求

  17. 一旦确认订阅,返回到 Amazon SNS 控制面板,并从左侧菜单中点击主题链接。

现在你已确认了对主题的订阅,你可以配置一个访问策略,授予 Amazon S3 服务将通知发送到主题的权限。

步骤 2 – 配置 SNS 主题策略

为了让 Amazon S3 将通知发送到你刚刚创建的 SNS 主题,你需要配置一个访问策略。访问策略定义了谁或什么可以访问你的主题并向其发布消息。我们在这个学习指南的 GitHub 仓库中提供了一个示例策略文档,你需要修改它:github.com/PacktPublishing/AWS-Certified-Cloud-Practitioner-Exam-Guide。在编辑策略之前,你需要以下信息:

  • 你之前记下的 SNS 主题的 ARN。

  • 您在前一章节创建的 S3 存储桶的 Amazon ARN。您可以通过单击 Amazon S3 仪表板上存储桶详细信息页面上的属性选项卡找到存储桶 ARN。

  • AWS 账户 ID(您可以通过单击屏幕右上角的帐户名称,并记下我的帐户旁边的 12 位数字来获取)。

打开 Notepad 或您选择的文本编辑器中的示例访问策略文档,如以下截图所示:

图 10.12 - 示例访问策略

图 10.12 - 示例访问策略

替换策略中的值,如上述截图中的箭头所示,使用以下内容:

  • 对于Sid,将example-statement-ID更改为您希望使用的任何相关信息;例如,源代码更改策略

  • 对于Resource,将SNS-topic-ARN更改为您主题的 ARN,确保将 ARN 放在双引号中。

  • 对于ArnLike,将arn:aws:s3:*:*:bucket-name更改为您的存储桶名称的 ARN。

  • 对于StringEquals,将bucket-owner-account-id更改为您的 AWS 账户 ID。

保存文件,并将其保存在下一步骤的过程中使用:

  1. 导航回 Amazon SNS 仪表板,并从左侧菜单中单击主题

  2. 单击中间窗格中的您的 SNS 主题,这将重定向您到主题详细信息页面,如以下截图所示:图 10.13 - SNS 主题详细信息页面

    图 10.13 - SNS 主题详细信息页面

  3. 单击面板底部的访问策略选项卡。

  4. 您将找到一个默认访问策略,只允许主题所有者发布主题。

  5. 在窗格的上半部分,单击编辑按钮。

  6. 接下来,展开访问策略 - 可选部分。

  7. 接下来,突出显示并删除 JSON 编辑器中的现有策略,并粘贴您修订后的访问策略的副本。

  8. 最后,在页面底部单击保存更改按钮。

现在您已经设置了 SNS 主题和适当的访问策略,现在是设置 Amazon S3 事件通知服务的时候了。

步骤 3 - 设置 Amazon S3 事件通知服务

在此步骤中,您将配置事件通知服务在您的 Amazon S3 源代码存储桶上,该存储桶托管您的应用程序仓库,每当上传新文件到存储桶时发送警报:

  1. 导航到 Amazon S3 仪表板,并从左侧菜单中单击存储桶链接。

  2. 从右侧窗格中,单击您在前一章节创建的 Amazon S3 存储桶,以托管您的源代码文件。

  3. 接下来,单击属性选项卡,并向下滚动,直到到达事件通知部分。

  4. 单击创建事件通知按钮。

  5. 为您的事件输入一个名称,例如新增文件添加提醒

  6. 事件类型部分,选中声明所有对象创建事件的复选框。

  7. 继续向下滚动,直到到达目的地部分。

  8. 目标选项中选择SNS 主题

  9. 指定 SNS 主题下,从SNS 主题下拉列表中选择您在步骤 1中创建的 SNS 主题。

  10. 最后,点击保存更改按钮。

现在您已经配置了 S3 以将事件通知发送到您的 SNS 主题,是时候测试该配置了。

步骤 4 – 测试配置

在此步骤中,我们将测试 Amazon S3 事件通知服务的配置:

  1. 在 Amazon S3 仪表盘中,从左侧菜单中选择存储桶

  2. 从右侧面板中选择您的 Amazon S3 存储桶,该存储桶将包含源代码文件。

  3. 接下来,点击上传按钮。

  4. 继续上传您可以访问的任何随机文件。或者,您可以创建一个文本文件,保存后上传该文本文件。您可以使用添加文件按钮浏览计算机上的文件,或者直接将文件从另一个文件资源管理器窗口拖放到上传区域。

  5. 通过点击页面底部的上传按钮,将您的文件上传到 Amazon S3 存储桶。

  6. 一旦上传成功,点击关闭按钮。您的对象应该在存储桶中的对象列表中可见。

  7. 再次访问您的电子邮件账户,检查是否收到了来自 AWS 的通知,提醒您已上传新对象。参考以下截图作为示例:

图 10.14 – Amazon S3 事件通知提醒邮件

图 10.14 – Amazon S3 事件通知提醒邮件

如您所见,AWS 已发送邮件提醒我,在我的 Amazon S3 存储桶中上传(创建)了一个对象。该邮件包含大量信息,包括事件时间、警报名称、存储桶名称、上传的对象名称及其大小。如您所见,这对于审计目的非常有用。

Amazon S3 事件通知还可以使用其他目标,如 SQS 队列或 Lambda 函数。在本练习中,您了解了如何使用 Amazon SNS 将通知消息推送到电子邮件地址。

在下一个练习中,您将执行清理操作,移除我们 AWS 账户中不再需要的资源。

练习 10.2 – 清理工作

在本练习中,您将删除在上一个练习中创建的资源,作为清理过程的一部分:

  1. 返回到 Amazon SNS 控制台。

  2. 从左侧菜单中选择主题

  3. 接下来,从右侧面板中选择source-code-changes主题。点击删除按钮。

  4. 系统将提示您通过对话框确认删除请求。在确认文本框中输入delete me,然后点击删除按钮。该主题将被删除。

现在您已删除了 Amazon SNS 主题,您也可以删除 Amazon S3 存储桶,因为我们不再需要它:

  1. 导航到 Amazon S3 控制台。

  2. 从左侧菜单中,点击Buckets

  3. 从右侧窗格中,选择您之前上传源代码的桶。

  4. 只有当桶为空时,您才能删除它。这意味着您必须首先删除桶中的对象。选中桶后,点击清空按钮。

  5. 接下来,系统将提示您确认是否希望通过在确认文本框中输入permanently delete来删除对象。然后,您可以点击删除按钮以清空桶。

  6. 现在桶已经清空,您可以删除它。

  7. 点击退出按钮返回到桶列表页面。保持桶被选中,点击删除按钮。接下来,在确认文本框中输入桶的名称以确认您希望删除它,并点击删除桶按钮。

您的 Amazon S3 桶将成功删除。

接下来,我们将总结本章以及您所学到的关键概念。

总结

在本章中,我们审视了允许您构建高可用和分布式应用解决方案的关键应用集成服务。AWS 提供的应用集成服务使得您可以在解耦的应用组件之间进行通信,让您可以从单体架构转向基于微服务构建的架构。AWS 提供的应用集成工具还帮助您更轻松地设计无服务器解决方案,让您进一步享受与基于服务器的解决方案相关的成本节约。

本章中,您学习了包括 Amazon SNS、Amazon SQS 和 Amazon MQ 在内的各种服务,它们是面向消息的应用集成服务。这些服务使得应用组件之间能够进行通信,从而让您构建松耦合的应用架构。

Amazon Step Functions 和 Amazon SWF 是面向任务的应用集成服务,提供最长可运行 1 年的工作流,并可以将人工干预作为工作流过程的一部分。Amazon Step Functions 还帮助您使用可视化工作流协调应用组件。

最后,我们看了 Amazon EventBridge,它是一个无服务器事件总线服务,使得构建事件驱动的应用程序变得更加容易。EventBridge 可以获取并处理由您的应用程序、合作伙伴软件即服务SaaS)应用程序以及其他 AWS 服务生成的事件。

在下一章中,我们将介绍 AWS 提供的各种分析服务,这些服务可以让您从多种来源流式传输数据,对获取的数据执行复杂查询,构建数据湖,并构建可视化仪表板和报告。

问题

请回答以下问题,测试您对本章内容的理解:

  1. 哪些 AWS 服务可用于当触发警报并进入Alarm状态时,向管理员发送电子邮件通知?

    1. Amazon SNS

    2. Amazon SES

    3. 亚马逊 CloudTrail

    4. 亚马逊电子邮件

  2. Amazon CloudWatch 哪个功能可以帮助您按资源类型和服务创建度量的可视化?

    1. CloudWatch 事件

    2. CloudWatch Logs

    3. CloudWatch 警报

    4. CloudWatch 仪表板

  3. 哪个 AWS 应用集成服务可以配置为提供 A2P 通信,使用移动 SMS 发送文本警报?

    1. 亚马逊 SQS

    2. 亚马逊 SNS

    3. 亚马逊 Amplify

    4. 亚马逊 Workspaces

  4. 您需要配置您的 Amazon SNS 主题,以便将新上传视频的消息推送到三个不同的 SQS 队列中的 Amazon S3 存储桶中。每个队列旨在将原始视频编码为不同的分辨率。Amazon SNS 的哪个功能使您能够并行推送这些通知?

    1. 亚马逊 SNS 标准主题

    2. 亚马逊 SNS FIFO 主题

    3. 扇出场景

    4. 亚马逊 EventBridge

  5. 哪种 Amazon SQS 队列类型提供最大吞吐量、最佳努力排序,并确保至少一次交付?

    1. SQS 标准队列

    2. SQS 强大队列

    3. SQS FIFO 队列

    4. SQS LIFO 队列

  6. 哪种 AWS 服务旨在帮助您构建一个解耦的应用架构,其中传入的 Web 请求可以保存在队列中,直到后端应用程序能够检索并处理该请求?

    1. 亚马逊 SQS

    2. 亚马逊 SWF

    3. 亚马逊 SNS

    4. 亚马逊 Step Functions

  7. 您需要为您的应用程序配置一个 SQS 队列,其中消息的顺序需要保持不变,以便应用程序能够正常工作。您需要配置哪种类型的队列?

    1. SQS 标准队列

    2. SQS 强大队列

    3. SQS FIFO 队列

    4. SQS LIFO 队列

  8. 为了降低成本,您被要求自动关闭一组 UAT 测试服务器,每个工作日的晚上 7 点关闭,然后在下一个工作日的早上 8 点重新启动这些服务器。服务器在周末应保持关闭状态。

    哪个 AWS 服务可以帮助您实现上述需求?

    1. 亚马逊 SQS

    2. 亚马逊 Athena

    3. 亚马逊 EventBridge

    4. 亚马逊 SNS

  9. 哪种 AWS 服务使您能够通过将应用程序工作流拆分为多个步骤、添加流程逻辑,并跟踪步骤之间的输入和输出,将应用程序工作流管理为状态机?

    1. 亚马逊 Step Functions

    2. 亚马逊 SQS

    3. 亚马逊 SNS

    4. 亚马逊 SWF

  10. 哪种 AWS 服务提供了一个协调服务,通过使用决策程序来确定每个任务的最新状态,并使用该状态来启动后续任务,以便跨应用程序组件协调工作?

    1. 亚马逊 SNS

    2. 亚马逊 EventBridge

    3. 亚马逊 SQS

    4. 亚马逊 SWF

第十一章:AWS 上的分析

在这个信息化时代,理解您的数据变得极为重要。借助当前的前沿技术,每秒生成大量的数据——这些数据需要被存储和分析。公司进行数据分析以解释、预测并最终获得商业竞争优势。传统的分析包括零售分析、供应链分析或库存轮换分析。随着机器学习ML)和人工智能在经济中日益深入,新的分析演变逐渐发挥作用,比如认知分析、欺诈分析和语音分析。这个列表几乎无穷无尽,但可以说,理解您的原始数据已经需要大量的努力,并且需要一个专门的业务部门来负责数据分析

AWS 提供了一系列广泛的分析工具,您可以使用这些工具来摄取、存储并有效地理解您的业务所生成的数据。在本章中,我们将详细介绍其中一些服务。

在本章中,我们将涵盖以下主题:

  • 学习使用 Amazon Kinesis 进行数据流处理

  • 学习如何使用 Amazon Athena 查询存储在 Amazon S3 中的数据

  • Amazon Elasticsearch 简介

  • Amazon Glue 和 QuickSight 概述

  • 其他分析服务

技术要求

要完成本章的练习,您需要访问您的 AWS 账户并以 IAM 用户Alice身份登录。

学习使用 Amazon Kinesis 进行数据流处理

要分析您的业务数据,您需要将数据摄取到可以对其进行所需分析的服务中。企业从各种来源生成大量数据,包括应用程序生成的日志、视频、图片和文档等内容、网站的点击流数据、物联网数据等。摄取这些数据是理解数据的第一步。

然而,与其先摄取所有数据然后再弄清楚如何理解这些数据,Amazon Kinesis让您可以在数据到达时即时处理和分析它,并作出回应。Amazon Kinesis 是一项完全托管的服务,使您能够以高效且成本效益的方式处理任何规模的流数据。此外,它是无服务器的,这意味着您无需设置和管理昂贵的基础设施来处理数据。Amazon Kinesis 包含以下四项关键服务:

  • Amazon Kinesis 数据消防队

  • Amazon Kinesis 数据流

  • Amazon Kinesis 数据分析

  • Amazon Kinesis 视频流

让我们详细了解这些服务。

Amazon Kinesis 数据消防队

现代商业方法和策略为了保持客户的忠诚度和参与度,导致了大量的数据需要收集、处理和分析。无论您是尝试分析客户在您网站上点击了哪些产品、根据他们的产品搜索进行推荐,还是向您的安全团队发出潜在欺诈交易的警报,您都需要在数据生成时收集和处理数据。传统上,您需要构建基础设施来提供这种类型的数据后端摄取和处理,这对许多企业来说可能是成本过高的——更不用说维护数百台服务器、存储和网络组件所带来的管理开销了。

Amazon Kinesis Firehose 是一项完全托管的服务,可以将流数据摄取并传输到 AWS 数据存储中,如 Amazon S3RedshiftAmazon Elasticsearch,以便使用现有的 商业智能BI)工具进行近实时分析。该服务的工作流程可以通过以下图示来展示:

图 11.1 – Kinesis Firehose

图 11.1 – Kinesis Firehose

Amazon Kinesis Firehose 还可以将数据传输到第三方服务,如 DatadogNew RelicMongoDBSplunk。Amazon Kinesis Firehose 还允许您在将数据加载到服务之前进行批处理、压缩、转换,甚至加密数据,这意味着您可以降低总体存储成本并增强安全性。

此外,传入的数据流可以自动转换为开放标准格式,如 Apache ParquetApache ORC。最后,使用 Amazon Kinesis Firehose,您无需担心基础设施设置成本。您只需为通过该服务传输的数据、任何数据转换成本、传输到 Amazon VPC 的数据以及数据转移费用付费。

接下来,我们将了解 Kinesis Data Streams 服务。

Amazon Kinesis Data Streams

与 Kinesis Firehose 旨在将大量数据加载到 数据存储(如 Amazon S3 或 Redshift)以进行 近实时 处理不同,Amazon Kinesis Data Streams 是一项完全托管的 实时 持续数据流服务,它允许您每秒捕获数 GB 的数据,并将其流式传输到自定义应用程序进行处理和分析。

Amazon Kinesis Data Streams 可以使流数据在数据收集后的 70 毫秒内,提供给多个分析应用程序,如 Amazon S3 和 AWS Lambda。通过将流数据复制到三个可用区,它提供了高水平的持久性。

Kinesis Firehose 不提供任何数据存储功能。然而,Amazon Kinesis Data Streams 默认会存储并使您的数据在 24 小时内可访问,但通过启用扩展数据保留功能,这一时间可以延长至 7 天,甚至通过启用长期数据保留功能延长至 365 天。

你可以摄取和存储流数据以进行处理,构建实时应用服务,如实时仪表盘实时异常检测动态定价等。与 Kinesis Firehose 类似,你是按需付费,没有前期费用或最低费用。然而,存在一个根本的区别,即 Kinesis 数据流使用了分片的概念,唯一标识流中的数据记录。一个流可以由多个分片组成,这些分片决定了整体容量。具体而言,每个分片每秒最多可处理五次读取事务,最大数据读取速率为每秒 2 MB。对于写入,你每秒最多可以写入 1,000 条记录,数据写入速率为每秒 1 MB(包括分区键)。流的总容量是其分片容量的总和。这里需要注意的关键概念是,无论是否使用,你都将为每个预配的分片按小时收费。

第十章《应用集成服务》中,我们讨论了一项名为Amazon SQS的服务。现在,可能看起来 Kinesis 和 SQS 做的事情相似,但它们其实非常不同。Amazon SQS 是一项消息排队服务,帮助在应用程序的不同组件之间传输时存储消息。Amazon SQS 帮助你解耦应用程序栈,从而使单个消息可以独立跟踪和管理,并且使应用程序的不同组件能够独立工作。

接下来,我们将看看 Kinesis 数据分析服务。

Amazon Kinesis 数据分析

Kinesis 数据分析让你能够实时查询和分析流数据。数据可以从各种来源流入 Kinesis 数据分析应用程序,包括 Amazon 托管的 Kafka 流服务MSK)和Amazon Kinesis 数据流(前文有讨论)。使用 Kinesis 数据分析,你不需要与其他 AWS 服务一起构建复杂的流集成应用程序。相反,你可以使用标准的编程和数据库查询语言,如 Java、Python 和 SQL,来查询流数据或构建流应用程序。以下图表展示了这些关键功能:

图 11.2 – Amazon Kinesis 数据分析

图 11.2 – Amazon Kinesis 数据分析

Amazon Kinesis 数据分析还使你能够实时分析流数据,并使用Apache Flink的开源库和连接器构建流应用程序。Apache Flink 是由Apache 软件基金会开发的完全开源的统一流处理和批处理框架。

最后,你可以访问Kinesis 数据分析工作室,它允许你使用 SQL、Java、Python 和 Scala 构建复杂的流处理应用程序。

在定价方面,您只需为运行流媒体应用程序所使用的资源付费,并且无需预先承诺。

接下来,我们将了解 Amazon Kinesis Video Streams 服务。

Amazon Kinesis Video Streams

如果您希望将视频设备流式传输到 AWS 进行分析、机器学习、回放和其他处理服务,那么 Amazon Kinesis Video Streams 服务将是您使用的工具。Amazon Kinesis Video Streams 还可以从边缘设备、智能手机、安全摄像头等设备获取数据。

Amazon Kinesis Video Streams 使用 Amazon S3 作为流媒体视频的基础存储库,正如您所知道的,它提供了高水平的数据耐久性。此外,您还可以根据设备和时间戳搜索并检索视频片段。您的视频也可以加密和索引。

使用 Amazon Kinesis Video Streams,您可以播放视频进行实时或点播观看。此外,您还可以使用 Kinesis Video Streams 帮助您构建利用 AWS 上的计算机视觉视频分析技术的应用程序,例如 Amazon Rekognition。顺便提一下,Amazon Rekognition 是一项完全托管的图像和视频分析服务,可用于识别图像和视频中的物体、人物、文本、场景和活动。Amazon Rekognition 还可以用于检测不当内容。以下图表展示了 Amazon Kinesis Video Streams 服务:

图 11.3 – Amazon Kinesis Video Streams

图 11.3 – Amazon Kinesis Video Streams

Amazon Kinesis Video Streams 使您能够为广泛的用例设计应用程序。一个用例包括能够为智能家居设备(如门铃)流式传输视频和音频。Amazon Kinesis Video Streams 将获取、索引并存储媒体流,您的应用程序可以使用 HTTP 实时流媒体将视频流传输到智能手机应用程序,允许您与敲门的人进行监控和沟通。

在这一部分,我们介绍了 Amazon Kinesis 并讨论了其四项关键功能。在下一部分,我们将向您介绍另一项 AWS 分析服务,即 Amazon Athena,这是一项完全托管的无服务器交互式查询服务,允许您使用标准 SQL 在 Amazon S3 中分析数据。

学习如何使用 Amazon Athena 查询存储在 Amazon S3 中的数据

企业将大量数据存储在 Amazon S3 等存储库中。许多数据不一定存储在常规的 Amazon RDS 或 NoSQL 数据库中。在许多情况下,这是因为数据集不需要定期更新和查询。以前,即使您想对部分数据进行临时查询或分析,您也需要将其导入到数据库中,然后对数据库进行查询。

Amazon Athena是一个完全托管的无服务器解决方案,允许您使用标准 SQL 直接在Amazon S3中交互式地查询和分析数据。无需配置基础设施,您只需为运行的查询付费。

Amazon Athena 使用Presto,这是一款开源 SQL 查询引擎,旨在让您执行临时分析。您可以使用标准的 ANSI SQL,它提供对大型连接、窗口函数和数组的完全支持。

数据可以以多种格式提供给 Amazon Athena,例如 CSV、JSON、ORC、Avro 或 Parquet。此外,您还可以使用 Athena 的 JDBC 驱动程序连接到各种商业智能工具。

Amazon Athena 允许您向其提供非结构化、半结构化和结构化数据,然后您可以使用这些数据运行查询进行分析。此过程涉及在 Athena 服务中创建一个数据库,并为每个特定的数据集创建一个或多个表,以便查询和分析。这些表允许您定义元数据,告诉 Athena 数据在 S3 中的存储位置以及数据的结构;例如,列名和数据类型。

为了执行查询并返回结果,表需要在 Athena 中注册。这些表可以自动或手动创建。注册表后,您可以使用SQL SELECT语句查询它们。查询结果也可以存储在您指定的 Amazon S3 位置。

在即将到来的练习中,使用 Amazon Athena 和 AWS Glue 分析您的销售报告,我们将把一些数据上传到 Amazon S3,并使用 Amazon Athena 进行查询。在这一部分中,我们向您介绍了 Amazon Athena 服务,并概述了如何使用 Athena 查询直接存储在 Amazon S3 中的数据。

在接下来的部分中,我们将介绍另一个 AWS 分析工具——Amazon Elasticsearch。

Amazon Elasticsearch 简介

Elasticsearch是一个开源文本搜索和分析引擎,能够存储、分析并执行对大量数据的搜索功能,几乎实时地进行处理。您可以使用 Elasticsearch 分析各种类型的数据,如文本数据、数值数据、地理空间数据、结构化数据和非结构化数据。

亚马逊提供的 Elasticsearch 作为服务是一个完全托管的服务,无需设置和管理任何基础设施,让您可以专注于应用程序及其功能。遵循按需付费模式,它没有前期费用,尽管您可以预定 1 年或 3 年的实例,以享受比按需定价模型更显著的折扣。

Amazon Elasticsearch 旨在高度可扩展,可以索引所有类型的内容,帮助您为以下用例交付应用程序:

  • 网站搜索

  • 应用程序搜索

  • 日志记录与日志分析

  • 基础设施指标和监控

  • 安全分析

原始数据如日志文件、消息、指标、文档和列表会被采集、规范化并在 Elasticsearch 中建立索引。然后,您可以针对这些数据运行复杂的查询,并使用聚合来查看数据摘要。

Amazon Elasticsearch 还提供与Kibana的集成,Kibana 是一种数据可视化工具,用于分析大型数据集,帮助您将数据呈现为图表、饼图、热力图等形式的可视化表现。

亚马逊 Elasticsearch 还与Logstash集成,Logstash 是一款开源的服务器端数据处理管道,它允许您从广泛的来源获取数据,进行转换并将其发送到如 Elasticsearch 的stash中。Elasticsearch、Kibana 和 Logstash 通常统称为ELK

最后,Amazon Elasticsearch 支持使用标准 SQL 查询您的集群,使您的开发人员能够轻松开始使用该服务。您还可以通过 JDBC 驱动程序连接到现有的基于 SQL 的 BI 和 ETL 工具。

在本节中,我们向您介绍了亚马逊 Elasticsearch 服务,它允许您创建高可扩展、安全且高可用的 Elasticsearch 集群,并提供与 Kibana 和 Logstash 的完整集成,构建完整的托管 ELK 解决方案。

在下一节中,我们将介绍 Amazon Glue 和 QuickSight。

Amazon Glue 和 QuickSight 概述

商业数据通常存储在各种服务中——数据库、存储桶、电子表格等。能够将所有相关数据汇集在一起进行分析,有时可能是一个庞大的项目。之后,您可能希望使用 BI 工具提取并以易于理解的方式呈现这些数据,或将这些数据的洞察无缝集成到您的应用程序、仪表板和报告中。AWS 提供的两个可以帮助满足这些需求的服务是Amazon GlueQuickSight。接下来我们将简要介绍这两个服务。

Amazon Glue 概述

Amazon Glue 是一项无服务器的提取、转换和加载ETL)服务。通过 Amazon Glue,您可以发现、准备、丰富、清理并转换来自各种来源的数据。然后,您可以将数据加载到数据库、数据仓库和数据湖中。来自流式数据源的数据也可以加载进行定期报告和分析。此数据随后可以根据您的业务需求用于分析,并帮助决策。

Amazon Glue 配备了数据目录,这是一个中央元数据存储库,用于存储有关数据的信息,如表定义。你可以使用爬虫服务扫描不同的存储库,分类数据,并推断数据格式和数据类型等模式信息。然后,这些元数据会作为表格存储在数据目录中,并用于生成 ETL 脚本,以便转换、扁平化和丰富数据。接着,数据会被填充到你选择的数据仓储解决方案或数据湖中,例如。

Amazon Glue 还配备了AWS Glue 控制台服务,帮助你定义并编排 ETL 工作流。它让你可以做以下操作:

  • 定义 Glue 对象,如作业、爬虫、表格等。

  • 安排爬虫运行操作。

  • 定义事件或计划以触发作业。

  • 在 Glue 中搜索并筛选对象列表。

  • 直接编辑转换脚本,或使用提供的可视化工具。

Amazon Glue 是一个完全托管的服务,根据需要扩展资源来运行你的作业。它自动处理错误并进行重试。使用 Amazon Glue 时,你按小时收费,费用按秒计费。此定价基于运行爬虫(用于发现数据)和执行 ETL 作业(用于处理和加载数据)。此外,你还需要支付月费以存储和访问 AWS Glue 数据目录中的元数据。

接下来,我们将了解 Amazon QuickSight 服务。

Amazon QuickSight 概览

Amazon QuickSight 是一款无服务器、完全托管的云端商业智能(BI)服务,用于创建和发布交互式 BI 仪表盘,帮助企业数据分析。这让你能够获取企业有价值的信息,从而做出决策。

Amazon QuickSight 可以连接到你数据的存储位置——无论数据存储在AWS 服务本地数据库电子表格SaaS 数据还是B2B 数据中。这些数据可以被转化为丰富的仪表盘和报告工具,帮助你的企业了解运营、销售额、利润、成功案例以及可能需要改进的地方。Amazon QuickSight 可以安全地发布仪表盘,支持通过移动电话、电子邮件或 Web 应用程序进行组织内部的协作。

Amazon QuickSight 还与机器学习服务(ML)集成,可以从数据中构建并提供更深入的洞察。通过机器学习洞察,你可以发现数据集中的隐藏洞察,比如异常和变化,从而使你能够迅速对变化作出反应。你还可以安排自动的异常检测作业。借助机器学习洞察,你可以进行更好的预测分析,这有助于进行准确的假设分析。最后,你可以将数据总结为易于理解的自然语言叙述,这有助于你在仪表盘和报告服务中提供更具上下文的信息。

Amazon QuickSight 的定价模型是按使用付费,费用由谁使用服务来决定;例如,管理员、作者和阅读者。因此,定价基于用户数量,类似于基于用户的许可证。服务如警报和异常检测也会产生额外费用。你可以在 aws.amazon.com/quicksight/pricing/ 查看定价概览。

在本节中,我们回顾了两个额外的 AWS 服务,这些服务属于分析类别。我们向你介绍了 Amazon Glue 服务,它是一个完全托管的无服务器 ETL 解决方案。我们还提供了云原生 BI 工具的概述,利用机器学习从数据中提供更深入的商业洞察。

在下一节中,我们将介绍一两个额外的工具,作为整体分析解决方案的一部分。

其他分析服务

在本节中,我们将快速浏览一些其他你需要了解的 AWS 分析服务。具体来说,我们将查看 Elastic Map ReduceEMR)服务、CloudSearchData Pipeline

  • AWS EMR:这提供了一个托管的 Hadoop 框架,使你能够处理大量的大数据。你可以使用开源工具,如 Apache Spark、Apache Hive、Apache HBase、Apache Flink、Apache Hudi 和 Presto。Amazon EMR 配备了一个名为 EMR Studio集成开发环境IDE),帮助你开发、可视化和调试用 R、Python、Scala 和 PySpark 编写的数据工程和数据科学应用。你可以在 EC2 实例、Amazon 弹性 Kubernetes 服务EKS)集群和使用 AWS Outpost 服务的本地环境中运行 EMR 工作负载。定价方面,按照每个实例的每秒使用计费,并且有 1 分钟的最低计费时间。

  • AWS 数据管道:这是一项 web 服务,允许你安排和自动化数据从各个来源(包括本地服务器)移动和转化到如 Amazon S3、RDS、DynamoDB 和 EMR 等服务。使用 AWS 数据管道,你可以创建在预定时间间隔传输和转化数据的工作流,确保与应用程序过程的对齐。例如,你可以将网页服务器日志每天归档到一个 Amazon S3 存储桶中,然后每周运行 Amazon EMR 作业来分析这些日志并生成应用程序可使用的流量报告。

  • AWS CloudSearch:这是一项完全托管的服务,使你能够为你的 web 应用程序部署、管理和扩展搜索解决方案。Amazon CloudSearch 支持 34 种语言,并为你的网站增加丰富的搜索功能,包括自由文本搜索、布尔搜索和分面搜索。它还提供自动建议、高亮显示等功能。

在这一节中,我们介绍了 AWS 提供的一些额外服务,这些服务属于分析类别。在接下来的章节中,我们将进入本章的练习。

练习 11.1 – 使用 Amazon Athena 和 AWS Glue 分析销售报告

在本次练习中,你需要下载一个示例 CSV 文件,该文件可以在本章的 Packt GitHub 仓库中找到:github.com/PacktPublishing/AWS-Certified-Cloud-Practitioner-Exam-Guide。这是一个简单的 CSV 文件,包含了一些关于“Vegan Studio”的销售数据,这是一家虚构公司,你在前几章中已经完成了一系列练习。

你需要将这个 CSV 文件存储在 Amazon S3 存储桶中,然后使用 Amazon Athena 对数据进行查询。在开始本次练习之前,请确保你已经下载了 CSV 文件并将其存储在你的电脑上。

第 1 步 – Amazon S3

  1. 使用我们高级管理员Alice的 IAM 用户 ID 登录到 AWS 账户。

  2. 导航到 Amazon S3 仪表板。

  3. 创建两个新的存储桶,并给予适当的名称。例如,我命名了我的存储桶为 vegan-sales-report(用于存储 CSV 文件)和 vegan-query-results(用于存储 Athena 查询结果)。由于我已经使用了这些名称,你将不能使用它们,因为存储桶名称在 AWS 生态系统中必须是唯一的。确保在 us-east-1 (N.Virginia) 区域创建存储桶。

  4. 接下来,将你的 CSV 文件上传到将用于托管数据的存储桶中。回顾前几章中完成上传所需的步骤。(提示:尝试凭记忆操作,这有助于增强你的信心。)

    第 2 步 – Amazon Athena 和 Amazon Glue

  5. 导航到 Amazon Athena 仪表板。你可以从 AWS 管理控制台的顶部搜索栏中搜索 Athena 服务。

  6. 如果这是你第一次访问 Amazon Athena,你应该会看到一个启动屏幕。点击 开始使用。如果你没有看到 开始使用 选项,那是因为你正在使用新的用户界面。AWS 以不断更改用户界面而著名。如果你看到了新的控制台界面,你需要点击 探索查询编辑器 按钮。对于这个实验室,我们建议你暂时使用旧版控制台。要访问旧版控制台,请点击控制台左上角的省略号(三个横线),然后切换切换开关以禁用 新 Athena 体验 选项。这将带你回到旧版控制台界面:

    图 11.4 – 禁用新 Athena 体验切换开关

    图 11.4 – 禁用新 Athena 体验切换开关

  7. 在右上角,点击 s3://bucket-name。你也可以将查询存储在子文件夹中,并选择加密查询结果:图 11.5 – Amazon Athena – 设置

    图 11.5 – Amazon Athena – 设置

  8. 接下来,点击 保存 按钮。

  9. 接下来,从左侧菜单中点击连接数据源,如以下截图所示:图 11.6 – Amazon Athena – 连接数据源

    图 11.6 – Amazon Athena – 连接数据源

  10. 选择数据所在位置下,确保选择了查询 Amazon S3 中的数据

  11. 选择元数据目录下,确保选择了AWS Glue 数据目录。在这个练习中,您将使用 AWS Glue 来爬取数据并创建一个模式。这个操作会产生少量费用,但非常低,而且只需做一次。

  12. 点击页面右侧窗格中的下一步按钮。

  13. 连接详情下,确保选择了此账户中的 AWS Glue 数据目录。然后,在选择创建表的方式下,选择在 AWS Glue 中创建爬虫

  14. 点击连接到 AWS Glue按钮。这将会在新的浏览器标签页中启动AWS Glue。切换到此标签页来配置 Amazon Glue。不要关闭 Amazon Athena 浏览器标签页,因为稍后我们还会返回到这个标签页。

  15. 如果您看到启动画面,请点击开始使用按钮。

  16. 从左侧菜单中,点击爬虫

  17. 在右侧窗格中,点击s3://bucket-name。请注意,在为您的 S3 存储桶定义的路径末尾,确保再添加一个斜杠(/)。s3://vegan-sales-report/

  18. 点击VeganSalesRole,它的含义一目了然。点击vegansalesdb。点击创建

  19. 您将被带回到配置爬虫输出页面,您新创建的数据库名称将显示在数据库文本框中。点击下一步

  20. 审查所有步骤页面,点击完成

  • 您将被重定向到爬虫页面。在这里,您将能够看到已创建的爬虫。点击爬虫旁边的复选框,然后点击运行爬虫按钮,如以下截图所示:图 11.7 – Amazon Glue – 运行爬虫

    图 11.7 – Amazon Glue – 运行爬虫

    • 一两分钟后,您应该会看到其状态设置为就绪,并且爬虫已成功运行。您会看到已经添加了一个表,如以下截图所示:图 11.8 – Amazon Glue – 爬虫完成

    图 11.8 – Amazon Glue – 爬虫完成

    • 爬虫完成后,我们可以返回到 Amazon Athena 浏览器标签页。

    步骤 3 – Amazon Athena

    • 回到 Athena 浏览器标签页,点击页面右下角的取消按钮。这将带您回到主页面Amazon Athena 数据源,您会看到最近创建的 Glue 目录列在数据源下,如以下截图所示:图 11.9 – Amazon Athena – 数据源

    图 11.9 – Amazon Athena – 数据源

    • 接下来,点击Query editor标签页。在左侧菜单中,选择你在步骤 2*中创建的数据库,这将显示你在数据库中创建的表格,具体如以下截图所示:图 11.10 – Amazon Athena – 查询编辑器

    图 11.10 – Amazon Athena – 查询编辑器

    • 现在,你可以通过点击省略号(三个点,位于你的表格名称旁边),然后在出现的上下文菜单中点击Preview table,轻松预览存储在 Amazon S3 中的数据。这将运行一个 SQL 查询,并根据以下截图从表格中检索示例数据:图 11.11 – Amazon Athena – 示例查询

    图 11.11 – Amazon Athena – 示例查询

    • 你可以运行其他查询。例如,你可以用以下 SQL 语句替换窗格上半部分的 SQL 语句:
    SELECT * FROM "vegansalesdb"."vegan_sales_report" WHERE total >=100000; 
    

    上述语句将展示所有销售额达到或超过 $100,000 的城市,具体如以下截图所示:

    图 11.12 – Amazon Athena – 查询以识别那些城市销售额大于或等于 $100,000

图 11.12 – Amazon Athena – 查询以识别那些销售额大于或等于 $100,000 的城市

如你所见,Amazon Athena 强大之处在于能够访问并查询你在 Amazon S3 中的原始数据。你无需为这种临时的数据分析设置和部署服务器,也不需要运行昂贵的数据库。

现在,我们将执行清理操作,删除 AWS 账户中不需要的资源。

练习 11.2 – 清理

在本练习中,你将删除在前一个练习中创建的资源,以确保没有不必要的费用:

  1. 进入 Amazon Glue 控制台。

  2. 在左侧菜单中,点击Crawlers链接。在右侧窗格中,选择vegan-sales-crawler。从Actions下拉列表中,点击Delete Crawler选项,然后确认删除操作。

  3. 接下来,在左侧菜单中点击Databases。在右侧窗格中,选择vegansalesdb数据库。然后,从Actions下拉列表中,点击Delete database选项。

  4. 在出现的Delete Database确认对话框中,点击Delete按钮。

接下来,你需要删除 Amazon S3 桶,因为它们不再需要:

  1. 进入 Amazon S3 控制台。在左侧菜单中,点击Buckets

  2. 在右侧窗格中,在确认文本框中选择permanently delete。然后点击Empty按钮。你将收到一条确认信息,表示该桶已成功清空。点击Exit按钮。

  3. 接下来,仍然选中vegan-query-results桶,点击Delete按钮。

  4. 通过在确认文本框中输入桶的名称并点击Delete bucket按钮,确认删除操作。

  5. 重复 步骤 14 来处理 vegan-sales-report 桶。

现在您已完成清理练习,我们将总结本章。

总结

在本章中,我们讨论了 AWS 中属于分析类别的几种服务。当今企业拥有大量数据,能够分析并理解这些数据非常重要。从这些数据中获取的信息可以帮助企业响应客户的需求和要求,解决潜在问题,甚至预测未来的增长。最终,企业可以获得竞争优势。

在本章中,您了解了亚马逊 Kinesis 等服务,允许客户实时或准实时地流式处理和响应数据。您还了解了可以快速查询数据的服务,如亚马逊 Athena,以及使用 BI 工具呈现数据的服务。这些分析服务大多数也以按需付费的完全托管服务形式提供,使几乎任何企业都能负担得起。

在下一章中,您将了解 AWS 上各种部署和编排工具,这些工具可以帮助您在云中配置和部署应用程序,无需大量手动配置。我们将介绍 基础设施即代码IaC),它已经在 IT 界引起了轰动,因为您可以使用预定义模板设计和部署端到端基础设施解决方案,仅需几分钟。我们还将看看如何使用 AWS Lambda 等无服务器计算服务自动化常见的 IT 任务。

问题

回答以下问题,测试您对本章内容的了解:

  1. 哪种 AWS 服务可以帮助您将大量流数据输入到 Amazon Redshift 进行准实时分析?

    1. 亚马逊 Athena

    2. 亚马逊 Kinesis Firehose

    3. 亚马逊 Kinesis 视频流

    4. 亚马逊 RDS

  2. 哪种 AWS 服务可以帮助您使用标准 SQL 查询实时查询流数据?

    1. 亚马逊 Kinesis 数据流

    2. 亚马逊 Kinesis 数据分析

    3. 亚马逊 Glue

    4. 亚马逊 QuickSight

  3. 您计划构建一个应用程序,从乡村道路上的速度摄像头捕获视频流以进行分析。您需要能够捕获所有超速的车辆,并通过车辆的牌照识别违规驾驶员。AWS 上哪两种服务可以帮助您实现这些要求?(选择 2 个答案。)

    1. 亚马逊 Athena

    2. 亚马逊 Kinesis 数据分析

    3. 亚马逊 Kinesis 视频流

    4. 亚马逊 Elasticsearch

    5. 亚马逊识别

  4. 哪种 AWS 服务使您能够索引所有类型的内容,与Kibana集成,并帮助您构建数据可视化工具以分析大型数据集?

    1. 亚马逊 Elasticsearch

    2. 亚马逊 Glue

    3. 亚马逊 Athena

    4. 亚马逊 Kinesis Firehose

  5. 你将多个网络日志文件(CSV 格式)存储在 Amazon S3 存储桶中。你被要求分析一个特定文件的内容,以便检查可能的恶意攻击。哪个 AWS 服务可以帮助你分析 Amazon S3 中的原始数据,并执行必要的临时分析?

    1. Amazon Glue

    2. Amazon QuickSight

    3. Amazon Athena

    4. Amazon 数据管道

  6. 哪个 AWS 服务可以用于执行无服务器 ETL 功能,以发现、准备、丰富、清理并转换来自不同来源的数据进行分析?

    1. AWS Glue

    2. AWS Athena

    3. AWS QuickSight

    4. AWS Rekognition

  7. 哪个 AWS 服务允许你为企业数据创建并发布交互式商业智能仪表盘,从而为你的企业提供有意义的信息,以便做出决策?

    1. AWS Kinesis 数据分析

    2. AWS Glue

    3. AWS QuickSight

    4. AWS Kinesis Firehose

第十二章:AWS 上的自动化与部署

到目前为止,您已经学习了如何在 AWS 上配置和部署各种服务。然而,您的大部分配置都是手动完成的,自动化程度非常低。例如,在第九章AWS 上的高可用性与弹性,您在多层架构中部署了一个应用程序。这包括配置在自动扩展组中的应用服务器、应用负载均衡器、用于存储应用数据的数据库,以及托管源代码的 S3 存储桶。所有这些都部署在 Amazon VPC 的私有网络中。

在构建应用程序堆栈时,您需要手动配置 AWS 上的各种服务及所需的资源,以部署应用程序。例如,使用 VPC 时,您需要配置子网、IP 地址范围、安全组、NAT 网关等许多内容。现在,想象一下,每次需要创建新环境来托管应用程序时,您都必须执行这些手动操作。这无疑会非常耗时。

AWS 提供了各种部署和自动化工具,帮助您构建、配置和搭建基础设施组件来托管应用程序。部分工具属于 PaaS 模式,您只需要关注应用程序的构建和部署策略,AWS 会自动提供支持该应用程序所需的基础设施。其他服务则使您能够定义基础设施模板,这些模板可以反复使用进行配置。通过使用 基础设施即代码IaC),您可以起草一个模板,描述服务和资源如何配置。然后,AWS 会构建该基础设施及其所有组件,供您托管应用程序。自动化基础设施部署带来了多个好处,其中包括通过在整个组织内共享您的 模板 来实现全球规模扩展,进而强制执行公司标准和安全最佳实践。此外,通过避免手动配置,您还可以减少人为错误的可能性。

在本章中,我们将探讨一些核心的自动化和部署工具,帮助您更快地将解决方案推向市场。

本章将涵盖以下主题:

  • 了解使用 Amazon Elastic Beanstalk 进行应用程序部署

  • 了解使用 Amazon CloudFormation 的基础设施即代码(IaC)优势

  • 介绍使用 AWS OpsWorks 协调 Chef 和 Puppet 解决方案

  • 使用 Lambda 进行 IT 自动化

技术要求

为完成本章的练习,您需要以 IAM 用户 Alice 的身份登录 AWS 账户,该用户已在第四章身份与访问管理中设置。

了解使用 Amazon Elastic Beanstalk 进行应用程序部署

Amazon Elastic Beanstalk是一项服务,它使你能够部署应用,而无需手动配置支撑应用的底层基础设施。Amazon Elastic Beanstalk 负责所有繁重的工作,包括为托管和管理你的应用提供必要的基础设施。这包括容量配置、扩展、负载均衡和健康监控。

如果你的应用是用支持的语言之一开发的,包括 Go、Java、.NET、Node.js、PHP、Python 等,Amazon Elastic Beanstalk 将使用一个或多个 AWS 资源(如 EC2 实例)来构建平台,以运行你的应用。你只需要遵循规定的过程来部署你的应用。

另一个可以考虑的选项是使用 Elastic Beanstalk 来部署 Docker 容器。这个方式给你更多的灵活性,因为使用 Docker 容器,你可以配置你的运行时环境,选择所需的编程语言、支持的平台以及任何依赖项。因此,你不受通常与其他平台相关的限制。

亚马逊 Elastic Beanstalk 并不限制你使用特定的底层基础设施设计。你可以修改底层基础设施组件的部署方式——例如,你可以指定部署的 EC2 实例类型和大小,或者强制要求在自动扩展组中部署一定数量的 EC2 实例。最终,你仍然掌控基础设施的配置方式,但无需进行复杂的手动配置,这些都由 Amazon Elastic Beanstalk 来处理。一旦你的应用部署完成,你可以管理环境并在稍后部署应用更新或版本。

现在,让我们来看一下 Amazon Elastic Beanstalk 服务的核心组件。

Amazon Elastic Beanstalk 的核心组件

AWS Elastic Beanstalk 为托管你的应用创建的基础设施组件被称为环境。每个环境只能运行一个应用版本,但你可以同时为不同的应用版本创建多个环境。如果需要,你可以修改环境并在发布新更新时部署应用升级。

在启动 Elastic Beanstalk 环境时,你需要选择环境层。你选择的环境层由你部署的应用类型决定,并最终决定 Elastic Beanstalk 将配置哪些资源来支持你的应用。Elastic Beanstalk 可以配置两种环境层:Web 服务器环境层工作者环境层

Web 服务器环境层

该环境是为您的应用堆栈的前端层设计的,例如您的电子商务应用的前端 用户界面UI)。AWS Elastic Beanstalk 将提供一个旨在通过弹性负载均衡器接受您的 Web 应用程序的入站流量、提供自动扩展组配置形式的可扩展性并包含一个或多个 EC2 实例的环境。

下图展示了典型的架构部署:

图 12.1 – AWS Elastic Beanstalk – Web 服务器环境层

图 12.1 – AWS Elastic Beanstalk – Web 服务器环境层

作为 Web 服务器环境层 的一部分,AWS Elastic Beanstalk 会在多个 AZ(可用区)中部署 EC2 实例。然后,您的应用程序会部署到这些实例上。此外,Amazon Auto Scaling 会作为环境的一部分配置,以便在应用需求增加时扩展,或在需求下降时缩减。您将完全控制用于扩展的策略及其参数。AWS Elastic Beanstalk 还将部署一个软件堆栈,具体取决于 容器类型,即用于该环境的基础设施拓扑和软件堆栈。例如,如果您在 Windows 上部署 .NET 应用程序,则 Elastic Beanstalk 配置的环境将包括 Microsoft Windows 操作系统、Windows EC2 实例和 Internet Information Services+IIS)的一个版本。

AWS Elastic Beanstalk 还会配置一个指向负载均衡器的环境 URL,格式为 app-name.region.elasticbeanstalk.com。该 URL 被别名为弹性负载均衡器的 URL。您还可以使用 Amazon Route 53 将此 URL 与您选择的 CNAME 记录进行别名,例如您的公司域名。这样,您就可以使用更友好的名称,如 myapp.mycompany.com

此外,每个 EC2 实例将配置一个名为 主机管理器HM)的软件组件。HM 负责以下任务:

  • 部署应用程序

  • 聚合服务器的事件和指标

  • 生成实例级事件

  • 监控应用程序日志文件中的关键错误

  • 监控应用程序服务器

  • 为 EC2 实例打补丁

  • 轮换应用程序的日志文件并将其发布到 Amazon S3

接下来,我们将查看工作者环境层。

工作者环境层

该环境用于后台操作。在多层应用架构中,这代表了应用程序堆栈中的中间件、应用程序和后端数据库层。AWS Elastic Beanstalk 提供了一个适合此类后台操作的环境,包括一个自动扩展组、一个或多个 Amazon EC2 实例和一个 IAM 角色。此外,如果您尚未配置自己的队列,AWS Elastic Beanstalk 还会为您配置一个 Amazon SQS 队列。

AWS Elastic Beanstalk 还将在每个 EC2 实例上安装一个守护进程。该守护进程将从 Amazon SQS 队列中读取消息,并将这些数据发送到在工作环境层中运行的应用程序服务器进行处理。这个过程如下图所示:

图 12.2 – AWS Elastic Beanstalk – 工作环境层

图 12.2 – AWS Elastic Beanstalk – 工作环境层

AWS Elastic Beanstalk 还将使用名为Amazon CloudWatch的服务监控你的 EC2 实例的健康状况。我们将在第十三章中查看 Amazon CloudWatch,AWS 上的管理与治理

除此之外,AWS Elastic Beanstalk 还可以帮助你使用各种部署类型来部署和管理应用程序堆栈,包括一次性全部部署滚动部署带附加批次的滚动部署不可变部署流量分割。这些部署类型使你能够设计符合特定业务需求的应用程序部署和任何持续更新。

在本节中,我们学习了 AWS Elastic Beanstalk 服务,它是 AWS 上的一个应用程序部署和管理服务。AWS Elastic Beanstalk 允许开发人员专注于应用程序代码,而无需对基础设施组件进行详细配置以支持应用程序。AWS Elastic Beanstalk 将提供一个高可用且可扩展的基础设施架构,并让你控制如何配置这些基础设施组件,以支持你的特定需求。

在下一节中,我们将研究 Amazon CloudFormation 服务,它使你能够使用 JSON 或 YAML 代码编写的模板来架构你的底层基础设施资源。

了解使用 Amazon CloudFormation 的 IaC 的好处

使用代码描述并自动部署基础设施组件的方法被称为 IaC(基础设施即代码)。IaC 是一个基本组件,使你能够在云中自动化基础设施构建。

使用代码构建基础设施可以大大改善部署过程,因为代码是由机器执行的。这也意味着,任何通过代码部署的基础设施都不容易受到人为错误的影响,这些错误是手动部署所固有的。此外,你还可以为重复部署创建模板,并为这些模板启用版本控制。通常,你希望使测试环境和生产环境相互模拟,以确保一旦应用程序通过测试阶段,它可以轻松部署到生产环境。使用描述你基础设施的模板是避免这些环境之间差异的最佳方法。

Amazon CloudFormation是一个解决方案,可以帮助你使用代码设计、构建和部署基础设施。它帮助你定义要创建和配置的资源,以及这些资源如何相互作用。

CloudFormation 模板

亚马逊 CloudFormation 使用模板,这些是以 JSON 或 YAML 格式编写的文本文件。代码描述了你希望部署的资源以及与这些资源相关的配置信息。例如,如果你需要将安全组作为 VPC 模板的一部分进行部署,你可以指定它的名称以及允许的入站和出站规则。

CloudFormation 模板的最佳之处在于,它们包含你希望 CloudFormation 部署的资源描述。这也可以作为你整个基础设施的技术文档。此外,模板可以重复使用,用于为不同环境部署基础设施。这确保了你在开发和测试环境中拥有相同的架构。虽然每个环境中的配置相同,但它们会是不同的环境,具有不同的资源标识符。

AWS CloudFormation 模板也可以用于接受输入参数值。这有助于加速构建不同环境以进行实验和测试的过程。例如,如果你正在测试一个新应用程序,并且想要根据托管该应用程序的 EC2 实例类型和大小来比较性能水平,你可以部署多个具有不同 EC2 实例类型和大小的测试环境。在部署模板时,输入参数会提示你指定每个环境使用的实例类型和大小。这也使得在不同情况下使用相同模板变得更加容易。

CloudFormation 模板用于部署 CloudFormation 堆栈,堆栈是一个容器,用来组织模板中描述的资源。接下来我们将讨论 CloudFormation 堆栈。

CloudFormation 堆栈

使用 CloudFormation,你可以创建堆栈,这是一个容器,用于将所有相关资源作为一个单元进行集中管理。例如,一个堆栈可能包含 VPC、自动伸缩组、弹性负载均衡器和 Amazon RDS 数据库实例。你可以拥有多个堆栈,部署一组可能需要相互通信的资源。

当你不再需要堆栈中的资源时,你也可以删除堆栈。然后,AWS 会删除堆栈创建时通过模板部署的所有资源。这确保你不会留下任何资源,这通常发生在你手动删除环境中的资源时。这样做还确保你在不再需要测试或开发环境时,能够快速清理掉这些环境。

有时,你可能需要修改你的堆栈——例如,如果你需要升级 EC2 实例类型或更改数据库端点。接下来我们将讨论如何实现堆栈的修改。

变更集

如果你需要对已部署的堆栈资源进行更改,可以创建一个 变更集。AWS CloudFormation 根据你对模板所做更改的摘要创建此变更集,并向你提供提议更改的详细信息。然后,你可以决定是否发布这些更改,或先进行进一步修改。

变更集特别有助于突出可能产生灾难性结果的更改,确保你可以先执行所有预防性任务。例如,如果你仅仅在模板中更改了 Amazon RDS 数据库的名称,AWS CloudFormation 会创建一个新数据库并删除旧数据库。如果在执行此操作之前没有备份 RDS 数据库,你将丢失数据。变更集可以帮助你识别此类不可逆更改发生的地方,并确保你在发布更改之前先手动为 RDS 数据库创建快照。

漂移检测

在对 CloudFormation 堆栈进行任何更改时,推荐的方法是使用变更集。然而,也有可能在 CloudFormation 外部对堆栈资源进行更改。有时,这些更改可能是偶然发生的,但有时你可能会急于进行这些更改,尽管任何更改都应该遵循适当的变更管理流程。

另一个问题是,如果在 CloudFormation 外部进行了更改,那么任何堆栈更新或删除请求可能会失败。AWS 提供了一项名为 漂移检测 的 CloudFormation 服务功能。你可以使用漂移检测来识别在 CloudFormation 管理之外已进行配置更改的堆栈资源。

在本节中,你了解了 AWS CloudFormation 服务,它采用 IaC 方法构建和部署可以支持你应用程序的基础设施资源。CloudFormation 使你能够使用 JSON 和 YAML 格式的文本文件设计模板,这些文件描述了你的资源以及它们的配置方式。

然后,CloudFormation 会按照你想要的方式进行资源的配置工作。CloudFormation 模板用于构建 CloudFormation 堆栈,堆栈将所有相关资源作为一个单元进行管理。

在下一部分,我们将介绍另一项 AWS 服务,它可以帮助你编排和部署为 Chef 和 Puppet 自动化工具设计的应用程序。

使用 AWS OpsWorks 编排 Chef 和 Puppet 解决方案简介

在本节中,我们将简要介绍另一种配置管理和编排服务,称为 AWS OpsWorks。AWS 提供了三种不同的服务,这些服务属于 AWS OpsWorks 产品系列。包括 AWS OpsWorks 堆栈和 AWS OpsWorks for Chef Automate,它们允许你使用 Chef cookbook 进行配置管理。第三个服务是 OpsWorks for Puppet Enterprise,允许你在 AWS 中配置 Puppet Enterprise 主服务器。

OpsWorks for Puppet Enterprise 提供一个 完全托管的 Puppet 主服务器,用于与节点进行通信、配置、部署和管理节点——这些节点可以是 EC2 实例,甚至是本地服务器。该服务还负责处理诸如软件和操作系统配置、软件包安装、数据库设置等任务。

AWS OpsWorks for Chef Automate 让你创建 AWS 管理的 Chef 服务器,包括 Chef Automate 软件解决方案。AWS OpsWorks 创建一个 Chef 服务器,用于管理所有节点,并作为 Chef cookbook 的中央存储库。Chef cookbook 包含使用 Ruby 编程语言编写的配方,使你能够定义需要配置的资源及其属性集合。

AWS OpsWorks for Puppet Enterprise 和 OpsWorks for Chef Automate 要求你了解如何操作 Chef 和 Puppet 软件。如果你更喜欢通过基础设施即代码(IaC)方法部署应用程序,且不熟悉 Chef 或 Puppet,你也可以使用 AWS OpsWorks 堆栈。接下来,我们将看看 AWS OpsWorks 堆栈服务。

AWS OpsWorks 堆栈

到目前为止,你已经知道,部署单个应用程序可能涉及多个在后台运行的资源,包括运行应用程序的主机 EC2 实例、用于存储应用程序数据的后端数据库,如 Amazon RDS、用于分配流量的负载均衡器等。这些相关的资源被称为堆栈。

一个堆栈是你 AWS 资源的容器,例如你的 EC2 实例、RDS 数据库及所有相关组件,这些资源在逻辑上一起管理。每个堆栈至少包含一层,但可以有更多层。

让我们考虑一个典型的例子,包含以下三个层次来支持应用程序:

  • 一个后端数据库层,可以是自托管的数据库解决方案,也可以是如 Amazon RDS 这样的托管服务

  • 一个应用程序层,由 EC2 实例或容器组成

  • 一个负载均衡层,承载你的应用程序负载均衡器,将流量分配到应用层

以下图表展示了此配置:

图 12.3 – AWS OpsWorks 堆栈

](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_12_03.jpg)

图 12.3 – AWS OpsWorks 堆栈

Amazon OpsWorks 堆栈不仅有助于构建您的堆栈,还可以监控堆栈的性能和健康状态、安全权限等。使用 AWS OpsWorks 堆栈,您无需创建或管理 Chef 服务器,因为 OpsWorks 堆栈会为您执行部分工作。

AWS OpsWorks 堆栈使用两种类型的层,我们将在接下来讨论这两种层。

AWS OpsWorks 层

OpsWorks 层代表您的整体应用程序堆栈中的特定服务或任务。例如,您的 EC2 实例可以代表应用程序层,用于托管应用程序。接下来,您的应用程序负载均衡器将代表负载均衡层,将流量分布到 EC2 实例之间。每个层都由一个模板组成,允许您指定正在部署的资源的组件。例如,对于应用程序层,这将包括您的 EC2 实例的安全组或 IP 地址详细信息。您可以部署任何支持的操作系统,甚至可以将本地服务器添加到堆栈中。

AWS OpsWorks 堆栈不会为您提供 Chef 服务器或 Puppet Enterprise 主服务器;相反,所有管理任务都由 AWS OpsWorks 通过安装在 Amazon EC2 实例上的嵌入式 Chef Solo 客户端执行。

服务层

AWS OpsWorks 还可以扩展您的堆栈,包括服务层,可用于构建完整的多层应用程序解决方案。这些服务层可以包括以下内容:

  • 亚马逊关系型数据库服务 (RDS): 此层将使您能够将您的应用程序集成到现有的 RDS 数据库部署中。

  • 弹性负载均衡:此层将使您能够在多个可用区内分发流量到您的 EC2 实例群中,同时提供高可用性功能。

  • 亚马逊弹性容器服务 (ECS) 集群:此层将使您能够创建一个 ECS 集群层,允许您将 OpsWorks 堆栈连接到运行基于 Docker 的应用程序的 ECS 集群。

在本节中,我们介绍了 AWS OpsWorks 套件的服务,它允许您使用 Chef 和 Puppet 编排应用程序部署解决方案。您还了解了 OpsWorks 堆栈服务,它允许您创建和管理堆栈和应用程序。

在接下来的部分中,我们将看看 AWS Lambda 服务以及如何在 AWS 上使用它来自动化管理任务。

使用 Lambda 进行 IT 自动化

第七章AWS 计算服务,我们了解到AWS Lambda是一种无服务器计算服务,允许您在云中运行代码而无需预配或管理服务器。使用 AWS Lambda,您只需上传代码并根据特定触发器执行它。AWS Lambda 将提供运行代码所需的所有基础设施,无论是计算能力、内存还是临时存储。

你的代码可以从各种 AWS 服务和 SaaS 应用程序中自动触发,甚至可以直接从任何 Web 或移动应用程序中调用。你可以将 AWS Lambda 与其他无服务器产品(如 API Gateway、DynamoDB 和 Amazon S3 静态网站托管服务)结合使用,为你的业务或客户构建终极的无服务器应用程序。

除此之外,Lambda 还可以用来帮助自动化各种日常管理任务。这些任务可以是由特定事件触发的任何重复性任务,甚至可以是根据特定的时间表进行触发。例如,你可以自动化固件更新的安装,启动和停止 EC2 实例,安排安全组更新(如果你需要进行更改),等等。

在本章即将进行的练习中,我们将研究使用 AWS Lambda 的一个实际用例,帮助你完成定期停止和重新启动 EC2 实例的常见管理任务。

练习 12.1 —— 使用 AWS Lambda 定期停止和启动 EC2 实例

想象一种场景,你需要运行一组按需的 EC2 测试服务器,供你的用户验收测试UAT)团队对即将开发的应用程序进行多个功能和技术测试。你的 UAT 团队仅在周一至周五的早上 9 点到下午 5 点之间工作。UAT 团队只需要在这段时间内访问测试服务器集群。与其让技术人员每天早上手动启动所有服务器,晚上再关闭它们,你可以使用 AWS Lambda 自动化这一过程。你不希望在不需要的情况下让按需 EC2 实例运行,因为每个小时都会产生费用。

在本练习中,我们将学习如何配置 AWS Lambda,以便在定义的时间表下自动停止和启动你的 EC2 实例。

要完成本章的练习,你需要从本书的 Packt GitHub 仓库下载示例 IAM 策略,下载地址:github.com/PacktPublishing/AWS-Certified-Cloud-Practitioner-Exam-Guide

步骤 1 - 启动 EC2 实例

要完成此练习,你需要部署一个运行 Linux 2 AMI 的 EC2 实例:

  1. 作为 IAM 用户Alice,登录到 AWS 管理控制台。

  2. 导航到 EC2 控制台,确保你在us-east-1(北弗吉尼亚)区域。

  3. 在左侧菜单中点击实例,然后点击启动实例按钮。

  4. 对于步骤 1:选择 Amazon 机器镜像 (AMI),选择Amazon Linux 2 AMI。

  5. 对于步骤 2:选择实例类型,选择t2.micro实例类型,然后点击下一步:配置实例详情按钮。

  6. 对于步骤 3:配置实例详情,提供以下关键信息:

    • 对于网络,选择默认 VPC。

    • 对于 子网,选择表示 us-east-1a 默认子网的子网 ID。

    • 自动分配公有 IP 旁边的文本框中,确保选择了 启用

    • 保持所有其他选项为默认值,并点击页面底部的 下一步:添加存储 按钮。

  7. 对于 步骤 4:添加存储,将所有选项保持为默认值,然后点击页面底部的 下一步:添加标签 按钮。

  8. 对于 名称,以及 UAT-Server-01

  9. 接下来,点击页面底部的 下一步:配置安全组 按钮。

  10. 对于 步骤 6:配置安全组,确保选择了 创建一个新的安全组 选项,并将 安全组名称 设置为 UAT-SG。这将代表我们的 UAT 测试服务器组。

  11. 接下来,您需要配置入站规则。您应该已经定义了一个预配置的入站规则,允许来自互联网的 SSH 流量,如下截图所示:图 12.4 – 配置安全组

    图 12.4 – 配置安全组

  12. 点击页面底部的 审查并启动 按钮。

  13. 在下一页,检查您的配置,然后点击页面底部的 启动 按钮。

  14. 系统将提示您选择一个现有的密钥对或创建一个新的密钥对。您可以使用之前练习中创建的现有密钥对。您需要勾选复选框以确认您有权访问该密钥对,然后点击 启动实例 按钮。

  15. 最后,点击 查看实例 按钮,返回到 EC2 仪表板,在那里您可以看到刚刚启动的实例。

由于我们将使用 Lambda 函数来停止和启动这些 EC2 实例,您需要记录 EC2 实例 ID,如下截图所示。请注意,您的 EC2 实例 ID 将与此截图中的不同:

图 12.5 – EC2 实例 ID

图 12.5 – EC2 实例 ID

一旦实例启动并运行,我们就可以开始创建必要的 IAM 策略和 IAM 角色,以便使我们的 Lambda 函数能够启动和停止我们的 EC2 实例。

步骤 2 - 为您的 Lambda 函数创建 IAM 策略和执行角色

为了使您的 Lambda 函数能够启动和停止 EC2 实例,您需要拥有必要的权限。在此步骤中,您将配置一个 IAM 策略和一个 IAM 角色,以使 Lambda 函数能够对 EC2 实例执行启动和停止操作:

  1. 导航到 IAM 仪表板。

  2. 从左侧菜单中,点击 策略

  3. 点击右侧窗格中的 创建策略 按钮。

  4. 选择 JSON 标签页,并删除编辑工具中的默认 JSON 文本。

  5. 接下来,将以下 JSON 策略文档复制并粘贴到策略编辑器中(您也可以从此书的 Packt GitHub 仓库下载此策略:github.com/PacktPublishing/AWS-Certified-Cloud-Practitioner-Exam-Guide):

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "arn:aws:logs:*:*:*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "ec2:Start*",
            "ec2:Stop*"
          ],
          "Resource": "*"
        }
      ]
    }
    
  6. 点击页面底部的下一步:标签按钮。

  7. 名称,以及Lambda-EC2-Access-Policy

  8. 点击下一步:审查

  9. Lambda-EC2-Access-Policy

  10. 点击页面底部的创建策略按钮。您将收到通知,告知您的策略已创建。

  11. 接下来,您需要为 Lambda 创建一个 IAM 角色。从左侧菜单中,点击角色

  12. 从右侧窗格中点击创建角色

  13. 创建角色页面,确保在选择受信实体类型下选择了AWS 服务选项。

  14. 接下来,在选择用例下,选择Lambda

  15. 点击页面底部的下一步:权限按钮。

  16. Lambda-EC2上,应该会将列表过滤到您刚刚创建的策略。选择此策略并点击页面底部的下一步:标签按钮。

  17. 名称,以及Lambda-EC2-Start-Stop-IAM-Role

  18. 点击Lambda-EC2-Start-Stop-IAM-Role

  19. 点击页面底部的创建角色按钮。

  20. 您将收到通知,说明 IAM 角色已创建。

现在您的角色已创建,您可以创建 Lambda 函数来停止和启动您的 EC2 实例。

第 3 步 - 创建停止和启动 EC2 实例的 Lambda 函数。

现在,让我们创建一个 Lambda 函数,以在预定的时间表上停止和启动您的 EC2 实例:

  1. 从 AWS 管理控制台页面顶部的服务下拉列表中,选择Lambda,它位于计算类别下。

  2. 从左侧菜单中点击函数

  3. 在右侧窗格中点击创建函数按钮。

  4. 选择从头开始创建选项。

  5. StopEC2Instances下。

  6. 对于运行时,选择Python 3.8

  7. 接下来,在权限下,展开更改默认执行角色

  8. 执行角色下,选择使用现有角色。接下来,从现有角色下拉列表中,选择您之前创建的 IAM 角色。

  9. 点击创建函数按钮。

  10. 您将被重定向到StopEC2Instances功能页面。

  11. 接下来,在StopEC2Instance文件夹中双击lambda_function.py文件。在右侧窗格中,您将看到一些示例代码。

  12. 删除示例代码,并将其替换为以下代码:

    us-west-1 Region with the Region your EC2 instance is in. In our example, the Region would be us-east-1. 
    
  13. 接下来,您将注意到示例代码引用了两个 EC2 实例。将其替换为您在此练习中步骤 1 - 启动 EC2 实例中部署的服务器的实例 ID,确保实例 ID 放在单引号中。

  14. 接下来,点击配置标签。

  15. 常规配置窗格中点击编辑按钮。

  16. 接下来,将超时值设置为 10 秒。

  17. 点击保存按钮。这将带您返回函数页面。点击代码选项卡。

  18. 重新检查您的 Lambda 代码,并确保您已完成所有前面的更改。接下来,点击部署按钮。

  19. 如果需要,点击左侧面板中的省略号图标,调出主菜单并点击函数链接。

  20. 现在,您应该看到您的函数列表,其中包括刚刚创建的StopEC2Instances函数。

  21. 重复步骤 115,创建另一个函数。这次,您将创建一个用于启动 EC2 实例的函数。对于步骤 5,输入与之前不同的函数名称;例如,StartEC2Instances

  22. 对于步骤 9,将以下代码复制并粘贴到编辑器面板中,记得删除已经存在的示例代码:

    import boto3
    region = 'us-west-1'
    instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
    ec2 = boto3.client('ec2', region_name=region)
    def lambda_handler(event, context):
        ec2.start_instances(InstanceIds=instances)
        print('started your instances: ' + str(instances))
    
  23. 记得还要将区域更改为us-east-1,并将实例 ID 修改为您 EC2 实例的 ID。

  24. 部署完函数后,点击左侧菜单中的链接,返回函数列表(如果需要,首先点击省略号图标)。

如下截图所示,您现在应该有两个函数,将用于停止和启动您的 EC2 实例:

图 12.6 – 函数

图 12.6 – 函数

接下来,您将创建 CloudWatch 事件规则,帮助您在预定时间执行 Lambda 函数。我们在第十三章《AWS 管理与治理》中简要讨论了 CloudWatch 事件。我们将在下一章详细介绍 CloudWatch。

步骤 4 - 创建 CloudWatch 事件规则以触发 Lambda 函数

在此步骤中,您将学习如何创建 CloudWatch 事件规则,以便在特定时间触发您的 Lambda 函数:

  1. 导航到 CloudWatch 仪表板。您可以从 AWS 管理控制台页面顶部的搜索栏中搜索 CloudWatch,或者从服务列表中的管理与治理类别中点击CloudWatch链接。

  2. 从左侧菜单中,点击规则,在事件下。

  3. 点击创建规则按钮。

  4. 对于步骤 1: 创建规则,在事件模式下选择计划

  5. 接下来,选择Cron 表达式。CRON 表达式是由六个字段组成的字符串,这些字段用空格分隔,表示一组时间。它们可以用作定期执行特定任务的计划。

  6. Cron 表达式旁边的文本框中,您需要输入一个表达式,告诉 Lambda 何时停止您的实例。要了解如何定义您的表达式,请访问docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html

  7. 对于本练习,我们希望在晚上 6 点停止我们的 EC2 实例。我们的 UAT 测试人员通常在下午 5 点下班,但以防有人决定稍微加班,我们可以在下午 6 点执行 Lambda 停止函数。

  8. 你可以使用的 cron 表达式来执行 Lambda 停止函数是**0 18 ? * MON-FRI ***。这还会显示下一个 10 次触发及其执行时间,如下图所示:图 12.7 – AWS CloudWatch 事件规则 cron 表达式

    ](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_12_07.jpg)

    图 12.7 – AWS CloudWatch 事件规则 cron 表达式

  9. 接下来,在目标下点击添加目标按钮。

  10. 从出现的下拉列表中选择Lambda 函数

  11. 函数旁边的下拉列表中选择StopEC2Instances函数。如你所记,这个 Lambda 函数将停止你的 EC2 实例。

  12. 接下来,点击配置详情按钮。

  13. 对于StopUATInstances

  14. Stops UAT instances at 6 PM Monday to Friday中。

  15. 接下来,点击创建规则按钮。

  16. 重复步骤 315以启动你的 EC2 实例。对于此规则,确保在步骤 6中,对于StartUATInstances的名称和描述,填写Starts UAT instances at 8 AM Monday to Friday

  17. 到此为止,你已经确保了你的计划事件会自动触发相关的 Lambda 函数,如下图所示:

图 12.8 – CloudWatch 事件规则

](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_12_08.jpg)

图 12.8 – CloudWatch 事件规则

你可以等到指定的时间,检查你的 EC2 实例是否已被停止并重新启动。或者,你可以直接测试你的 Lambda 函数,这正是我们接下来要做的。

第 5 步 - 测试你的 Lambda 函数

我们可以测试我们的 Lambda 函数,而不是等待计划的时间,以查看函数是否正常工作:

  1. 返回 Lambda 仪表板。

  2. 从左侧菜单中选择函数。然后,在右侧窗格中选择StopEC2Instances函数。

  3. 接下来,从操作下拉列表中选择测试

  4. 对于StopEC2Instances,点击测试按钮,在测试事件窗格中。

  5. 如果函数配置正确,你应该看到执行结果:成功的消息,并有一个展开详情窗格的选项。此窗格将提供执行的详细信息,如下图所示:图 12.9 – Lambda 函数执行详情

    ](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_12_09.jpg)

    图 12.9 – Lambda 函数执行详情

  6. 在另一个浏览器窗口中,导航到你的 EC2 控制台。在这里,你应该会发现你的 EC2 实例已经停止。

  7. 返回 AWS Lambda 浏览器标签页,从左侧菜单中点击函数

  8. 重复步骤 25,这次选择StartEC2Instances函数。

  9. 几秒钟内,你应该能看到该函数成功执行,并且你可以与 EC2 控制台进行交叉验证。你应该会发现你的 EC2 实例已重新启动。

在本练习中,您学习了如何创建 Lambda 函数,这些函数可以用来为您的组织执行重复的 IT 任务,并帮助自动化各种流程。您还学习了如何使用 AWS CloudWatch 事件规则和 cron 表达式来调度这些重复的任务。

练习 12.2 – 清理工作

在本练习中,您将终止 EC2 实例并删除 Lambda 函数,以避免对您的 AWS 账户产生不必要的费用:

  1. 导航到 EC2 控制台并确保您处于us-east-1(北弗吉尼亚)区域。

  2. 从左侧菜单中点击实例

  3. 在右侧面板中,选择您之前启动的 EC2 实例。然后,从实例状态下拉菜单中,点击终止实例。确认您希望终止该实例;AWS 会终止它。

  4. 接下来,导航到 Lambda 控制台。

  5. 从左侧菜单中点击函数。在右侧面板中,对于每个函数,选择该函数。然后,从操作下拉列表中,点击删除。在弹出的对话框中点击删除按钮以删除该函数。

  6. 接下来,导航到 CloudWatch 管理控制台。

  7. 从左侧菜单中,点击规则,位于事件下。

  8. 对于每个规则,选择该规则。然后,从操作下拉列表中,点击删除。在弹出的对话框中点击删除按钮以删除该规则。

您的资源现已从 AWS 账户中移除。在接下来的部分,我们将提供本章的总结。

总结

AWS 提供了众多服务和工具,帮助您构建高效的应用程序部署策略,专注于应用程序本身,而不是支持它的基础设施。Amazon Elastic Beanstalk 帮助您的开发人员专注于应用程序代码,而不是如何配置每个细节的基础设施组件来支持它。

AWS 还为您提供了使用 IaC(基础设施即代码)方法构建端到端基础设施组件的工具,这大大提高了速度和敏捷性,并减少了人工配置中容易出现的人为错误。AWS CloudFormation 是一款智能工具,可以接受声明式代码,帮助架构师完成基础设施部署。

您还学习了如何使用无服务器函数即服务FaaS)工具,如 AWS Lambda,来自动化日常的管理任务。

在下一章中,我们将探讨各种管理和治理工具,这些工具将帮助您高效地管理 AWS 资源,并设计出更好的性能、安全性和操作性。

问题

回答以下问题以测试您对本章的理解:

  1. 哪个 AWS 服务会自动配置所需的基础设施(例如,负载均衡、自动扩展和健康监控),并使开发人员能够自动部署应用程序的内置支持语言,如 Node.js、PHP 和 Python?

    1. AWS CloudFormation

    2. AWS Lambda

    3. AWS Elastic Beanstalk

    4. AWS Deployer

  2. 您在一家 Web 应用程序开发公司工作,并被要求设计一个可以通过脚本化模板反复创建的基础架构解决方案。这将使您能够为开发人员创建独立的沙箱环境。一些基础设施组件将包括 VPC 的设置和配置、EC2 实例、S3 桶等。哪个 AWS 服务使您能够设计一个基础架构模板,并将其部署以创建可重复的基础架构供开发人员用作沙箱环境?

    1. AWS 系统管理器

    2. AWS CloudFormation

    3. AWS Config

    4. AWS FSx for Lustre

  3. 创建 CloudFormation 模板时使用哪两种文件格式?(选择 2 种。)

    1. JSON

    2. YAML

    3. XML

    4. HTML

    5. Java

  4. 哪个 AWS 服务提供与 Chef 配方的集成,以启动新的应用程序实例、配置应用程序服务器软件并部署应用程序?

    1. Amazon CloudFormation

    2. Amazon Elastic Beanstalk

    3. Amazon OpsWorks

    4. Amazon Cookbook.

  5. 要为 Elastic Beanstalk 部署配置哪种类型的环境,以承载后端应用程序层服务?

    1. Web 服务器环境层

    2. 工作者环境层

    3. 后端环境层

    4. 混合环境

  6. Amazon CloudFormation 服务的哪个功能使您能够审查任何您希望对环境进行的提议更改,并确定这些更改将如何影响您的环境?

    1. 漂移检测

    2. 变更集

    3. 堆栈集

    4. 变更管理

第十三章:AWS 上的管理与治理

在 AWS 上管理和监控您的资源是确保应用程序按预期运行、具有高可用性和安全性并以最具成本效益的方式运行的关键部分。您希望能够监控您的应用程序如何被使用,识别任何可能影响性能和可用性的技术问题,并确保只有授权实体可以访问。此外,您需要能够审计您的环境,访问诸如访问模式等信息,并识别可能表明潜在性能或安全问题的异常情况。您还希望能够执行变更管理流程,确保对 AWS 资源所做的任何修改或更改都得到记录和批准。

最后,作为维护工作负载的日常管理任务的一部分,您希望能够有效地管理您的资源,如打补丁、执行更新,并尽可能自动化任务。

本章将介绍一系列 AWS 服务,这些服务使您能够有效地监控、报告和审计您的 AWS 资源,从而实现变更管理流程并执行日常任务的集中管理。我们还将介绍一些工具,这些工具可以为您提供有关如何提高资源的性能、容错能力、安全性和成本效益的建议。

本章涉及以下主题:

  • Amazon CloudWatch 的基础知识

  • 使用 AWS CloudTrail 满足合规要求

  • 学习如何使用 AWS Config 进行变更管理

  • 使用 AWS Systems Manager 管理您的 AWS 资源

  • 学习如何使用 AWS Trusted Advisor

  • 理解 AWS Well-Architected Framework

技术要求

要完成本章的练习,您需要以 身份与访问管理IAM)用户 Alice 登录到您的 AWS 账户。

Amazon CloudWatch 的基础知识

Amazon CloudWatch 使您能够监控运行在 AWS 上以及本地的 AWS 资源和应用程序。通过 Amazon CloudWatch,您可以实时查看资源的表现。使用 CloudWatch,您可以收集资源和应用程序的度量、日志和事件,并将这些数据记录到 CloudWatch 中进行分析和识别趋势。度量是按时间顺序排列的数据点集,这些数据点会被发布到 CloudWatch 中。

Amazon CloudWatch 可用于配置警报,当这些指标在指定时间段内突破某些阈值时,您可以生成警报并采取相应的措施进行修复。

使用 Amazon CloudWatch,你可以跟踪并收集 Amazon EC2 实例、Amazon DynamoDB 表、Amazon 关系型数据库服务RDS)实例等的指标。每个 AWS 服务都会将指标发布到 Amazon CloudWatch。你可以获得基本的免费指标和详细的付费指标。

Amazon CloudWatch 的一些典型使用案例包括以下内容:

  • 基础设施监控与故障排除:监控关键指标、日志并可视化趋势,帮助识别潜在问题和瓶颈,使你能够进行根本原因分析,帮助解决事件和问题。

  • 主动资源优化:配置监控指标值的警报,如果发生超限,将触发警报。定义自动修复措施,例如配置自动扩展,以启动新实例并终止失败的实例。向管理员和系统操作员发送通知警报。

  • 日志分析:分析来自各种来源的日志信息,以帮助解决操作问题、潜在的安全攻击或应用性能问题,并采取有效措施进行修复。

让我们更详细地了解一下指标。

CloudWatch 指标

CloudWatch 指标表示可以作为按时间排序的数据点集合进行监控的变量。任何你使用的服务都会向 CloudWatch 报告指标。例如,你可以监控 EC2 实例的 CPU 利用率,帮助你跟踪该实例的性能。

每个数据点将包括时间戳。如果资源在将指标发布到 CloudWatch 时没有提供时间戳,则 CloudWatch 会基于接收数据点的时间创建时间戳。下图展示了过去三天内,基于 Linux 的 EC2 实例的 CPU 利用率指标:

图 13.1 – 运行电子商务应用程序的 EC2 实例的 CPU 利用率指标

图 13.1 – 运行电子商务应用程序的 EC2 实例的 CPU 利用率指标

Amazon CloudWatch 提供了广泛的内置指标,但你也可以根据需求创建自定义指标:

  • 内置指标:Amazon CloudWatch 允许你从大量 AWS 服务(如 Amazon EC2、Amazon S3、Amazon RDS 等)中收集默认指标。一个例子包括 EC2 实例的 CPU 利用率、磁盘读/写和数据传输指标。

  • PutMetricData API 操作将其发布到 CloudWatch。

需要注意的重要一点是,指标存在于它们创建的区域中。但是,你可以配置 跨账户跨区域的仪表板,这样可以帮助你查看相关账户之间的 CloudWatch 指标、日志和警报,并了解跨区域应用的健康状况和性能。

CloudWatch 将存储你的指标数据最长 15 个月。超过 15 个月的数据点将过期,因为新的数据点会按滚动方式加入。

接下来,让我们来看一下如何使用 AWS CloudWatch 仪表板来集中查看你的资源。

仪表板

你可以在 Amazon CloudWatch 上创建一个或多个仪表板,允许你在一个视图窗格中可视化和监控资源及其重要的指标。除了通过各种图表和图形可视化你的指标外,你还可以在仪表板上发布你的 CloudWatch 警报(将在下文讨论),以便更高效地关注潜在问题。

CloudWatch 仪表板可以配置为提供跨 AWS 账户和区域的资源健康状况洞察,利用跨账户功能。此功能与 AWS Organizations 集成,使你能够高效地构建跨账户仪表板。以下是一个 CloudWatch 仪表板的快速截图:

图 13.2 – 一个 CloudWatch 仪表板

图 13.2 – 一个 CloudWatch 仪表板

警报

你可以配置 CloudWatch 警报来监控特定资源的指标,例如 EC2 实例的平均 CPU 使用率。如果该指标超过特定阈值并持续一定时间,警报就会被触发以采取某些措施。警报只有在阈值被超出并持续一段指定时间后才会触发,这一点非常重要。你不希望警报因偶尔的瞬时波动而被触发。例如,你可能希望在 EC2 实例的平均 CPU 使用率超过 80% 并持续 15 分钟时触发警报。

警报可以处于以下三种状态之一:

  • OK:当指标处于定义为可接受的范围内时,表示“正常”。

  • 警报:当指标超出阈值并持续一段时间时,触发警报。

  • 数据不足:当做出决策所需的数据缺失或不完整时发生。这通常也发生在你首次配置警报时,因为它在等待接收和分析数据。

一旦警报被触发,就可以采取自动行动进行响应,这些行动可能包括以下内容:

  • 简单通知服务(SNS)通知:你可以向管理员发送自动警报(应用到个人A2P),或向应用程序推送通知以采取某些行动(应用到应用,或A2A)。

  • 自动扩展操作:EC2 自动扩展服务可以根据警报状态触发,增加或删除 EC2 实例。如果服务器的平均负载超过给定阈值一段时间(例如,平均 CPU 使用率超过 80% 超过 10 分钟),则可以配置自动扩展组启动更多实例。

  • EC2 操作:你可以让警报触发一个 EC2 操作,例如停止一个 EC2 实例、终止它、重启它或恢复它。实例的恢复仅仅意味着这些实例被迁移到另一台主机上,这是当运行实例的主机硬件出现问题时需要做的事。恢复操作仅会在出现系统状态检查错误时启动。

最后,你还可以将你的警报发布到 CloudWatch 仪表板上,这样可以快速查看你的警报状态。

接下来,我们来看一下 Amazon CloudWatch Logs。

CloudWatch Logs

亚马逊 CloudWatch 提供了一个功能,可以集中收集并存储来自 AWS 和非 AWS 源的日志。这些 AWS 源可能是 EC2 实例、CloudTrail 日志(本章后续会讨论)、Route 53 DNS 查询和 VPC 流量日志。你还可以从非 AWS 源导入日志,例如你的 web 应用访问日志、错误日志和操作系统事件日志。

CloudWatch 为你提供一个中央视图,查看所有日志,无论它们的来源如何——作为 CloudWatch 日志的一部分生成的日志事件,本质上是按时间排序的一系列事件,你可以对其进行查询、分析、搜索和过滤,查找特定的模式或错误代码等。你还可以使用仪表板可视化日志数据,并将这些日志导入到其他应用程序中进行更复杂的查询。

在日志保留方面,日志会被永久保存,永不过期。不过,你可以通过选择 1 天到 10 年之间的保留期来调整保留策略。你还可以使用 Glacier 类别之一将日志文件进一步归档到 Amazon S3,以便长期存储。

让我们接下来看看 CloudWatch Logs 的一些关键组件:

  • 日志事件:这表示由被监控的应用程序或资源记录的某个事件或活动。日志事件将包括时间戳和日志消息。

  • 日志流:它由一系列共享相同来源的日志事件组成。CloudWatch Logs 会将来自同一来源的日志事件分组到一个日志流中。例如,一个日志流可能与特定主机上的 web 服务器访问日志相关联。

  • 日志组:CloudWatch 将这些日志流组织成一个日志组。日志组表示具有相同保留、监控和访问控制设置的日志流。例如,你可以创建一个日志组来收集和组织与多个主机的 web 服务器访问日志相关的所有日志流。

  • 504 Gateway Timeout 错误消息,表示某些通信或网络问题。

在本节中,我们了解了亚马逊 CloudWatch Logs,它可以用于从 AWS 和非 AWS 源将日志信息导入到 CloudWatch。你可以使用 CloudWatch Logs 来分析访问模式、识别安全和技术问题,并协助排查瓶颈。

接下来,我们将了解 Amazon CloudWatch 事件,它是一个接近实时的系统事件流,涉及你的 Amazon 资源。

Amazon CloudWatch 事件

使用 Amazon CloudWatch 事件,你可以创建规则,持续监控你的 AWS 资源,并在给定事件发生时响应某个动作。Amazon CloudWatch 提供了一个接近实时的系统事件流,你定义的规则可以在这些事件发生时触发某个操作。

一个事件的例子是,当某个 EC2 实例进入停止状态,因为有人对该实例执行了关机操作。另一个例子是当一个 IAM 用户登录 AWS 管理控制台时。每个写 API 操作都是发生的事件,你可以选择监控哪些事件,并在这些事件发生时采取必要的行动。

当你定义一个规则来监控某个事件时,你还需要通过选择合适的目标来指定一个动作。目标可以是一个Lambda 函数,一个EC2 实例操作,一个SQS 队列SNS 主题以发布消息,ECS 任务,等等。例如,假设你希望在图像上传到 S3 存储桶后立即触发一个 Lambda 函数来处理该图像。你可以创建一个事件,当上传完成时,Lambda 函数将被调用来处理图像,例如生成多种格式的图像或在图像上添加水印。

你还可以配置 Amazon CloudWatch 事件规则,在给定的计划下触发某个动作,使用标准速率cron 表达式。这在执行日常操作任务时特别有用。在第十二章《AWS 上的自动化与部署》中,你完成了一个练习,涉及每天早上 8 点自动启动一个 EC2 实例,然后在下午 6 点关闭它,周一至周五。

在本节中,我们了解了 Amazon CloudWatch 事件,它允许你使用简单的规则在特定资源发生特定事件时执行某些操作。CloudWatch 事件可以帮助你响应操作变更,以完成工作流和任务,或在需要时采取任何纠正措施。CloudWatch 事件还可以用于计划自动化操作,在某些时间触发,以帮助重复进行日常操作。

重要说明

第十章《应用程序集成服务》中,你了解了 Amazon EventBridge。Amazon CloudWatch 事件和 EventBridge 使用相同的底层服务和 API,Amazon 推荐使用 EventBridge 作为管理事件的首选方式,因为它提供了更多功能。

接下来,你将了解 Amazon CloudTrail,这是一个用于执行治理、合规性、运营和风险审计的服务,适用于你的 AWS 账户。

满足 Amazon CloudTrail 合规性要求

AWS CloudTrail 是一项服务,可以让你记录在 AWS 账户中进行的每一项操作,从而跟踪用户活动和 API 使用情况。CloudTrail 在你创建 AWS 账户时默认启用。它存储事件历史,用户可以通过 CloudTrail 仪表板访问,记录了账户中每项活动的历史。以下截图展示了 CloudWatch 事件历史的示例:

图 13.3 – AWS CloudTrail

图 13.3 – AWS CloudTrail

你可以使用 CloudTrail 强制执行和管理整体合规性与治理要求,因为它可以为你提供按时间排序的系列事件,记录你账户中发生的所有活动。你还可以通过将事件导入 Amazon CloudWatch,并根据需要配置警报或事件规则,以便在特定事件发生时作出响应。AWS CloudTrail 事件提供了 API 和非 API 活动的历史记录。API 活动包括启动新的 EC2 实例或创建新 IAM 用户等操作。非 API 活动指的是其他类型的操作,例如登录 AWS 管理控制台。

AWS CloudTrail 使你能够记录三种不同类型的事件,如下所示:

  • RunInstances API 操作,用于启动如前所示的 EC2 实例,此操作由我们的 IAM 用户执行,DescribeInstances API 操作,用于返回 EC2 实例列表,但不做任何更改。最后,管理事件也可以包括非 API 活动,例如当用户登录到 AWS 管理控制台时。

  • PutObject API 操作。数据事件也称为数据平面操作,通常具有高流量。数据事件的其他示例包括使用 Invoke API 执行的 Lambda 函数,以及对 DynamoDB 表进行的 PutItem API 操作,这会导致新项目被添加到表中。数据事件默认情况下不会被记录。要记录数据事件,你需要创建一个跟踪并明确添加你希望收集事件的受支持资源或资源类型。

  • 每分钟 deleteBucket API 调用次数突然从平均每分钟几十次增加到每分钟 200 次。洞察事件包含与事件相关的信息,如 API、事件发生时间和统计数据,这些信息有助于你了解并应对异常活动。

CloudTrail 在你开启新的 AWS 账户时,会自动记录所有 API 管理事件。事件历史服务会存储 90 天的管理事件,这些事件可以查看并下载。事件历史不包含任何数据事件—为此,你需要创建一个跟踪。接下来,我们来看看跟踪。

跟踪

如果您希望配置 CloudTrail 来存储特定的管理事件或数据事件,并需要超过 90 天的事件历史记录,您可以配置一个轨迹。轨迹是一个配置项,它使 CloudTrail 能够记录特定类型的事件,并将它们交付到 Amazon S3 存储桶、CloudWatch Logs 和 CloudWatch Events。

轨迹可以配置为仅记录单一区域的事件或跨区域记录事件:

  • 单一区域轨迹:CloudTrail 会记录特定于您指定区域的事件,这些日志文件将交付到您指定的 Amazon S3 存储桶。多个轨迹可以交付到同一个 S3 存储桶或不同的存储桶。单个轨迹仅在日志创建的 AWS 区域中可查看。

  • 全区域轨迹:CloudWatch 会记录每个区域的事件,并将事件日志文件交付到您指定的 S3 存储桶。请注意,如果在您创建适用于所有区域的轨迹后,Amazon 添加了新的区域,则该新区域也会自动包含在内。

默认情况下,全区域轨迹是您在 CloudTrail 控制台创建轨迹时的默认选项。此外,CloudTrail 会将来自多个区域的日志文件交付到一个单独的 Amazon S3 存储桶和 CloudWatch Logs 日志组。

大多数 AWS 服务是区域特定的,因此事件会在发生操作的区域中记录。然而,对于像 US East (N. Virginia) 这样的全球服务区域,事件会跨区域记录。

您还可以创建一个 AWS 组织轨迹,它是一种配置选项,可以让您在管理账户和所有 AWS 组织中的成员账户中记录事件。使用组织轨迹将确保您记录所有 AWS 账户中的重要事件。

在这一节中,您了解了 AWS CloudTrail,它是一个可以帮助您审计 AWS 账户并启用合规性、监控和治理的服务。AWS CloudTrail 并非专为性能和系统健康监控而设计。其他监控服务,如 Amazon CloudWatch,旨在帮助您解决与性能或系统健康相关的问题。通常,您会将这些工具一起使用,作为 AWS 服务和资源整体管理的一部分。

在下一节中,我们将介绍 AWS Config 服务,它可以帮助您评估、审核和评估您的 AWS 资源的配置变更,并有助于您的整体变更管理过程。

学习使用 AWS Config 进行变更管理

AWS Config 是一种服务,可以帮助您了解 AWS 资源在 AWS 账户中的配置和部署情况。使用 AWS Config,您可以查看资源之间的关联,了解它们过去是如何配置的,以及这些资源随时间变化的历史记录。

当你开始运行多个环境时,这特别有用,比如开发和生产环境,在这些环境中托管着无数的资源,涵盖了 AWS 上各种服务。例如,你会想了解你的 VPC 是如何配置的,哪些子网和安全组附加到它们上,哪些路由已添加到路由表中,等等。AWS Config 可以帮助你维护所有这些信息的准确数据库,并跟踪它们在 AWS 账户中的更改。

你可以使用 AWS Config 确保你的资源已根据内部指南进行配置,从而满足合规性要求。该服务使你能够有效地实施安全分析、变更管理流程和故障排除操作。

让我们来看看 AWS Config 的一些核心组件。

配置项

一个 JSON diff 文件,突出显示已更改的字段,如下所示的截图所示:

图 13.4 – 显示 EC2 实例配置变更的 AWS Config JSON

图 13.4 – 显示 EC2 实例配置变更的 AWS Config JSON

如前面的截图所示,你可以看到 AWS Config 已记录对我们的 EC2 实例所做的各种更改,例如将实例类型从 t2.micro 升级到 t2.small

配置历史

当你想要回顾资源随时间变化的情况时,这尤其有用。配置历史记录是给定资源在一段时间内的配置项记录。通过使用配置历史记录,你可以回答诸如资源何时首次创建、过去一周内做了哪些更改、以及两天前下午四点做了哪些配置更改等问题。每种资源类型的配置历史文件存储在你指定的 Amazon S3 存储桶中。

配置记录器

必须启用并启动配置记录器,才能使 AWS Config 开始记录对资源所做的更改并创建配置项(CIs)。可以配置配置记录器以记录所有资源,或仅记录每个区域中的特定资源,如下所示的截图所示:

图 13.5 – AWS Config 设置

图 13.5 – AWS Config 设置

你还会注意到,你也可以选择记录全局资源,例如 IAM 资源。

配置快照

这是你资源的配置项集合,以时间点的图像形式表示,位于你的 AWS 环境中。该快照可以用于验证配置,并识别任何配置错误的项。快照可以存储在预定义的 Amazon S3 存储桶中,并可以在 AWS Config 控制台中查看。

配置流

当你在 AWS 账户中创建、修改或删除资源时,会创建新的 CI,并将其添加到配置流中。配置流使用 Amazon SNS 主题来发送通知,每次资源发生更改时都会触发通知。这可以用来提醒管理员,例如,及时发现任何技术或安全问题。

在本节中,你了解了 AWS Config 服务,它是一项帮助你管理 AWS 账户中资源更改的服务。你可以使用 AWS Config 来监视资源之间的关系以及这些配置和关系随时间的变化。

在下一节中,我们将介绍 AWS Systems Manager,它使你能够跟踪和解决 AWS 账户中的操作问题,自动化日常操作任务来管理资源,并对应用程序实施安全措施。

使用 AWS Systems Manager 管理你的 AWS 资源

AWS Systems Manager 是一项使你能够集中管理 AWS 资源的服务。通过 AWS Systems Manager,你可以获得跨 AWS 服务的资源可见性,执行配置管理,并自动化日常操作任务。以前称为 SSM,AWS Systems Manager 可以帮助你强制执行所需的配置状态,并在必要时对任何政策违规采取纠正措施。

AWS Systems Manager 使用文档(以 JSON 或 YAML 编写)的概念,这些文档定义了 Systems Manager 在你的管理资源上执行的操作。这些文档被 AWS Systems Manager 用于实现其各种功能,如操作管理、变更管理、应用管理和节点管理。AWS Systems Manager 提供了大量预定义文档,你也可以创建自己的文档。例如,AWS-CreateRdsSnapshot 文档可以用于为 RDS 实例创建 RDS 快照,如以下屏幕截图所示:

图 13.6 – AWS Systems Manager 预定义文档

图 13.6 – AWS Systems Manager 预定义文档

AWS Systems Manager 提供广泛的功能,包括以下内容:

  • 运行命令:作为节点管理功能的一部分,运行命令功能使你能够在 EC2 实例集群中远程运行 Linux shell 脚本和 Windows PowerShell 命令。这可以用于执行配置更改,安装和更新应用程序。

  • 状态管理器:它确保你的管理实例配置为预定义的状态,使你能够在一组实例中保持配置的一致性,例如防火墙配置、杀毒软件配置等。

  • 清单:它使你能够收集关于 EC2 实例的软件配置资料。清单功能将提供有关应用程序、文件、组件和补丁的信息,涵盖你的管理实例。

  • 维护窗口:作为变更管理功能的一部分,维护窗口服务使您能够安排执行管理任务的时间,例如安装补丁和更新,以避免在正常工作时间干扰您的团队。

  • 补丁管理器:这使您能够自动化 EC2 实例的补丁操作,包括安全性和应用更新。请注意,Windows 服务器上的应用更新仅限于由 Microsoft 发布的更新。

  • 自动化:这使您能够自动化各种维护任务,例如更新 AMI、创建弹性块存储EBS)卷的快照、重置密码以及启动或终止 EC2 实例等。

  • 参数存储:这为您提供了一种安全存储配置数据和机密信息的方法。例如,在第九章AWS 上的高可用性和弹性中,您会回忆起配置“本月的善举”应用程序的数据库连接字符串。数据库连接字符串包含敏感的用户名和密码信息,这些信息以纯文本形式保存在 Amazon S3 存储桶中。此外,当从 S3 存储桶复制数据库连接文件并将其存储在服务器的 HTML 目录中时,存在安全风险。敏感信息应始终以更安全的方式进行存储和管理。AWS 系统管理器的参数存储使您能够将敏感信息(如密码和数据库字符串)作为参数值存储。这些值可以加密存储,您的应用程序可以配置为在需要时从参数存储中安全地检索这些值。

  • 分发器:这使您能够创建并将应用程序包部署到您管理的实例上。您可以将软件包创建为操作系统识别的可执行文件,从而实现轻松部署。分发器还可以重新安装新版本的包,并执行就地更新。

  • 会话管理器第七章AWS 计算服务中,我们讨论了堡垒主机的重要性,堡垒主机作为进入点,用于管理您在 VPC 中部署的其他 EC2 实例,跨越公共子网和私有子网。虽然堡垒主机由于其配置或访问方式被设计为高度安全,但您仍然需要管理和维护这些服务器,包括执行安全更新、确保性能水平等。AWS 系统管理器提供了会话管理器,允许您使用基于浏览器的 shell 或命令行界面(CLI)远程访问 EC2 实例。会话管理器提供了安全且可审计的实例管理,无需打开入站端口、维护堡垒主机或管理 SSH 密钥。

  • 事件管理器:这是另一个 Systems Manager 提供的功能,帮助您管理和解决影响 AWS 托管应用程序的事件。事件管理器服务提供了一个管理控制台,能够跟踪所有事件,通知响应人员事件的影响,识别有助于故障排除的数据,并帮助您恢复服务。

这些只是 AWS Systems Manager 提供的一些功能。这里是清单控制台的快速截图,展示了我在 AWS 账户中部署的单个 EC2 实例的相关信息:

图 13.7 – AWS Systems Manager 清单

图 13.7 – AWS Systems Manager 清单

到目前为止,我们已经看过了 AWS Systems Manager 服务,它提供了一套功能,帮助您集中管理和自动化日常操作,以便管理您的 AWS 资源。

在下一节中,您将了解 AWS Trusted Advisor 服务,该服务使您能够检查您的 AWS 环境,并识别您的资源是否按照 AWS 最佳实践进行配置。

学习如何使用 AWS Trusted Advisor

AWS Trusted Advisor 服务分析您的资源及其配置方式。该服务帮助您将资源的配置与最佳实践进行对比,并识别节省成本、提高系统可用性和性能或解决安全问题的机会。

特别地,Trusted Advisor 服务将报告其针对以下核心类别的分析:

  • 成本优化:对您的资源进行检查,识别哪些资源未充分利用。AWS Trusted Advisor 会根据这些信息提供减少成本的建议。例如,Elastic IP 地址只有在附加到正在运行的 EC2 实例时才是免费的。如果 Elastic IP 地址没有被使用(即没有附加到任何实例,或者附加到已停止的实例上),AWS 会按小时收费。

  • 性能:提供关于如何改善应用程序响应性的建议。例如,如果您为一个似乎被大量使用的 EC2 实例使用的是 gp2 EBS 卷类型,系统会建议您升级为 io1 EBS 卷,从而提高性能。

  • 安全性:报告任何未按照安全最佳实践配置的资源。例如,如果您没有在根账户上配置 MFA,AWS 会将其视为潜在的安全风险,并建议您配置 MFA。

  • 容错性:识别增加 AWS 解决方案弹性的选项。例如,AWS 会将任何没有配置多可用区(multi-AZ)的 RDS 实例视为风险因素。

  • 服务限制:检查您的 AWS 账户,识别是否接近任何服务限制或配额。例如,当使用 AWS Auto Scaling 服务时,您每个区域的默认限制是最多配置 200 个启动配置。如果您开始超过此限制的 80%,您将在 Trusted Advisor 中看到警告。

AWS Trusted Advisor 和支持计划

AWS Trusted Advisor 服务根据您订阅的 AWS 支持计划提供不同级别的检查。如果您仅订阅了 基础 支持计划,您将只能访问安全类别中的六项检查和服务限制类别中的所有检查。

若要访问所有类别中的完整检查范围,您必须订阅 企业商业 支持计划。订阅这两种计划中的任意一种后,您还可以使用 Amazon CloudWatch Events 来监控 Trusted Advisor 检查的状态。

在本节中,我们讨论了 AWS Trusted Advisor 服务,它是一个报告工具,可以帮助你识别资源是否按照最佳实践配置,并检查是否有节省成本的机会。

在下一节中,您将了解 AWS Well-Architected 框架,该框架提供一系列建议,帮助您构建安全、高性能、具备韧性和高效的应用程序基础设施。

了解 AWS Well-Architected 框架

AWS Well-Architected 框架由一系列设计原则和架构最佳实践组成,您可以在构建云解决方案时遵循这些原则。AWS 提供了 Well-Architected 工具,您可以使用它来审查您的应用程序和资源的状态,并将其与最新的 AWS 架构最佳实践进行比较。

Well-Architected 框架包括以下 五大支柱

可靠性

部署在云中的应用程序必须具有抗故障能力。应用程序所依赖的资源(计算、存储、网络和数据库)必须是可用且可靠的。任何这些资源上的技术问题都会导致应用程序变得不可靠,甚至可能会失败。

可靠性支柱还关注你在架构设计中如何迅速从故障中恢复。这是因为故障是不可避免的,你的架构必须能够迅速从故障中恢复。你应该考虑的一个关键概念是,替换故障组件通常比试图找出故障原因并解决故障根本问题更好。这是因为当你花时间排查故障时,可能会导致恢复时间目标RTO)的增加。例如,使用 EC2 时,你可以将应用程序部署在多个实例和多个可用区(AZ)中。然后,你可以配置弹性负载均衡器和自动伸缩服务,确保当某个 EC2 实例发生故障时,流量会被路由到其他健康实例,而故障实例会在后台自动被替换。

性能效率

在设计你的云解决方案时,你需要提供最佳性能的同时,确保优化成本。这意味着你应该根据性能需求选择资源的类型和大小,并持续监控资源,以确保在需求变化时能够维持这些性能水平。如果需求增加,性能不应该受到影响。同时,你应该仅在需要时提供资源,避免资源的低效利用。

你通常需要结合使用多个 AWS 服务中的资源,如计算、存储和网络,架构设计不仅需要仔细规划,还要配置每个资源。例如,如果你的应用托管在伦敦区域,伦敦的用户可能会体验到良好的性能。然而,如果你在南美有用户,可能会因为网络延迟问题导致性能不佳。你可以考虑使用 Amazon CloudFront 在离南美用户更近的边缘位置缓存你的应用内容,从而提升整体应用性能。

安全性

在设计云解决方案时,你应该始终考虑安全性。你需要确保只有授权用户能够安全地访问你的应用程序。你还需要确保数据的完整性、隐私和主权。分配权限给用户时,必须始终遵循最小权限原则,确保只有在执行工作职能时才授予访问权限,而不多于此。

您应该为您的应用程序解决方案制定备份和灾难恢复策略,这也包括确保支撑您应用程序的基础资源。例如,您必须确保数据库有备份,或者定期创建 EBS 快照。另一个例子是配置 Amazon S3 桶复制,并在可能的情况下使用跨区域复制配置。最后,您必须能够审计账户中的每一项活动,可以使用如 AWS CloudTrail 等工具来维护审计日志。

操作卓越

这一支柱专注于通过对工作负载进行频繁、可逆且持续的更改来实现操作卓越。您的目标应该是持续改进您的流程和程序。此外,自动化操作任务将加强其他支柱,使用基础设施即代码 (IaC) 和像 CloudFormation 这样的工具可以帮助避免人为错误,并确保您对事件的响应一致。

操作卓越支柱还建议预见潜在故障并考虑进行故障测试和恢复演练,从中您可以学习如何消除潜在的故障源并降低风险。了解您的应用程序如何故障,还能帮助您设计自动恢复解决方案,提供一致性和快速恢复。

成本优化

这一支柱侧重于确保您以避免不必要成本的方式构建和设计解决方案。同时,您还希望确保您的应用程序具有高性能、可靠性、操作效率和安全性。为了实现成本优化,您应首先了解您的消费模式,并分析资金流向。使用像 Cost Explorer 和成本与使用报告等工具可以帮助您完成这项工作。

接下来,您必须始终尝试采用消费模式。如果您正在运行仅在周一到周五每天使用 8 小时的开发和测试服务器,那么考虑使用按需定价选项购买这些 EC2 实例是有意义的。然后,您应该确保这些服务器在正常工作时间之外停止,以便潜在地节省高达 75%的成本(每周 40 小时对比 168 小时)。请记住,您可以使用 Lambda 函数和 CloudWatch 事件自动化启动和关闭 EC2 实例,正如在第十二章中讨论的,AWS 上的自动化与部署

你可以在其他设计中考虑成本优化领域,例如使用托管服务,而不是执行重型操作或数据中心风格的操作。例如,将数据库托管在 Amazon RDS 上并让 AWS 为你执行所有管理功能,比在 EC2 实例上安装数据库软件要更具成本效益。后者需要更多的管理工作来确保你的数据库服务器已打补丁、备份并保持安全。

在本节中,你了解了 AWS Well-Architected 框架,它是一套指导原则和最佳实践建议,旨在帮助你设计和运行云中的解决方案。在下一节中,我们将进行本章的一些练习。

练习 13.1 – 查看 AWS 账户中的 Trusted Advisor 报告

在本次练习中,你将登录到 AWS 账户并查看 Trusted Advisor 服务:

  1. 以 IAM 用户Alice身份登录到你的 AWS 管理控制台。

  2. 导航到Trusted Advisor控制台,它位于你的服务列表中的管理与治理类别下。

  3. 你将被重定向到 Trusted Advisor 仪表盘。

  4. 因为你可能只订阅了基础支持计划,你会注意到只有少数检查项是可见的。从主仪表盘中,注意到仪表盘主面板上的检查摘要部分。

  5. 从右侧面板,点击安全类别。

  6. 在右侧面板中,你会注意到各种检查项,例如检查根账户是否启用了 MFA。

  7. 展开标记为22的检查项,该检查项允许从互联网无限制地启用22端口:

图 13.8 – AWS Trusted Advisor 仪表盘

图 13.8 – AWS Trusted Advisor 仪表盘

通过本次练习,你应该已经学会了如何查看 AWS Trusted Advisor 仪表盘。你能够根据之前练习中配置的安全组识别一些不符合最佳实践的安全警报。然后,你可以使用此报告来识别需要修改的安全组,以提高安全性。

总结

在本章中,我们查看了 AWS 上的几项服务,这些服务可以帮助你在云中管理和治理应用程序。我们讨论了各种监控和日志工具,例如 Amazon CloudWatch、AWS CloudTrail 和 AWS Config,以及如何使用这些服务来确保性能、可靠性、安全性和有效的变更管理。你还了解了 AWS Systems Manager 服务,它提供了一套功能,可以集中跟踪和解决 AWS 资源中的操作问题。我们使用 AWS Systems Manager 来自动化日常管理任务,确保资源配置的合规性,提供事件和变更管理服务,并提高可见性和控制。

AWS Trusted Advisor 服务提供了广泛的报告,允许你将资源配置与各种最佳实践设计原则进行交叉参考。最后,我们讨论了在构建云解决方案时,必须遵循 AWS Well-Architected Framework 提供的设计原则和建议。

在下一章中,我们将介绍 AWS 安全概念,并探讨在架构和管理云应用时应该使用的各种安全工具。

问题

  1. 哪项 AWS 服务可以让你追踪 AWS 账户中的所有 API 活动,无论这些活动是通过 AWS 管理控制台还是 CLI 执行的?

    1. AWS CloudTrail

    2. AWS Config

    3. AWS Trusted Advisor

    4. 应用负载均衡器日志

  2. 作为变更管理实施的一部分,哪项 AWS 服务可用于评估、审计和评估 AWS 资源的变更配置,从而帮助你识别是否某个变更导致了事件发生?

    1. AWS Config

    2. AWS CloudTrail

    3. Amazon CloudWatch

    4. AWS Outposts

  3. 哪项 AWS 服务可用于监控公司 EC2 实例的集群,帮助识别与 CPU 使用率或内存消耗相关的性能问题?

    1. Amazon CloudWatch

    2. AWS 云监控

    3. AWS EC2 监控

    4. AWS CloudTrail

  4. 哪项 AWS 服务帮助你识别潜在的未使用资源,例如未附加到运行中的实例的弹性 IP 地址,从而突出节省成本的机会?

    1. AWS 成本探查器

    2. AWS Trusted Advisor

    3. AWS 资源管理器

    4. AWS Budgets

  5. 哪项 AWS Systems Manager 服务的功能使你能够远程连接到 Linux EC2 实例,而无需使用 VPC 中的堡垒主机?

    1. 会话管理器

    2. 参数存储

    3. Run Command

    4. 事件管理器

第三部分:AWS 安全

在本节中,我们将探讨如何在 AWS 上实现安全性。我们将了解共享责任模型,并审视 AWS 安全性和合规性概念。我们还将介绍一些核心 AWS 安全服务,如 Amazon WAF、Shield 和 Inspector。

本书的这一部分包括以下章节:

  • 第十四章在 AWS 上实现安全性

第十四章: 在 AWS 中实现安全性

在云迁移过程中,设计和实施安全解决方案将至关重要,特别是当你希望说服企业将本地工作负载迁移到云端时。总会有一些企业认为将所有 IT 事务管理在自己的数据中心内最为安全。然而,事实并非如此,因为公司无法像云服务提供商(如 AWS)那样花费巨资提供高度安全的工作环境供客户使用。

AWS 使企业能够在云端设计和运行应用程序,并提供严格的安全服务和控制措施。企业应使用 AWS 提供的广泛安全工具,并在设计云应用程序时遵循安全指南和原则。设计和实施安全措施的责任由客户和 AWS 共同承担,这就是我们所说的共享责任模型,我们将在本章中讨论这一点。

AWS 提供了多个安全工具和服务,帮助客户保护数据、执行身份验证和授权协议、确保网络和应用程序访问的安全、监控和检测威胁,以及执行合规性和隐私措施。

本章内容将涵盖以下主题:

  • 理解共享责任模型

  • AWS 合规性程序和 AWS Artifact 介绍

  • AWS 漏洞扫描

  • AWS 上的数据加密服务概述

  • 使用 AWS WAF 和 AWS Shield 保护云资源和应用程序

  • 使用 AWS Inspector 评估和保护您的 EC2 实例

  • 其他 AWS 安全服务

让我们从了解共享责任模型的原理开始。

理解共享责任模型

AWS 提供公共云服务,允许客户在云平台中构建隔离的环境。AWS 管理并保护所有底层基础设施,如网络、存储和计算服务,以及主机虚拟化软件等。AWS 还负责物理安全,包括其数据中心的访问权限,您的工作负载就是在这些数据中心托管的。AWS 向客户提供这些基础设施组件的访问权限,以构建他们的云应用程序和解决方案。不同客户在设计应用程序架构时的方式不同,为了满足不同需求,AWS 会与客户共同分担安全性和合规性责任。

虽然客户可以放心,所有底层物理基础设施、数据中心建筑的访问权限以及主机虚拟化系统都由 AWS 安全严格管理,但客户仍然需要对他们的应用程序在 AWS 上的设计、构建和部署负责。

这就是所谓的 AWS 共享责任模型。您必须了解作为客户的责任,以确保您的应用程序高度安全并符合任何合规性或监管要求。共享责任模型基于 云的安全性(由 AWS 负责)和 云中的安全性(由客户负责)的概念。下图展示了 AWS 与客户之间责任划分的基本理解:

图 14.1 – AWS 共享责任模型

图 14.1 – AWS 共享责任模型

接下来,让我们更详细地了解 AWS 和客户的责任。

云的安全性

AWS 负责 本身。它将对底层全球基础设施(包括其位于区域内的可用区的数据中心和其边缘位置的基础设施)执行严格的安全协议和措施。AWS 还负责底层的计算、存储、网络和数据库服务等。这包括用于使客户启动其 EC2 实例的 虚拟化程序 软件。

云中的安全性

客户负责云中的安全性。从简单层面上讲,这指的是客户负责其应用程序的配置方式,以及如何管理和访问其数据。客户的责任会根据客户选择的服务类型而有所不同。因为不同的服务属于不同的云计算模型(IaaS、PaaS 和 SaaS),客户的责任水平也会不同。例如,Amazon EC2 属于 IaaS 计算模型。在这种模型中,客户负责 EC2 实例的每个安全方面,从客操作系统及以上。客户需要确保 EC2 实例得到补丁更新,安装了防病毒软件,并正确配置了安全组,以确保只有需要的网络流量能够进入实例。安装在 EC2 实例上的任何应用程序也需要由客户维护和保护。

这与像 Amazon RDS 这样的托管服务不同,在 RDS 中,底层数据库实例和附加存储对客户是抽象的。数据库软件的维护和补丁管理也是 AWS 的责任。客户只能配置特定的服务级组件,包括创建安全组以允许特定端口和来源的连接到数据库、启用多可用区以及定义备份保留期限。然而,客户无需在数据库实例本身上安装或更新防病毒软件,也不需要决定备份的存储位置。

下图展示了客户在执行安全措施方面的责任级别,这取决于所使用的云计算模型:

图 14.2 – 客户的责任因云计算模型类型的不同而有所不同

图 14.2 – 客户的责任因云计算模型类型的不同而有所不同

如果可能,AWS 始终建议考虑选择其产品和服务的托管版本,而不是采用数据中心思维管理方式。例如,如果你需要 MySQL 数据库解决方案,选择 Amazon RDS 比配置 EC2 实例并在这些实例上部署 MySQL 数据库软件更为合理。通过将数据库托管在 EC2 实例上,你将完全负责与数据库解决方案维护相关的所有管理和维护任务。

最终,你需要对存储在云中的应用程序和数据承担完全责任,以确保你的解决方案是安全可靠的。

在本节中,我们讨论了 AWS 共享责任模型的重要性,以及如何将安全责任与 AWS 共享,针对你在云中部署的应用程序和工作负载。在下一节中,我们将快速回顾一些 AWS 遵循的关键合规性程序,这些程序可以帮助你履行监管要求。

AWS 合规性程序和 AWS Artifact 介绍

根据你的业务性质和计划在 AWS 上托管的应用程序,你需要确保满足任何合规性或监管要求。例如,如果你计划处理和存储信用卡信息,你必须确保你的应用程序符合支付卡行业数据安全标准PCI DSS)。这使你能够存储、处理或传输持卡人数据CHD)或敏感认证数据SAD)。

类似地,如果你从事医疗行业并且位于美国,你需要遵守 1996 年的美国健康保险流通与责任法案HIPAA)。这意味着,除了各种业务流程之外,任何托管在 AWS 上的应用程序也必须与 HIPAA 合规,特别是在处理和维护个人健康信息PHI)方面。

在这个例子中,如果医疗保健客户希望将 AWS 服务用于其应用程序,AWS 需要确保其服务符合 HIPAA 合规性。以 Amazon Athena 为例,正如在 第十一章 中讨论的,AWS 上的分析,它是一个交互式查询服务,使您能够使用标准 SQL 分析直接保存在 Amazon S3 中的数据。AWS 确认 Amazon Athena 可以用来处理包含 PHI 的数据。诸如加密数据在 Amazon Athena 和 Amazon S3 之间传输等功能默认提供。此外,Amazon Athena 使用 AWS CloudTrail 记录所有 API 调用,以便维护审计日志。客户需要通过启用静态数据加密,确保在数据存储于 Amazon S3 时符合 HIPAA 合规性。客户还可以使用服务器端加密来加密来自 Amazon Athena 的查询结果。再次强调,这一功能由 AWS 提供,供客户配置。

最终,合规性是 AWS 和客户之间的共同责任。另一个例子是,AWS 管理并控制 Amazon EC2 的主机操作系统和虚拟化层的组件,直至物理基础设施。客户则负责客体操作系统(包括修补、执行安全更新等)以及安装的任何应用程序及其安全组配置。

接下来,让我们了解客户可以在哪里获得确认 AWS 满足各种合规要求的信息。

关于 AWS Artifact

客户可以访问各种合规报告,以确认 AWS 提供的服务是否符合其特定的法规要求。这些报告可以通过 AWS 上的一个门户,称为 AWS Artifact 来获取。这些报告包括 AWS 系统和组织控制SOC)报告、支付卡行业PCI)报告,以及来自不同区域的认证机构的认证。

客户可以下载这些报告并向审计员提交安全和合规文件。这些文件可以用来证明各种 AWS 服务及其基础设施如何满足客户所需的安全和合规要求。

这些 文档 也可供客户用于评估其应用架构和云配置,并评估其企业内部控制的有效性。

最后,客户可以审核、接受并跟踪各种 AWS 协议的状态,例如商业合作伙伴附加协议,在该协议下,客户需遵循 HIPAA 指导方针,以确保 PHI 信息得到妥善保护。如果您有多个 AWS 账户,您可以代表这些账户接受协议,并通过 AWS 组织进行管理。

在本节中,我们讨论了 AWS 合规性和 Artifact 服务,它允许您从 AWS 获得他们如何满足合规要求的确认。AWS Artifact 是您的单一可信来源,并且为您提供对各种合规文档的访问,如 AWS ISO 认证、PCI 和 SOC 报告等。

在下一节中,我们将讨论 AWS 如何允许您主动测试您的云部署中的漏洞,并保护您在云中的应用程序。

AWS 漏洞扫描

作为 AWS 客户,您将消费各种服务来构建和部署云应用程序。您需要确保您的云解决方案具有高度的安全性和保护性。为此,您将在云生态系统的不同层面实施安全控制和程序时,遵循关键的指导方针和行业最佳实践。

但你如何确认你实施的保护措施是否足够,以及你所采取的控制措施是否有效呢?

AWS 允许其客户对 AWS 云中的工作负载进行渗透测试。这也被称为渗透测试,是一种针对计算机系统的模拟网络攻击,用以检查漏洞。通常由公司内部或指定的安全团队执行。

作为客户,您需要遵循渗透测试的服务政策,其中包括允许的服务和禁止的活动。例如,禁止使用任何工具执行拒绝服务DoS)攻击或模拟,即使是针对您的 AWS 资产。分布式拒绝服务DDoS)模拟测试只能由经过 AWS 预先批准的AWS 合作伙伴网络APN)合作伙伴执行。

以下表格为您快速展示了一些您可以进行测试的允许服务,以及其禁止的活动:

表格 14.1 – AWS 允许的服务和渗透测试的禁止活动

表格 14.1 – AWS 允许的服务和渗透测试的禁止活动

您还可以进行网络压力测试及其他模拟事件,您需要通过填写模拟事件表格来向 AWS 申请授权。

在本节中,我们简要介绍了客户如何对 AWS 上的工作负载进行渗透测试。下一节中,我们将简要介绍 AWS 上的加密服务。

AWS 数据加密服务概述

加密数据是确保其完整性并防止数据被未经授权的第三方读取的关键步骤。AWS 使您能够对数据进行加密,无论是在传输过程中(数据从源传输到目的地时)还是在静止状态时(数据在磁盘上存储时)。

为了保护传输中的数据,您必须使用 安全套接字层/传输层安全SSL/TLS)或某种形式的客户端加密来传输数据。SSL/TLS 要求您使用证书,证书用于加密和解密数据。

为了保护静态数据,您必须创建并使用加密密钥来加密和解密数据。加密密钥是包含一长串数字或字母的数据文件,供加密算法用于编码和解码数据。您可能听说过的算法示例包括 三重 DES高级加密标准AES-256)位加密。

加密密钥可以是 对称的(即使用相同的密钥来加密和解密数据),也可以是 非对称的,即公钥/私钥组合。在这种情况下,您使用公钥加密数据,只有拥有私钥的用户或应用程序才能解密数据。

AWS 通过其 密钥管理服务KMS)减少了创建和管理加密密钥的许多负担。您可以使用 KMS 为您在各种 AWS 服务中存储的数据提供加密服务,包括 Amazon EBS 卷、Amazon RDS、Amazon S3 等。

使用 AWS KMS,您可以创建和管理 客户主密钥CMK),这些密钥存储在 KMS 服务中,并用于加密和解密您的数据。AWS KMS 将创建用于生成这些 CMK 的 材料。密钥材料是用于加密算法的一个秘密比特串。通过 KMS,这些材料无法提取、导出或以任何方式查看。您还可以配置多区域 CMK,允许您在一个 AWS 区域加密数据,并在不同的 AWS 区域解密数据。

有两种类型的 CMK,如下所示:

  • 客户管理的 CMK:这些是您创建、拥有和管理的 CMK。您可以旋转它们的加密材料、添加标签、指定密钥策略并创建别名。

  • AWS 管理的 CMK:这些是由集成了 AWS KMS 的 AWS 服务代表您创建、管理和使用的 CMK。您无法管理这些 CMK,不能旋转它们,也不能更改其密钥策略。

AWS KMS 还提供了额外的功能,包括内置的审计功能,因为它与 Amazon CloudTrail 集成。使用 AWS KMS,您可以记录和跟踪所有 API 请求,包括密钥管理操作和密钥的使用情况。

在 Amazon S3 中,提供了额外的加密选项。我们接下来将详细介绍。

Amazon S3 加密

为了保护 Amazon S3 中静态存储的数据,您有以下几种加密方式:

  • 服务器端加密:Amazon S3 会在保存数据到磁盘之前对数据进行加密,并在您尝试访问数据时解密数据。

  • 客户端加密:您在客户端对数据进行加密,然后上传到 Amazon S3。在客户端加密中,您负责管理加密过程、密钥和工具。

关于服务器端加密,Amazon S3 将在将数据写入磁盘时按对象级别加密您的数据,然后在您访问这些对象时解密它。此过程对用户是透明的,因为 AWS 会为您完成所有繁重的工作。服务器端加密提供三种选项:

  • 使用 Amazon S3 管理的密钥进行服务器端加密 (SSE-S3):Amazon S3 使用唯一的密钥加密每个对象,然后使用主密钥加密该密钥。它使用 AES-256 加密您的数据。密钥轮换由 AWS 作为后台过程管理。

  • 使用存储在 AWS KMS 中的 CMK 进行服务器端加密 (SSE-KMS):这与 SSE-S3 类似,但具有额外的功能,如使用 CMK 的权限要求分离,以及提供审核跟踪功能,显示您的 CMK 何时被使用及其使用者。作为客户,您可以创建和管理这些 CMK,或使用 AWS 管理的 CMK,这些 CMK 对您的账户、服务和区域是唯一的。

  • 使用客户提供的密钥进行服务器端加密 (SSE-C):您管理加密密钥,AWS 将使用您的密钥管理加密和解密对象的过程。

除了保护静态数据外,您还可以使用 SSL/TLS 保护传输中的数据,正如我们之前所讨论的那样。

AWS KMS 由 联邦信息处理标准 (FIPS) 140-2 硬件安全模块 (HSM) 提供支持,KMS 对其进行管理。FIPS 140-2 是一个用于验证加密模块的安全认证程序。AWS KMS 使用多租户的 HSM。如果您必须为额外的合规要求托管自己的隔离 HSM,则应考虑使用 AWS CloudHSM,我们将在接下来的部分简要讨论。

AWS CloudHSM

AWS CloudHSM 是一个专用的 硬件安全模块 (HSM),允许您在云中生成和管理加密密钥。您将获得专用的 FIPS 140-2 三级认证 HSM 设备,这些设备被放置在您的 VPC 中,并由 AWS 完全管理。如果您需要管理自己的加密密钥,这特别有用。您负责生成、存储、导入、导出和管理您的加密密钥,因为 AWS 无法访问您的密钥。您可以使用 CloudHSM 来处理对称和非对称密钥对。

AWS CloudHSM 还允许您使用行业标准的 API 与您的应用程序集成,例如 PKCS#11、Java 加密扩展 (JCE) 和 Microsoft CryptoNG (CNG) 库。

在本节中,您获得了 AWS 中加密服务的概述。我们讨论了 AWS KMS,它还允许您创建和管理 CMK 来加密和解密数据。AWS KMS 还提供审计功能,允许您执行合规性要求。

我们还看了 Amazon S3 的不同加密选项。为了在 Amazon S3 上实现数据静态加密,你需要选择 服务器端加密客户端加密。使用 服务器端加密 时,你可以选择 SS3-S3(使用 Amazon S3 管理的密钥),SS3-KMS(允许你创建 CMK,并提供密钥使用的审计跟踪)或 SS3-C(由客户管理加密密钥)。

最后,你了解了 AWS CloudHSM 服务,该服务提供专用的 HSM 设备,使你能够生成和管理与其他 AWS 客户隔离的密钥。CloudHSM 设备符合 FIPS 140-2 Level 3 标准,适用于需要满足额外合规要求的场景。

在接下来的部分中,我们将介绍几种 AWS 安全防火墙解决方案,分别是 AWS Web 应用防火墙AWS WAF)和 AWS Shield。

使用 AWS WAF 和 AWS Shield 保护云资源和应用程序

AWS 提供了多种安全工具和服务,帮助保护你的云工作负载免受攻击。在本节中,我们将介绍其中的两项服务——AWS WAF 和 AWS Shield。

使用 AWS WAF 保护应用程序

AWS WAF 是一种 Web 应用防火墙,旨在保护通过 Amazon CloudFront、Amazon API Gateway REST API、应用程序负载均衡器或 AWS AppSync GraphQL API 提供的任何应用程序。

AWS WAF 可以帮助保护位于 开放系统互联OSI)模型第 7 层的应用程序,帮助你监控和保护 HTTP 和 HTTPS 流量。这使你能够保护内容免受常见的网络漏洞攻击,如 SQL 注入跨站脚本

你可以使用 AWS WAF 通过指定 Web 访问控制列表Web ACL)来控制对内容的访问。你定义规则,指定检查标准,如果 Web 请求符合该标准,则采取相应的操作。

使用 AWS WAF 时,费用是根据你创建的 Web ACL 和规则组以及 AWS WAF 检查的 HTTP(S) 请求数量来收取的。

接下来,我们将了解 AWS Shield 服务。

使用 AWS Shield 保护网络攻击

AWS Shield 是一项完全托管的服务,提供对 DDoS 攻击的保护。这是一种攻击类型,攻击者通过大量的互联网流量试图淹没你的网络和服务器,导致授权用户无法访问你的服务。

AWS 提供了两种 Shield 服务,具体如下:

  • AWS Shield Standard:这项服务对 AWS 客户免费提供,能够保护你的网站和应用程序免受常见的网络和传输层 DDoS 攻击。AWS Shield Standard 可以与 Amazon CloudFront 和 Route 53 一起使用,提供分层保护,防御所有已知的基础设施攻击。

  • AWS Shield Advanced:为您的 EC2 实例、弹性负载均衡器、CloudFront、Global Accelerator 和 Route 53 资源提供额外的防护。该服务还提供对攻击的检测和实时可视化,使您能够抵御大规模和复杂的 DDoS 攻击。此外,AWS Shield Advanced 让您全天候 24/7 使用 AWS Shield 响应团队 (SRT) 的服务,帮助您处理此类攻击。AWS Shield 是一项收费服务,按 AWS 组织 每年 $3,000 的费用收费,并根据所使用的服务(如弹性负载均衡器、CloudFront、Route 53、Global Accelerator 和弹性 IP)按每 GB 外发数据传输费收费。

    重要提示

    AWS Shield Advanced 的费用包括 AWS WAF 和一些其他服务的费用。

本节中,我们讨论了 AWS 提供的两种关键防火墙工具。AWS WAF 在 OSI 模型的第 7 层保护您的应用免受常见的 web 攻击,而 AWS Shield 则提供防护,抵御 DDoS 攻击。

在下一节中,我们将介绍 AWS Inspector 服务,它可以用来保护您的 EC2 实例。

使用 AWS Inspector 评估和保护您的 EC2 实例

AWS Inspector 是一个安全工具,用于评估 EC2 实例的网络可访问性和应用安全状态。您可以使用 AWS Inspector 检测开放的网络端口、启用的 root 登录以及 EC2 实例中存在的易受攻击的软件版本。然后,您可以根据最佳实践采取适当的措施。

AWS Inspector 服务使用 规则包,它是用于您 评估运行 中的一系列安全检查。规则包有两种类型,如下所示:

  • 网络可达性规则包:旨在检查从互联网访问您的 EC2 实例并识别开放端口。

  • 主机评估规则包:旨在检查软件漏洞和不安全的配置,包括 常见漏洞和暴露 (CVE)、互联网安全中心 (CIS) 以及其他安全最佳实践。

如果您需要执行主机评估以获取主机、应用程序配置和文件系统访问的详细分析,您需要安装 AWS Inspector 代理。AWS Inspector 代理将收集其对 EC2 实例评估的遥测数据,并以 JSON 格式存储在托管的 S3 存储桶中,最多保存 30 天。

这些发现可以在 AWS Inspector 仪表盘中查看,如以下截图所示:

图 14.3 – AWS Inspector 仪表盘

图 14.3 – AWS Inspector 仪表盘

然后,您可以深入这些发现,并查看针对您的 EC2 实例的具体建议。以下截图显示了发现的内容,表示应该启用自动 Windows 更新:

图 14.4 – AWS Inspector – 发现

图 14.4 – AWS Inspector – 结果

你可以通过系统管理器运行命令在多个实例上安装 Amazon Inspector 代理,手动在每个 EC2 实例上安装,或者配置一个已经预先安装了代理的 AMI。

重要提示

如果你只使用 AWS Inspector 来检查外部 VPC 可以访问的网络端口,那么你不需要安装 AWS Inspector 代理。

在本节中,你了解了 AWS Inspector 服务,它可以对你的 EC2 实例进行自动安全评估,识别暴露、漏洞以及与最佳实践的偏差。

在下一节中,我们将讨论 AWS 提供的其他安全服务。

其他 AWS 安全服务

在本节中,我们将研究一些 AWS 提供的额外安全工具和服务。我们将首先介绍 Amazon Macie,它能够识别如个人身份信息PII)等敏感数据。

亚马逊 Macie

亚马逊 Macie 使用机器学习和模式匹配技术来检测和提醒你任何存储在 Amazon S3 中的敏感数据,如 PII。你还可以使用 Macie 来发送关于未加密、公开可访问且与其他 AWS 账户共享的 S3 存储桶的警报。

AWS Macie 会监控数据在 Amazon S3 中的访问方式,识别任何异常情况,并在检测到未经授权的访问时生成警报。AWS Macie 还提供了一个仪表盘,汇总了所有检测结果,如下图所示:

图 14.5 – 亚马逊 Macie – 概述

图 14.5 – 亚马逊 Macie – 概述

接下来,我们将介绍 AWS GuardDuty,该服务旨在检测针对你的 AWS 账户的恶意活动和未经授权的行为。

AWS GuardDuty

AWS GuardDuty 是一项威胁检测服务,可以分析并检测针对你的 AWS 账户和应用程序工作负载的恶意活动。该服务使用各种情报来源来了解恶意 IP 地址和域名,还利用机器学习分析来自 CloudTrail 事件日志、Amazon VPC 流日志和 DNS 日志的数据,帮助检测异常情况。

AWS GuardDuty 可以检测暴露的凭证的使用、与恶意 IP 地址和域名的通信,以及在你的 AWS 账户中执行的不规则活动。这包括在你通常不工作的区域启动 EC2 实例。

AWS GuardDuty 能够检测到的一些威胁包括 EC2 实例的安全性问题,如与加密货币挖矿相关的安全事件,或 S3 存储桶的安全性问题,如来自远程主机的不寻常 S3 API 活动,或来自已知恶意 IP 地址的未经授权的访问。

亚马逊 GuardDuty 的定价基于要分析的 CloudTrail 事件的数量以及 VPC 流日志和 DNS 日志数据的数量。该服务提供免费的 30 天试用期。

接下来,我们将介绍另一个服务,Amazon Detective,它可以帮助识别潜在安全问题或可疑活动的根本原因。

Amazon Detective

有多种不同的 AWS 服务可以用来识别潜在的安全问题,例如之前讨论过的 Amazon Macie 和 Amazon GuardDuty。然而,如果您试图确定这些安全发现的根本原因,通常需要处理大量日志,并使用 提取、转换和加载ETL)解决方案来执行所需的深度分析。

Amazon Detective 可以提取基于时间的事件,如登录信息、来自 AWS CloudTrail 和 Amazon VPC Flow Logs 的网络流量,以及摄取您的 GuardDuty 发现。然后,Amazon Detective 通过利用已摄取的信息生成可视化图表,帮助您识别资源行为随时间的变化以及资源之间的交互,从而最终协助识别安全问题的根本原因。

此定价基于从 AWS CloudTrail 日志、Amazon VPC Flow Logs 和 Amazon GuardDuty 发现中摄取的数据量。Amazon Detective 提供 30 天的免费试用。

接下来,我们将介绍 AWS Certificate ManagerACM)服务,它使您能够创建、存储和续订 SSL/TLS 证书。

AWS Certificate Manager

为了通过安全加密保护您的 AWS 资源并验证互联网上网站的身份,您需要配置并管理 SSL/TLS 证书。证书由 证书颁发机构CA)颁发,CA 是一个可信的第三方,它会验证交易双方的身份。

ACM 使您能够创建、管理和部署用于 AWS 资源的 SSL/TLS 证书,并与多个需要使用 SSL/TLS 连接进行安全通信的 AWS 服务集成。您可以使用 ACM 为弹性负载均衡器、Amazon CloudFront 分发和 API 网关上的 API 颁发和管理证书。AWS ACM 还可以管理所有证书续期。

对于集成 ACM 的服务,您无需为弹性负载均衡器和 API 网关配置证书支付费用。如果您需要私人证书,ACM 私有 CA 允许您按月支付所创建的服务和证书费用。

接下来,我们将介绍 AWS Secrets Manager 服务,它可以保护您访问应用程序、数据库和其他 AWS 服务所需的机密信息。

AWS Secrets Manager

第十三章《AWS 上的管理与治理》中,我们研究了AWS Systems ManagerASM)的参数存储服务。该服务可以用来安全地存储参数值,比如您的数据库用户名和密码,而不需要将这些信息硬编码到您的应用程序中。将此类敏感信息存储在应用程序代码中不是最佳实践,并且会带来额外的管理负担。通过 SSM 参数存储,您的应用程序可以检索必要的参数,以便访问数据库。

然而,该服务确实存在一些局限性,这时 AWS Secrets Manager 就能派上用场。除了允许您存储机密信息外,该服务还使得管理和轮换这些数据库凭证变得更加简单。AWS Secrets Manager 原生支持对托管在 Amazon RDS、Amazon DocumentDB 和 Amazon Redshift 上的集群的凭证进行轮换。这种轮换可以通过计划自动化,从而增加了安全性。此外,您还可以通过修改示例 Lambda 函数来使用 AWS Secrets Manager 轮换其他机密。例如,您可以用它来轮换用于授权应用程序的 OAuth 刷新令牌,或用于本地托管 MySQL 数据库的密码。然后,您的应用程序可以通过调用 Secrets Manager API 来替换硬编码的机密信息,从而获取机密。

AWS Secrets Manager 还使用您通过 Amazon KMS 创建和管理的加密密钥对机密进行加密。该服务还使您能够跨 AWS 区域复制机密,以支持多区域应用程序和灾难恢复。

就成本而言,您将根据在 Secrets Manager 中管理的机密数量和所进行的 Secrets Manager API 调用数量收费。

接下来,我们将研究另一个身份服务,它使您能够使用外部公共身份提供商授予访问 AWS 资源的权限,即 Amazon Cognito。

Amazon Cognito

要对用户进行身份验证并授予他们访问 AWS 资源的权限,您需要创建和管理他们的身份,并提供身份验证和授权的机制。AWS IAM 是您已经熟悉的身份和访问管理解决方案,通常用于与 AWS 服务一起工作的用户,比如内部员工。如果您正在构建需要对后端资源进行身份验证的应用程序,可以使用 IAM 用户账户,但也有一些限制,包括每个 AWS 账户最多可以创建 5,000 个 IAM 用户账户。

Amazon Cognito 允许您为 Web 和移动应用程序设置身份和访问控制解决方案,支持 OAuth 2.0、SAML 2.0 和 OpenID Connect 等标准。使用 Amazon Cognito,您可以创建用户池身份池

  • Amazon Cognito 用户池:用于验证用户身份,您可以创建用户池来托管数百万用户,或者通过第三方身份提供商IdP)如 Apple、Facebook、Google、Amazon 和 Microsoft Active Directory 来联合其访问。对于后者,用户池将管理由第三方 IdP 发放的令牌。您可以使用用户池为您的网页或应用设置注册登录功能。您还可以使用用户池来追踪用户设备、位置和 IP 地址。

  • Amazon Cognito 身份池:这些池允许您通过为需要访问特定 AWS 服务(如 Amazon S3 桶或 DynamoDB 表)的用户创建身份来定义授权。您还可以使用身份池为未验证用户生成临时的 AWS 凭证。

接下来,我们将介绍 AWS 目录服务,特别适用于希望使用 Microsoft Active Directory IAM 服务的情况。

AWS 目录服务

AWS Microsoft Active Directory 目录服务(也称为AWS 托管 Microsoft AD)是 AWS 平台上的一项完全托管的 Active Directory 服务。该服务使您可以使用标准工具,如 Active Directory 用户和计算机,并利用信任、分布式文件系统DFS)、组策略和单点登录SSO)等功能。

您可以在 EC2 实例上部署支持 Microsoft Active Directory 的应用程序,并将您的 Windows EC2 实例加入 Active Directory 域。您还可以将Amazon RDS for SQL Server 实例加入域,从而为在 Amazon RDS 上运行的 SQL 数据库提供无缝的身份验证服务。

此外,您还可以将Amazon WorkSpaces加入域。Amazon WorkSpaces 是一项终端用户计算服务,使您能够在云中部署虚拟的 Linux 和 Windows 桌面。AWS 管理虚拟桌面,包括安全修补和操作系统管理。通过 Amazon WorkSpaces,您可以考虑从本地桌面基础设施迁移到虚拟桌面基础设施VDI)解决方案。这使您能够管理总拥有成本TCO),并选择 IT 投资的运营支出模式(OPEX)。

另一个与 AWS 托管 Microsoft AD 集成的服务是Amazon WorkDocs。Amazon WorkDocs 是一项内容创作、存储和协作服务。Amazon WorkDocs 使您能够存储 Microsoft Word、PowerPoint、Excel 以及其他多种文档类型。您和您的同事可以使用 Amazon WorkDocs 进行协作和共享工作文档。与 Microsoft SharePoint 等其他协作工具类似,该服务还提供 API 访问,以便您可以开发丰富内容的应用程序。

在本节中,我们探讨了几种 AWS 安全工具和服务,帮助您设计和架构可以保护 AWS 上应用程序和工作负载的安全措施。您必须检查提供的广泛安全服务,并将它们的使用与您的特定业务目标对齐,同时考虑任何合规性或监管要求。

接下来,我们将进行一个练习,展示我们在本节中介绍的其中一个安全工具。具体来说,您将学习如何使用 Amazon Macie 进行一个简单的现实世界示例。

练习 14.1 – 使用 Amazon Macie 防止数据泄露

在此练习中,您将使用 Amazon Macie 监控一个 Amazon S3 存储桶,并识别存储在存储桶中的任何 PII 数据。假设有一个场景,您的组织中的某个用户不小心将敏感文件上传到错误的 Amazon S3 存储桶。在我们的例子中,我们有一个 产品详情 存储桶,其中包含可以由市场营销团队访问的产品信息。然而,由于访问策略配置不当,人力资源团队的成员将敏感的员工信息上传到了这个存储桶。

这可能导致数据泄露。虽然您希望确保用户只能访问特定的存储桶,但有时意外也会发生。Amazon Macie 可以检测上传到 S3 存储桶的内容,并识别特定类型的敏感数据。然后,您可以采取适当的措施。

第一步 – 创建一个新的 Amazon S3 存储桶

  1. 进入 Amazon S3,点击左侧菜单中的 存储桶 链接。

  2. 在右侧面板中,点击 创建存储桶 按钮。

  3. 提供一个存储桶名称并选择 us-east-1 区域来创建您的存储桶。我将我的存储桶命名为 justdessertsproducts,因此您需要选择一个独特的名称来命名您的存储桶。我们假设有人不小心将敏感的 PII 上传到了这个存储桶。

  4. 点击页面底部的 创建存储桶 按钮。

  5. 接下来,使用 Excel 或 Google Sheets 创建一个简单的 CSV 文件并将其上传到 S3 存储桶。确保 CSV 文件包含一些可以归类为个人身份信息(PII)的数据。例如,在以下截图中,您会注意到我添加了一些虚拟数据,其中包含敏感的员工信息。在这个例子中,EmployeeID 可用于识别特定员工及其薪资信息:

图 14.6 – 员工的薪资信息

图 14.6 – 员工的薪资信息

使用 Amazon Macie 来识别可能与个人身份信息(PII)相关的信息时,您需要能够识别数据的格式,以便 Amazon Macie 知道要查找什么。请注意,EmployeeID 数据的格式,如前面的截图所示,是 两个字符大写字母),后跟一个 连字符-),然后是 四个数字

第二步 – 配置 Amazon Macie 以识别敏感的员工数据

  1. 从 AWS 管理控制台中,在顶部搜索栏搜索 Amazon Macie,并点击过滤后的搜索结果中的该服务。

  2. 如果这是你第一次访问 Amazon Macie 控制台,你将看到一个启动画面,如下图所示:图 14.7 – Amazon Macie

    图 14.7 – Amazon Macie

  3. 点击开始使用按钮。

  4. Amazon Macie 需要访问你存储在 Amazon S3 中的数据的权限。你将获得启用 Amazon Macie 的选项,并提供必要的访问权限,这将创建一个 IAM 角色。

  5. 继续点击启用 Macie按钮,如下图所示:图 14.8 – 启用 Macie

    图 14.8 – 启用 Macie

  6. 启用后,Amazon Macie 将分析你的环境,并在短时间后提供仪表板,如下图所示:图 14.9 – Amazon Macie – 摘要

    图 14.9 – Amazon Macie – 摘要

  7. 尽管前述摘要中的多个项目需要检查,但对于本练习,我们主要关注的是确保不会将 PII 上传到我们之前配置的特定存储桶。因此,我们需要创建一个Amazon Macie 作业

  8. 从左侧菜单中,选择作业链接。

  9. 从右侧窗格中,点击csv,然后点击包含按钮。

  10. 点击下一步

  11. 对于第 4 步,选择托管数据标识符,选择,然后点击下一步

  12. 对于第 5 步,选择自定义数据标识符,点击管理自定义标识符链接以在另一个浏览器标签页中打开自定义数据标识符网页,如下图所示:

图 14.10 – 创建自定义数据标识符

图 14.10 – 创建自定义数据标识符

  • 点击创建按钮。

  • 为标识符命名,并可以选择性地添加描述。

  • 接下来,你需要提供一个EmployeeID格式。正则表达式(Regex)是正则表达式的缩写,它是一个字符序列,用于指定搜索模式。通常,你可以使用正则表达式模式来搜索特定类型的数据或验证数据。对于本练习,你的正则表达式模式将是 [A-Z]{2}-[0-9]{4}。将此模式输入到正则表达式文本框中。

  • 接下来,点击提交按钮,这将为本练习创建自定义数据标识符。

  • 返回到创建作业向导,该向导应仍然在之前的浏览器标签页中可见。你应该仍然处于第 5 步。点击刷新图标以访问EmployeeID自定义数据标识符,如下图所示:

图 14.11 – 选择自定义数据标识符

图 14.11 – 选择自定义数据标识符

  • 选择EmployeeID自定义数据标识符并点击下一步按钮。

  • 对于第 6 步,为作业提供一个名称,然后点击下一步按钮。

  • 对于步骤 7,检查配置设置,然后点击页面底部的提交按钮。

  1. 您的工作现在已创建,并将处于活动(运行中)状态,如下图所示:图 14.12 – 已创建的 Amazon Macie S3 工作

    图 14.12 – 已创建的 Amazon Macie S3 工作

  2. 该任务需要几分钟时间完成。任务完成后,点击显示结果下拉箭头,并选择显示发现。您将看到它找到了我们之前上传的 CSV 文件,如下图所示:图 14.13 – Macie 发现

    图 14.13 – Macie 发现

  3. 选择发现的内容。然后,从操作下拉列表中,选择导出(JSON)

  4. 您将能够查看 JSON 文件,该文件清楚地显示它识别了四次 PII 数据,如下图所示:图 14.14 – Amazon Macie 任务发现

    图 14.14 – Amazon Macie 任务发现

  5. JSON 还将突出显示识别到 PII 数据的列和行。

正如您所看到的,Amazon Macie 是一个非常强大的工具,能够帮助您理解数据访问模式,并提醒您潜在的数据泄露。

在下一个练习中,您将清理您创建的资源。

练习 14.2 – 清理

在本练习中,您将清理在本章中创建的资源:

  1. 导航到 Amazon Macie 控制台。

  2. 从左侧菜单中选择设置

  3. 接下来,从右侧窗格中,点击禁用 Macie按钮。Amazon Macie 将永久删除您现有的所有发现、分类任务和其他 Macie 资源。

  4. 在出现的对话框中,在文本框中输入禁用,然后点击禁用按钮。

  5. 接下来,从 Amazon S3 控制台中,您需要清空您创建的 S3 存储桶,然后删除该存储桶,正如之前所做的那样。

接下来,我们将提供本章的总结。

总结

云中的安全是客户和 AWS 之间的共同责任。AWS 将负责云的安全,而客户则负责云中的安全。这个区别必须理解。您可以使用大量安全工具和服务,帮助您构建一个高度稳固和安全的环境,在其中托管您的应用程序工作负载。

本章还讨论了与合规性相关的概念,以及 AWS 服务如何与各种监管机构对接。作为客户,您有责任确保您的应用程序是在遵循必要协议的情况下构建的。例如,如果您处于医疗行业并位于美国,那么您的应用程序流程和工作流必须符合 HIPAA 合规性。

我们还讨论了加密以及如何在静态和传输过程中实现加密。AWS 提供 KMS 服务来帮助你管理加密需求。如果你有特定要求,需要使用专用的 FIPS 140-2 Level 3 硬件安全模块创建、管理和轮换加密密钥,你还可以选择 AWS CloudHSM 服务。

AWS 还提供了几种保护你的网络和应用程序的工具,如 AWS Shield 和 AWS WAF。AWS Shield 提供 DDoS 攻击保护,而 AWS WAF 是一种应用层防火墙设计,可以保护你免受常见的 Web 攻击,如 SQL 注入和跨站脚本攻击。

最后,我们检查了各种特定的 AWS 安全工具和服务,包括 AWS Inspector、Amazon Macie 和 AWS Secrets Manager。这些工具可以帮助你构建一个完整的端到端安全环境,以保护你的数据,授权用户访问,并防止攻击。

在下一章中,我们将讨论 AWS 的计费和定价原则。你将了解云经济学以及如何为你的业务设计具有成本效益的解决方案。我们将讨论成本管理策略,并查看一些可以帮助你监控成本并比较定价选项的工具。

问题

回答以下问题,以测试你对本章内容的理解:

  1. 以下哪项是客户在共享安全模型中的责任之一?(选择 2 项。)

    1. 为 Windows EC2 实例打上最新的安全补丁。

    2. 配置 NACL 只允许来自互联网的 80443 端口访问 Linux Web 服务器。

    3. 更新 us-east-1 数据中心的网络布线。

    4. 升级 Lambda 服务的底层基础设施支持。

    5. 升级伦敦区域的生物识别读取器。

  2. AWS 中的哪项服务保护你的虚拟网络和资源免受常见的 DDoS 攻击?

    1. AWS WAF

    2. AWS Shield

    3. AWS Detective

    4. Amazon Macie

  3. 以下哪些 AWS 安全工具可以保护你的 Web 应用程序或 API,免受可能影响可用性、危及安全性或消耗过多资源的常见 Web 攻击?

    1. AWS WAF

    2. AWS GuardDuty

    3. AWS Shield

    4. AWS NACL

  4. 哪项 AWS 服务使用机器学习对存储在你的 Amazon S3 存储桶中的敏感信息进行分类,并监控访问模式,以发现可能表明风险或可疑行为的异常情况,例如大量源代码被下载?

    1. Amazon Macie

    2. Amazon X-Ray

    3. AWS Shield

    4. AWS WAF

  5. 哪项 AWS 服务使计划迁移到 AWS 云的公司能够获取各种合规性文档副本,例如 ISO 认证、PCI 和 SOC 报告?

    1. AWS Artifact

    2. AWS Config

    3. AWS CloudWatch

    4. AWS 安全报告

  6. 为了满足严格的合规要求,你需要使用 FIPS 140-2 Level 3 认证的 HSM 设备来创建和管理加密密钥。你会推荐哪种类型的加密服务?

    1. AWS KMS

    2. AWS CloudHSM

    3. 证书管理器

    4. BitLocker

第四部分:计费和定价

如果你希望客户从本地环境迁移到云端,那么迁移到云端必须具备成本效益。AWS 提供具有竞争力的定价模式,帮助你设计、构建和部署能够降低成本的应用程序。了解 AWS 的定价策略和最佳实践将帮助你的组织提高成本效率。

本书的这一部分包含以下章节:

  • 第十五章计费和定价

  • 第十六章模拟测试

第十五章: 账单和定价

许多寻求转向云端的公司听说过从资本支出(CAPEX)模型转向运营支出(OPEX)模型带来的成本优势。CAPEX 指的是用于采购长期资产的资本支出,例如基础设施设备、车辆和建筑物。购买这些资产的公司将拥有这些资产,但这往往会占用原本可以用来投资其他直接有益于业务的资源的资金。考虑一下,公司如果有多余的资本可用于产品和服务的研发,而不是仅仅购买 IT 基础设施设备,将会有怎样的不同。

OPEX 指的是运营支出,是经营产品、业务或系统的持续费用。在云计算的背景下,OPEX 是从云服务提供商租赁资源的持续费用,例如运行一组 Web 服务器,企业按需付费。你无需将大量资金投入到迅速贬值的昂贵硬件设备,或者为本地基础设施支付昂贵的软件许可费用,这一理念对于公司财务至关重要。

然而,单纯转向云端并不一定能为你节省资金。你设计的用于托管应用程序的云端解决方案需要进行成本优化,并且需要架构设计确保你以最优的性价比获得服务。好消息是,像 AWS 这样的云服务提供商能够为你设计高度成本效益的解决方案。首先,你可以确保仅在消费服务时才付费。此外,每项服务都提供了多种选项来帮助你基于访问模式和核心业务需求配置,从而最大化成本节省。

有一点需要注意的是,不应将成本优化单独考虑。最小化成本对于业务非常重要,但确保应用程序的可用性、可靠性和可扩展性同样重要。

本章将介绍成本优化的基本原理以及 AWS 账单和定价的关键组件。我们讨论了关键原则,并介绍了帮助你深入了解和有效管理成本的各种工具。

本章涵盖的主题如下:

  • AWS 的账单和定价概览

  • 理解 AWS 成本优化

  • 了解 AWS 账单和成本管理工具

  • 学习如何使用 AWS 定价和 TCO 计算器 – 定价计算器和迁移计算器

技术要求

要完成本章的练习,你需要以 IAM 用户Alice身份登录 AWS 账户。

AWS 的账单和定价概览

AWS 会根据三个核心组成部分向你收费,这些组成部分包括你进行的计算存储出站数据传输的数量。虽然存在一些例外情况,但这些是主要的成本驱动因素。对于计算,这可能表示你按需实例运行的小时数或你执行的 Lambda 执行次数。对于存储,你按每 GB 收费。在这两种情况下,你都会为从区域或 AWS 外部传输的数据付费。数据传输出的费用取决于服务和数据来源的区域。

这里有几个关键点需要注意:

  • 对于同一区域内的数据传输:

    • 如果使用互联网网关向同一区域的 AWS 公共服务(如 Amazon S3、DynamoDB 等)发送数据,则不会产生数据传输费用。

    • 如果使用NAT 网关访问同一区域的公共服务,则会产生数据处理费用,按每 GB 计费。

    • 在同一可用区内的工作负载之间的数据传输是免费的。对于某些服务,如 EC2,跨可用区的数据传输将产生数据传输费用。

  • 跨区域的数据传输总是会产生数据传输费用。

从 AWS 接收数据(例如从本地数据中心)时,不会收取费用。

让我们来看看 AWS 定价的一些关键原则以及你在将工作负载迁移到云时应采取的策略。

了解 AWS 成本优化

根据你的工作负载和特定的业务需求,你可以访问广泛的服务选项和工具,帮助你优化成本,确保你能够监控和控制支出。选择正确的服务组合并部署正确的资源配置将有助于你高效运营。以下是在为云环境架构解决方案时需要记住的一些关键概念:

  • 选择正确的定价模型:当你知道只在有限的时间内、用于特定短期项目时需要计算资源,可以使用按需实例。从可靠性角度看,你需要确保服务没有中断,但你并不会全天候、全年无休地使用这些资源。在这种情况下,按需定价模型效果很好。另一种选择是投资于预留容量,这可以在等效的按需容量价格上节省最多 72%的费用,但前提是你需要全天候使用这些资源,而且使用时间较长,例如一年。你还可以考虑使用Spot EC2 实例,适用于容错、可扩展或灵活的应用程序,并且应用程序能够容忍中断。Spot 实例可以让你节省最多 90%的按需价格,并且没有预付承诺。最后,考虑选择计算节省计划,以减少 EC2、Fargate 和 Lambda 成本。EC2 节省计划可以为你的 AWS 计算使用提供最多 72%的折扣。在这里,你需要承诺一定量的计算使用量,且会自动按折扣后的节省计划价格收费。

  • 将容量与需求匹配:AWS 提供了多种工具来帮助你识别使用模式。AWS 成本探索器资源优化(将在本章后面讨论)可以帮助你识别空闲或低利用率的实例。你可以通过减少分配的容量,或者在资源未使用时停机,从而节省成本。你还可以使用AWS 实例调度器,这是 AWS 提供的一个 CloudFormation 模板,可以通过配置 Amazon EC2 和 Amazon RDS 实例的启动和停止计划来帮助降低成本。这就像你在第十二章《AWS 上的自动化和部署》中完成的练习,配置了 Amazon CloudWatch 事件和 Lambda 来自动启动和停止 EC2 实例。在不使用时,另一个可以停止的服务是 Amazon RDS。对于 Amazon Redshift,你可以暂停该服务。

  • RequestCount 在过去 7 天内的值低于 100,可能是终止的理想候选项。

    重要提示

    Amazon S3 分析不会提供关于迁移到 One Zone-IA 或 S3 Glacier 存储类别的建议。

在本节中,我们探讨了一些核心概念,以确保你在云中部署的工作负载是经过成本优化的。在下一节中,我们将介绍各种工具和服务,帮助你有效地监控、控制和管理成本。

学习 AWS 计费和成本管理工具

在本节中,我们将介绍几种 AWS 计费和成本管理工具,帮助您可视化在 AWS 账户上的使用情况和支出,并实施更好的成本控制策略。我们将从成本探索器服务开始。

AWS 成本探索器

AWS 成本探索器使您能够通过仪表板和报告监控和可视化成本。您可以访问过去 12 个月的使用和支出数据,并预测未来 12 个月的费用。您需要启用成本探索器服务,一旦启用,当前月份的报告数据将在 24 小时后可用。过去几个月的额外数据将在几天后开始显示。

AWS 成本探索器主页显示了您的支出快照。在这里,您将看到当前月份成本以及预测的月末成本,如以下截图所示:

图 15.1 – 成本探索器主页

图 15.1 – 成本探索器主页

AWS 成本探索器提供了几种类型的报告。例如,在以下截图中,您将看到我某个 AWS 账户的按服务分类的月度成本报告:

图 15.2 – 成本探索器 – 按服务分类的月度成本报告

图 15.2 – 成本探索器 – 按服务分类的月度成本报告

报告显示了过去 6 个月的支出,按服务进行分类,包括 EC2 实例、Amazon RDS 和存储档案(Amazon Glacier)。

成本探索器的其他功能包括通过按资源类型和按日、按小时的成本模式进行详细筛选。

AWS 成本探索器还提供各种节省费用的推荐。例如,在 AWS 成本探索器控制台的左侧菜单中,您可以选择推荐,在预留实例类别下,查看成本探索器建议为现有按需工作负载购买 EC2 预留实例RI),如下截图所示:

图 15.3 – 成本探索器 RI 推荐

图 15.3 – 成本探索器 RI 推荐

如您所见,购买 RI 用于我当前运行的两台按需实例,可能使我节省 33% 的最终成本。

AWS 成本探索器还可以用于向您发送 EC2 资源优化推荐,帮助您检查历史使用模式并识别被低效使用的资源。AWS 成本探索器将能够识别空闲实例,并允许您采取措施终止或调整大小以优化未充分利用的资源。

您还可以在成本探索器中查看RI 使用情况报告。RI 使用情况报告使您能够识别使用 RI 相比按需选项所节省的费用,适用于 Amazon EC2、Amazon Redshift、Amazon RDS 等服务。RI 报告还提供了有关您可能因未充分利用 RI 而超支的详细信息。

最后,AWS 成本探测器提供了一个安全功能,帮助您检测消费模式中的异常及其根本原因,并且可以配置使用 Amazon SNS 向您发送警报。

在本节中,您了解了 AWS 成本探测器工具,它能够帮助您可视化和管理您的成本,并允许您创建自定义报告以识别使用模式和趋势。

在下一节中,我们将讨论成本分配标签如何帮助您识别正在消费和支出的服务和资源。

成本分配标签

之前我们讨论了标记资源的重要性。它不仅允许您识别资源,还可以让您利用这些标签作为标识来自动化和执行资源管理任务。此外,您还可以使用标签来帮助您识别哪些资源在消耗您的资金,通过使用成本分配标签,您可以按不同的项目、部门、业务单元等跟踪使用情况。

标签由组成,对于每个资源,您最多可以有 50 个键值对标签。此外,标签键必须唯一,每个键只能有一个值。您需要首先激活成本分配标签,AWS 随后将使用这些标签帮助您分析成本。这些标签有两种类型:

  • AWS 生成的标签:这些标签由 AWS 和 AWS 市场创建并定义。

  • 用户定义的标签:这些标签可以根据您的业务成本管理和命名约定由您创建并定义。

激活标签可以通过计费管理控制台完成,每个标签键需要单独激活。一旦激活,AWS 将生成逗号分隔值CSV)文件报告,报告中将按您的活动标签对使用情况和成本进行分组。

接下来,让我们来看一下成本和使用情况报告。

成本和使用情况报告

AWS 提供了一个成本和使用情况报告工具,它提供了您使用的资源及其相关成本的详细细分。报告包括使用量和消耗的单位、费率、成本和产品属性。报告发布到您选择的 Amazon S3 存储桶,且报告可以配置为按小时、天或月提供成本细分。这些报告以 CSV 格式提供,您可以将其导入 Microsoft Excel 或其他电子表格工具中。

此外,您还可以将报告集成用于 Amazon Athena、Redshift 和 QuickSight,并可以设置压缩类型为 GZIP、ZIP 或 Parquet。

接下来,让我们检查一下 AWS 预算服务。

AWS 预算

AWS 预算使你能够了解在云中部署的工作负载上花费了多少钱。你可以使用 AWS 预算跟踪你的成本和使用情况,跨你组织可能正在运行的不同类型的项目。你可能有不同的部门需要不同的云服务,并根据他们的需求为他们的支出指定月度预算。

如果你的预算超过阈值(无论是实际的还是预测的),你可以定义在你的 AWS 账户上执行的特定操作。目前,你可以定义三种类型的操作:

  • 一个身份和访问管理IAM)策略

  • 服务控制策略SCPs

  • 目标运行实例(EC2 或 RDS)

例如,你可以指定一个 IAM 策略,如果超过了 EC2 的月度预算,则拒绝启动新的 EC2 实例的能力。然后,你可以将此策略应用于用于启动实例的 IAM 用户、组或角色。

当超过阈值时,AWS 预算操作可以自动执行,或者根据需要配置为手动批准。

使用 AWS 预算,你还可以使用 Amazon SNS 设置警报,以便在实际或预测的支出可能超过预算阈值时收到通知(或执行某些事件驱动的操作)。你还可以配置可变目标金额,以便预算金额根据一定百分比在一段时间内增加,因为消耗可能会增加。

AWS 预算还可用于确保你在特定的配额和限制内,包括保持在特定的 AWS 免费套餐提供之下。

你可以创建几种类型的预算,包括以下内容:

  • 成本预算:定义你愿意支出的具体金额。

  • 使用预算:定义你想使用特定服务的量。

  • RI 利用率预算:指定利用率阈值,并在使用低于阈值的情况下收到警报。这使你能够识别那些可能未充分利用的 RI 资源,并重新考虑是否需要这些预留。

  • RI 覆盖预算:确定你的实例使用中有多少被预留覆盖。

  • 节省计划利用率预算:识别当你的节省计划使用低于利用率阈值时,使你能够识别未充分利用的节省计划。

  • 节省计划覆盖预算:确定你的实例使用中有多少被节省计划覆盖。

在本节中,我们看了 AWS 预算,它可以用于确保你在 AWS 上部署的资源上不超支。

在下一节中,我们将继续看一些 AWS 定价和成本计算器。

学习如何使用 AWS 定价和 TCO 计算器

AWS 提供计算器来帮助你估算在 AWS 上设置和部署资源所涉及的成本。两个关键的计算器是AWS 定价计算器迁移评估器(以前称为 TCO 计算器)。

AWS 定价计算器

AWS 定价计算器是一种工具,用于计算部署和配置 AWS 服务和资源的预计月度费用。您可以使用 AWS 定价计算器来估算您希望在 AWS 上部署的项目和应用程序的月度费用。您可以按服务或服务组查看价格,以分析您提议架构的费用。

然后,您可以将估算结果的唯一链接发送给其他团队成员、财务人员和客户,以帮助分析项目的潜在成本。

为了展示 AWS 定价计算器的工作原理,让我们以一个简单的应用解决方案为例,该方案包含弹性负载均衡器、EC2 实例和 Amazon RDS 数据库。请参阅以下架构图,了解提议的设计:

图 15.4 – AWS 定价计算器示例 – 应用架构

](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_15_04.jpg)

图 15.4 – AWS 定价计算器示例 – 应用架构

在之前的架构中,部署的核心资源如下:

  • 一个位于US-East-1区域的 VPC,拥有六个子网,分布在两个可用区。

  • 一个互联网网关,用于允许流量进出 VPC。

  • 一个应用负载均衡器ALB),允许互联网上的用户访问运行在应用服务器上的 Web 应用程序。

  • 两个 EC2 实例,分别位于每个可用区,部署在私有子网中。一个自动伸缩组,根据需要进行扩展或收缩。对于这个示例,我们将保持实例集群大小为两个 EC2 实例,如果需要,会替换任何失败的 EC2 实例。

  • 一个运行 MySQL 引擎的 Amazon RDS 数据库,配置为多可用区以提供高可用性和弹性。

确定这些资源的预计费用还需要您了解进出流量的类型和数量。这些细节将通过设置测试环境并监控您的工作负载,或者通过以往的部署情况来推导出来。

为了简化这个示例,我们假设您的架构按照以下表格提供:

表 15.1 – AWS 定价计算器示例架构

](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/Table_15.1.jpg)

表 15.1 – AWS 定价计算器示例架构

要确定上述表格中详细列出的资源组的预计月度费用,您可以使用位于calculator.aws/的 AWS 定价计算器。

在 AWS 定价计算器中,您需要选择不同的服务,并根据截图中的示例提供资源配置信息:

图 15.5 – AWS 定价计算器 – EC2 实例规格

](https://github.com/OpenDocCN/freelearn-devops-pt3-zh/raw/master/docs/aws-cert-cld-prac-exgd/img/B17124_15_05.jpg)

图 15.5 – AWS 定价计算器 – EC2 实例规格

一旦您提供了所有不同的配置项以及进出流量的预估数量,您将会收到一个估算表,如下所示:

表 15.2 – AWS 定价计算器 – 估算成本  表 15.2 – AWS 定价计算器 – 估算成本

表 15.2 – AWS 定价计算器 – 估算成本

请注意,上述成本仅为估算,为了简化示例,未涵盖资源的详细配置。例如,Amazon RDS 不包括备份存储,Route 53 没有定义路由策略。此外,价格不包括税费。

接下来,让我们简要了解一下迁移评估器。

AWS 迁移评估器

许多希望迁移到云端的公司需要了解完成从本地环境迁移所需的迁移项目的成本影响。除了设计执行迁移所需的技术步骤外,公司还需要进行成本估算分析,并评估迁移到云端可能带来的潜在节省。

AWS 迁移评估器消除了规划任何 AWS 迁移项目的猜测。您的组织可以与迁移评估器团队合作,捕捉与您的 IT 环境相关的数百万个实时数据点,并审查有关 AWS 上工作负载的适当规模和成本的建议。通过迁移评估器服务,您可以使用AWS 应用程序发现服务TSO Logic 无代理收集器或第三方工具来发现并深入了解当前的计算、存储和总拥有成本。无代理收集器工具可以分析您的本地资源,只需对 VMware、Hyper-V、Windows、Linux、Active Directory 和 SQL Server 基础设施提供只读访问权限。

迁移评估器随后提供广泛的分析,将您的现有工作负载与适当的 AWS 资源进行匹配,例如可以为您的应用工作负载在云中预配的正确 EC2 实例类型、存储平台和数据库服务等。该服务还可以帮助执行假设分析,例如通过选择不同的 EC2 实例购买选项来识别成本节省,并通过按需预配资源来利用弹性特性消除浪费。

最终,迁移评估器帮助公司编写业务案例报告,并展示迁移到云端的成本效益。

在本节中,我们研究了两种 AWS 计算器,以帮助识别与托管工作负载和应用程序相关的成本,并进行总拥有成本分析,旨在帮助客户做出正确的迁移决策。

在本章即将进行的练习中,我们将学习如何使用 AWS Budgets。

练习 15.1 – 在 AWS 上设置成本预算

在本练习中,您将为您的工作负载创建一个每月总成本预算。这将帮助您监控支出并避免不小心超出预算:

  1. 使用 IAM 用户Alice的凭据登录到 AWS 管理控制台。

  2. 从控制台屏幕顶部搜索栏搜索AWS Budgets,然后导航到 AWS Budgets 控制台页面。

  3. 在右侧窗格中,点击创建预算按钮。

  4. 接下来,从预算类型列表中选择成本预算 – 推荐

  5. 点击页面右下角的下一步按钮。

  6. 设置预算金额窗格中,配置以下内容:

    1. 将周期设置为月度

    2. 选择重复预算

    3. 设置您选择的起始月份。

    4. 选择预算方式下选择固定选项。

    5. 接下来,输入您的预算金额。我已将我的设定为 20 美元,如以下截图所示:图 15.6 – AWS Budgets – 设置月度成本预算

      图 15.6 – AWS Budgets – 设置月度成本预算

    6. 向下滚动以查看您的预算范围窗格。在这里,您将看到基于历史成本您的月度成本预算是否合理。正如您将从以下截图中注意到的那样,对于我的 AWS 帐户,20 美元的预算是可以接受的,因为自 2021 年 2 月以来,我一直花费不到 15 美元,这在我的预算范围内:图 15.7 – AWS Budgets – 预算范围

      图 15.7 – AWS Budgets – 预算范围

    7. 最后,为您的预算提供一个名称,然后点击下一步

    8. 接下来,您可以配置警报阈值,在您超过阈值时将收到通知。点击添加警报阈值按钮。

    9. 设置警报阈值下,指定预算金额的 80% 作为阈值,并根据以下截图设置触发器为实际图 15.8 – 设置警报阈值

      图 15.8 – 设置警报阈值

    10. 接下来,在电子邮件收件人下,指定要发送警报的电子邮件地址。

    11. 您还可以设置 Amazon SNS 警报和 Amazon Chatbot 警报。

    12. 点击页面右下角的下一步按钮。

    13. 您还可以定义超出阈值时要执行的操作,为此您需要配置适当的 IAM 角色。现在,只需点击下一步按钮。

    14. 检查您的设置,并点击页面右下角的创建预算按钮。

    15. 您的成本预算将被创建,并且您将能够在概述控制台中查看它,如以下截图所示:

图 15.9 – AWS Budgets – 概述控制台

图 15.9 – AWS Budgets – 概述控制台

请注意,您可以为您的预算设置五个额外的警报,例如以下内容:

  • 当当前月度成本超过预算金额时

  • 当当前月度成本超过预算金额的 80% 时

  • 当预测的月度成本超过预算金额时

在本节练习中,您学习了如何为您的 AWS 帐户创建月度成本预算。设置自定义预算可以在您跨越特定阈值或未来预测成本时提醒您。

接下来,我们提供了本章的总结。

摘要

全球各地的各种规模的企业都可以从将其应用程序和工作负载迁移到云中中受益,并从 AWS 提供的各种服务中获得竞争优势。AWS 使客户能够构建高度可用、容错、可扩展和弹性的云解决方案。AWS 提供了一些最先进的 cutting-edge 技术,帮助您设计和构建强大的应用解决方案。没有 AWS,单凭配置大量服务和资源的成本就会让许多公司,包括初创公司,无法进行创新。

云计算采纳的主要驱动力之一是公司可以节省资本支出,并选择为所有 IT 投资采用可变费用模型。这使得企业能够将更多的原有资本投入到改善其产品和服务中。然而,这需要精心的规划和监控。过于容易就会启动实例和其他资源,产生不必要的费用,特别是当你可能过度配置了支持应用程序所需的基础设施时。这显然会违背转向云计算的主要原因之一。

在本章中,您了解了成本优化的原则,以及您可以采取的措施,确保以正确的价格消费正确的服务。您学会了如何在最需要资源时进行配置,而不是让空闲资源无所事事地积灰尘。针对不同工作负载类型的定价选项使您能够就投资做出明智的决策。此外,AWS 提供了一些不同的管理和监控工具,帮助您保持对开支的充分了解。通过使用成本分析器、成本和使用报告以及 AWS Budgets,您可以在实施最佳实践并仔细规划解决方案的情况下,保持良好的管理。

最后,我们还回顾了几个成本计算器,帮助您估算在 AWS 上实施解决方案所需的投资,以及如何通过迁移评估工具来评估将工作负载迁移到云端能为您节省的费用。

在下一章中,我们提供了两个完整的考试风格练习题,帮助您评估对 AWS 认证云计算从业者考试大纲的理解,并为认证做准备。

通过 AWS 认证云计算从业者考试将有助于推动您在云计算领域的职业发展。本考试指南旨在帮助您不仅取得考试成功,还能在架构、构建和管理实际云解决方案方面获得宝贵的实战经验。通过本学习指南中的大量练习,我们希望您现在对解决实际商业用例更加自信。

我想借此机会感谢你花时间学习这些材料,希望你在设计云解决方案方面获得了宝贵的知识和一些实际经验。

问题

  1. 哪个 AWS 服务允许你为 AWS 账户指定每月费用,并在实际或预测的支出可能超过预算阈值时发送警报?

    1. AWS 预算

    2. AWS 成本探索器

    3. AWS 配置

    4. AWS 定价计算器

  2. 哪个 AWS 服务允许你访问过去 12 个月的使用和支出数据,并预测未来 12 个月的费用?

    1. AWS 成本探索器

    2. AWS 计费警报

    3. AWS 配置

    4. AWS 年度报告

  3. 财务部门希望获得一份报告,详细列出按业务单元/项目名称划分的所有 AWS 资源的月度总支出。其目的是了解每个业务单元/项目的费用。AWS 计费和成本管理服务的哪个功能可以帮助你实现这一要求?

    1. 成本分配标签

    2. 成本与使用报告

    3. AWS 预算

    4. AWS CloudWatch

  4. 哪个 AWS 服务可以分析你的月度计算使用情况,并提供关于购买 EC2 RI 以适应现有按需工作负载的建议?

    1. AWS CloudTrail

    2. AWS 预算

    3. AWS 成本探索器

    4. AWS 迁移评估器

  5. 你计划设计并构建一个三层应用解决方案,包括 EC2 实例、负载均衡器、自动扩展服务和后端数据库。你可以使用哪个 AWS 服务来估算你的提案的月度成本?

    1. AWS 成本探索器

    2. AWS 定价计算器

    3. AWS 成本优化分析器

    4. AWS SNS

第十六章:模拟测试

AWS 认证云从业者考试是一个 90 分钟的多选多答题型考试。AWS 收取 100 美元的报名费用,报名可以通过他们的网站www.aws.training/certification。考试可以在多个国家的测试中心进行,或者可以在家在线参加。

本章将为你提供两个完整的模拟考试,你可以用它们来评估自己是否准备好参加正式的 AWS 认证云从业者考试。

这些测试包括 65 道问题,每道题目后都有答案解释,位于本章末尾。为了有效使用这些测试,确保你遵循以下步骤:

  • 每次测试请留出 90 分钟时间,确保不受干扰。你可以使用手机设置闹钟。

  • 拿出纸和笔,对于每个问题,写下问题编号和正确答案。

  • 确保如果你在完成测试后还有剩余时间,能再检查一遍你的答案。

  • 在 90 分钟结束时,检查你的答案,并与本章最后的答案解释部分进行对比。

你希望在进入考场前能正确回答所有问题。你应该利用这些测试来找出自己没有答对的问题,然后回去复习涵盖该问题概念的章节。这样,你就能弥补知识的空白,并能更好地为正式考试取得高分做准备。

模拟测试 1

  1. 哪种类型的云服务模型最像本地环境,你可以在其中配置虚拟基础设施组件,如计算、网络和存储服务,以便托管你的应用程序?

    1. 软件即服务 (SaaS)

    2. 平台即服务 (PaaS)

    3. 基础设施即服务 (IaaS)

    4. 功能即服务 (FaaS)

  2. 你的公司计划将所有应用程序和服务迁移到云上,但希望分阶段迁移工作负载。这将要求你确保本地基础设施与在 AWS 上部署的应用程序之间有一段时间的连接。你需要建立哪种云部署模型?

    1. 私有云

    2. 公有云

    3. 混合云

    4. 多云

  3. 以下哪些陈述是选择特定 AWS 区域来部署应用程序的有效理由?(选择两个)

    1. 你的组织将选择一个特定的 AWS 区域,以确保你的应用程序更靠近终端用户,从而减少延迟。

    2. 如果你的组织有特定的合规性或数据驻留法律要求,那么你选择 AWS 区域时将受到此要求的制约。

    3. 您的组织应选择离其位置较近的区域,因为您的 IT 员工需要访问 AWS 数据中心以设置服务器和网络设备。

    4. 您的组织会选择一个与业务已有合法存在的 AWS 区域位置。这是因为,除非您在该区域有合法的成立,否则无法访问其他区域。

    5. 您的组织会选择一个 AWS 区域,该区域提供更高的可变成本,但较低的前期成本。

  4. 以下哪个 AWS 全球基础设施组件可以让您缓存内容(视频、图片和文档),并在用户尝试下载时提供低延迟访问?

    1. AWS 区域

    2. 可用区

    3. 边缘位置

    4. 本地区域

  5. 以下哪些 AWS 服务可以帮助您设计混合云架构,并使您的本地应用程序能够访问 Amazon S3 云存储?

    1. Amazon Snowball Edge

    2. AWS Storage Gateway

    3. Amazon 弹性块存储

    4. Amazon CloudFront

  6. 您计划使用 AWS 服务托管一个仍在开发中的应用程序,并且您需要决定订阅哪个 AWS 支持计划。目前您不需要生产级别的支持,任何系统问题您都能接受 12 小时的响应时间。您应该选择哪个最具成本效益的支持计划?

    1. 基本支持计划

    2. 开发者支持计划

    3. 商业支持计划

    4. 企业支持计划

  7. 以下哪些被视为 AWS 上的全球服务?(选择两个)

    1. AWS IAM

    2. Amazon Route53

    3. Amazon EC2

    4. Amazon EFS

    5. Amazon RDS

  8. 以下哪项陈述最 closely 与讨论能够在几分钟内实现全球化的云计算优势相关?

    1. 能够将资本支出转化为可变支出,从而避免巨大的资本支出(CAPEX)。

    2. 能够利用 Auto Scaling 等工具按需即时提供资源。

    3. 能够通过少数几次点击在多个区域部署应用程序。

    4. 能够专注于应用程序的实验和开发,而不是基础设施构建、管理和维护。

  9. 您可以配置哪个 AWS 服务来在您的总支出超过预定的月度费用时向电子邮件地址发送警报?

    1. 在 Amazon CloudWatch 中设置计费警报

    2. 在 Amazon CloudTrail 中设置计费警报

    3. 在 Amazon Config 中设置计费警报

    4. 在 Amazon Trusted Advisor 中设置计费警报

  10. 以下哪种资源类型与其启动所在的可用区相关联?

    1. 弹性块存储EBS

    2. 弹性文件存储EFS

    3. Amazon Route53 托管区域

    4. Amazon DynamoDB

  11. 为了增强 AWS 账户的安全性,您需要确保所有 IAM 用户使用包含至少一个大写字母、一个数字、一个符号以及最少 9 个字符的复杂密码。您可以使用哪个 AWS IAM 功能来配置这些要求?

    1. 密码策略

    2. 权限边界

    3. 服务控制策略(SCPs)

    4. 资源策略

  12. 作为推荐的最佳实践,你可以为根用户和 IAM 用户实施什么额外的身份验证安全措施?

    1. 实施 MFA(多因素认证)。

    2. 实施 LastPass。

    3. 实施 AWS WAF。

    4. 实施 AWS Shield。

  13. 为需要访问你的 AWS 账户的多个共享相同工作职能的 IAM 用户分配权限的最简便方法是什么?

    1. 创建一个客户管理的 IAM 策略,并将相同的策略附加到所有共享相同工作职能的 IAM 用户。

    2. 创建一个 IAM 组,将共享相同工作职能的 IAM 用户添加到该组,并对该组应用具有必要权限的 IAM 策略。

    3. 创建一个 SCP(服务控制策略)来限制共享相同工作职能的用户执行特定权限。

    4. 创建一个具有必要权限的 IAM 角色,并将该角色分配给所有共享相同工作职能的 IAM 用户。

  14. 你已将应用程序的开发外包给第三方提供商。此提供商将需要临时访问你的 AWS 账户以设置必要的基础设施并部署应用程序。你应该为该提供商配置哪种身份以便他们能够访问?

    1. IAM 用户

    2. IAM 组

    3. IAM 角色

    4. 根用户

  15. AWS 上哪个工具可以用来估算你的月度成本?

    1. AWS 定价计算器

    2. AWS TCO 计算器

    3. AWS 免费套餐计算器

    4. AWS 月度计算器

  16. 你需要根据业务单元和部门区分在 AWS 账户中运行的不同工作负载的成本。你如何在 AWS 生成的账单报告中识别你的资源及其所有者?

    1. 在 AWS 账单和成本管理控制台中指定特定标签作为成本分配标签。

    2. 为每个部门设置 SNS 警报。

    3. 创建账单警报。

    4. 在 AWS Organizations 中配置联合账单。

  17. 哪个 AWS 工具可以让你查看你的预留实例RI)使用情况?

    1. AWS 成本探测器

    2. AWS Config

    3. AWS CloudTrail

    4. AWS 个人健康仪表盘

  18. 对于需要通过命令行界面CLI)访问你的 AWS 账户的 IAM 用户,你需要配置哪一组凭证?

    1. IAM 用户名和密码

    2. IAM 访问密钥 ID 和密钥访问密钥

    3. IAM MFA(多因素认证)

    4. IAM 密钥对

  19. 一个应用程序将部署在 EC2 实例上,且需要访问一个 Amazon S3 存储桶以上传创建的任何工件。哪种安全选项被认为是最佳实践,来授予在 EC2 实例上运行的应用程序上传文件到 Amazon S3 存储桶的必要权限?

    1. 创建一个带有一组访问密钥的 IAM 用户账户,并使用 IAM 策略分配所需的权限级别。将访问密钥硬编码到应用程序中。

    2. 创建一个带有用户名和密码的 IAM 用户账户,并使用 IAM 策略分配所需的权限级别。将用户名和密码硬编码到应用程序中。

    3. 使用 IAM 策略创建一个具有所需权限级别的 IAM 角色。将角色附加到运行在 EC2 实例上的应用程序。

    4. 创建一个 IAM 角色,并使用 IAM 策略授予所需的权限级别。将角色附加到将托管应用程序的 EC2 实例上。

  20. 哪项 AWS 服务可以帮助您通过识别允许的权限集和被拒绝的权限集来排查 IAM 策略?

    1. AWS 策略模拟器

    2. AWS 策略管理器

    3. AWS CloudTrail

    4. AWS SCPs

  21. 作为常规合规性流程的一部分,您需要定期审计 IAM 用户的列表,并查看信息,例如是否已配置密码和访问密钥,以及是否已为这些帐户启用 MFA。哪项 AWS IAM 服务使您能够生成包含上述信息的定期报告?

    1. IAM 凭证报告

    2. IAM MFA 报告

    3. AWS CloudWatch

    4. AWS Config

  22. 哪种 AWS 策略可以帮助您定义 IAM 用户或 IAM 角色在您的 AWS 帐户中可以执行的权限边界?

    1. IAM 策略

    2. 基于资源的策略

    3. SCPs

    4. 权限边界

  23. 哪种 AWS 策略可以帮助您控制可以为组织的 AWS 成员帐户定义的最大权限集?

    1. IAM 策略

    2. 基于资源的策略

    3. SCPs

    4. 权限边界

  24. 以下哪种 Amazon S3 存储类别可以帮助您减少不经常访问的对象存储成本,并且在需要时仍然可以立即访问这些对象?

    1. Amazon S3 标准-IA

    2. Amazon S3 Glacier

    3. Amazon S3 Glacier 深度归档

    4. Amazon S3 标准

  25. 您正在托管一个包含重要文件的 Amazon S3 存储桶,您希望增强安全性,使得尝试访问对象的 IAM 用户只能从公司办公网络内访问。您如何配置 S3 存储桶以满足此要求?

    1. 创建一个资源策略,授予必要的访问权限,并添加条件语句来定义和指定公司办公的 IP 地址块。

    2. 创建一个资源策略,授予必要的访问权限,并添加条件语句来指定公司 IAM 用户的帐户。

    3. 创建一个 SCP,并附加条件语句,指定公司办公的 IP 地址块。

    4. 创建一个 Amazon S3 访问控制列表ACL),并添加条件语句来指定公司 IAM 用户的帐户。

  26. 哪种 Amazon S3 存储类别在您不确定 S3 存储桶中数据的访问模式时具有成本效益?

    1. Amazon S3 标准存储类别

    2. Amazon S3 标准-IA 存储类别

    3. Amazon S3 单区 IA

    4. Amazon S3 智能分层

  27. 您的初级同事不小心删除了存储在 Amazon S3 存储桶中的一些财务数据。您如何防止在 Amazon S3 中意外删除数据?

    1. 不要给初级管理员访问 Amazon S3 的权限。

    2. 在您的 S3 存储桶上设置 Amazon S3 版本控制。

    3. 设置 Amazon S3 生命周期管理。

    4. 设置 Amazon S3 终止保护。

  28. Amazon S3 的哪项功能允许你创建一个存储在不同区域中的对象副本,以满足合规性要求?

    1. Amazon S3 跨区域复制CRR

    2. Amazon S3 同区域复制

    3. Amazon S3 版本控制

    4. Amazon S3 多副本

  29. 公司政策要求存储在 Amazon S3 中的对象必须进行静态加密。还规定,你选择的加密方式应该提供审计功能,显示何时使用了 客户主密钥CMK)以及使用者是谁。你需要配置哪种类型的 Amazon S3 加密选项以满足要求?

    1. 使用 Amazon S3 管理的密钥进行服务器端加密SSE-S3

    2. 客户端加密

    3. 使用 AWS 密钥管理服务存储的 KMS 密钥进行服务器端加密SSE-KMS)Bitlocker

  30. 你需要紧急检索某些归档数据的一个小子集,以解决一个待处理的调查。数据存储在 Amazon S3 Glacier 存储类中。你可以选择哪个检索选项来紧急访问数据?

    1. 标准检索选项

    2. 加速检索选项

    3. 批量检索选项

    4. 强力检索选项

  31. 你有一支远程工作团队,他们需要将研究文档和视频上传到你位于 us-east-1 区域的 Amazon S3 存储桶。你希望确保你的远程员工可以以低延迟上传研究材料。你能做些什么来减少上传过程中的速度波动,这通常是由于公共互联网架构引起的?

    1. 为你的存储桶启用 Amazon S3 传输加速S3TA)。

    2. 在你远程员工的网络与 us-east-1 区域的 VPC 之间配置 IPSec 站点到站点 VPN 连接。

    3. 使用 Amazon Storage Gateway 服务。

    4. 设置 Amazon Express Route。

  32. 你需要将大量数据从本地网络转移到 Amazon S3 平台。总数据容量大约为 400 TB。你决定选择 Amazon Snowball Edge 服务来完成转移。此过程中不需要数据计算或处理。你会推荐哪种 版本 的 Amazon Snowball Edge 服务?

    1. Snowball Edge 计算优化

    2. Snowball Edge 存储优化

    3. Snowball Edge 数据优化

    4. Snowball Edge 功能优化

  33. 你在本地托管了几个 Microsoft Windows 应用程序,这些应用程序需要低延迟访问大量存储。你希望使用 Amazon Storage Gateway 服务来托管所有应用程序级的数据。你会推荐哪种网关选项?

    1. Amazon S3 文件网关

    2. Amazon FSx 文件网关

    3. 卷网关缓存模式

    4. 磁带网关

  34. 按照最佳实践,你已将应用程序服务器部署在 VPC 的私有子网内。然而,这些服务器需要互联网访问以下载更新和安全补丁。哪种类型的资源可以让你在不为这些实例分配公有 IP 地址的情况下,允许 EC2 实例在私有子网中访问互联网?

    1. Internet 网关

    2. NAT 网关

    3. 子网

    4. 路由表

  35. 关于安全组,以下哪项陈述是正确的?

    1. 安全组是有状态的,您需要为流量双向流动配置入站规则和相应的出站规则。

    2. 安全组是无状态的,您不需要为流量双向流动配置入站规则和相应的出站规则。

    3. 安全组可以用来明确拒绝来自特定 IP 地址范围的入站流量。

    4. 安全组用于限制 IAM 用户(该组的成员)可以执行的操作。

  36. AWS VPC 服务的哪项功能允许您连接多个 VPC,以便在这些 VPC 之间通过私有 IP 地址空间发送流量?

    1. VPC 对等连接

    2. VPC 流日志

    3. 子网

    4. VPC 端点

  37. 哪项服务可以帮助您减少建立多个 VPC 对等连接所涉及的复杂性?

    1. AWS Transit Gateway

    2. AWS VPC 管理器

    3. AWS Direct Connect

    4. IPSec VPN 隧道

  38. 哪项 AWS 服务允许您使用专用的私有连接将您的本地网络连接到 AWS 账户,从而完全绕过互联网?

    1. IPSec VPN

    2. Express Route

    3. Direct Connect

    4. Snowball

  39. 哪项 AWS 功能可以帮助您通过 IPSec 隧道在本地网络与 AWS VPC 之间建立连接?

    1. Direct Connect

    2. 虚拟专用网络VPN

    3. AWS Outposts

    4. 亚马逊 SNS

  40. 您即将使用应用程序负载均衡器ALB)发布您的 web 应用程序,并希望使用友好的域名而不是 ALB 的 DNS 名称来向用户宣传该站点。您可以使用哪个 AWS 服务来配置别名的名称,使得用户在浏览器中输入友好的域名时,能够直接访问 ALB 的 DNS URL?

    1. 亚马逊 Route53

    2. 亚马逊 CloudFront

    3. 亚马逊 S3

    4. 亚马逊 Direct Connect

  41. 哪项 AWS 服务允许您购买并注册新的域名,可以用来在互联网上发布您的网站?

    1. Route53

    2. VPC

    3. RDS

    4. 弹性 Beanstalk

  42. 您开发了一个 web 应用程序,想要为其提供冗余性和弹性。亚马逊 Route53 服务的哪项功能可以帮助您设计 web 应用程序,在默认情况下,所有用户的流量会被引导到主站点,如果主站点离线,则用户会被重定向到位于不同区域的备用站点?

    1. 简单路由策略

    2. 加权路由策略

    3. 故障转移路由策略

    4. 地理位置路由策略

  43. 您计划通过托管一个新的亚马逊 S3 静态网站,提供免费的食谱指南。该网站将被全球用户访问,内容包括大量有关您提供的食谱的视频和图片。哪个 AWS 服务可以帮助您在用户所在地本地缓存数字资产,从而减少用户访问网站内容时的延迟?

    1. 亚马逊 Route53

    2. 亚马逊 VPC

    3. 亚马逊 CloudFront

    4. 亚马逊 Cloud9

  44. 您已创建了一个包含基础操作系统和所有必要企业设置/配置的 EC2 AMI。您在另一个区域的同事正尝试启动新的 EC2 实例,但他们无法访问您的 AMI。您需要做什么才能让您的同事使用这个新镜像?

    1. 将 AMI 复制到其他区域。

    2. 在区域之间设置 VPC 端点,允许您的同事下载 AMI。

    3. 将 AMI 复制到 S3 存储桶。

    4. 使用 Amazon Snowball 服务将 AMI 的副本发送给您的同事。

  45. 哪种 EC2 实例类型是专为浮点数计算、图形处理或数据模式匹配设计的?

    1. 通用型

    2. 内存优化型

    3. 计算优化型

    4. 加速计算

  46. 您需要在 EC2 实例上部署某个第三方应用程序,其许可条款是基于每个 CPU 核心/插槽计算的。您需要使用哪个 EC2 定价选项来满足这一要求?

    1. 按需实例

    2. 预留实例

    3. Spot 实例

    4. 专用主机

  47. 您目前正在运行一个正在内部开发的新应用程序的测试阶段。您的 UAT 测试人员每天需要访问测试服务器 3 小时,每周 3 次。测试阶段预计持续 5 周。在测试期间,应用程序不能出现任何中断。哪个 EC2 定价选项将是最具成本效益的?

    1. 按需实例

    2. 预留实例

    3. Spot

    4. 专用主机

  48. 哪种 EBS 卷类型是专为关键的、I/O 密集型的数据库和应用程序工作负载设计的?

    1. gp2

    2. st1

    3. sc1

    4. io1

  49. 以下哪种支付选项将帮助您获得 RIs 的最大折扣?

    1. 使用部分预付选项支付的 1 年承诺。

    2. 使用全额预付选项支付的 1 年承诺。

    3. 使用无预付选项支付的 1 年承诺。

    4. 使用全额预付选项支付的 3 年承诺。

  50. 哪个 AWS 服务使您能够快速部署一个虚拟私人服务器VPS),该服务器预先配置了常见的应用程序堆栈、SSD 存储和固定的 IP 地址,并按服务器配置收取固定的月费?

    1. 亚马逊 EC2

    2. 亚马逊 Lightsail

    3. 亚马逊 ECS

    4. 亚马逊 ECR

  51. 您计划在 AWS 上部署一个 Docker 应用程序。您希望无需管理 EC2 实例(如配置和扩展集群,或自己进行虚拟服务器的修补和更新)即可部署您的 Docker 镜像。哪个服务可以满足这一要求?

    1. 使用 EC2 启动类型部署的亚马逊 ECS

    2. 使用 Fargate 启动类型部署的亚马逊 ECS

    3. 使用 ECR 部署的亚马逊 ECS

    4. 使用 Lambda 函数部署的亚马逊 ECS 以管理您的服务器

  52. 以下哪项服务是 AWS 无服务器产品的一部分,允许您在响应触发器或事件时运行代码?

    1. 亚马逊 ECS

    2. AWS Lambda

    3. 亚马逊 EC2

    4. AWS CloudFront

  53. 哪个 AWS 存储选项旨在为 Windows 感知应用程序提供文件共享功能,并提供与 Microsoft Active Directory 集成的选项?

    1. AWS FSx for Lustre

    2. Amazon FSx for Windows 文件服务器

    3. AWS 弹性文件系统

    4. AWS 实例存储卷

  54. 您计划在两个可用区部署 10 个 EC2 实例,这些实例将承载新的业务应用程序。所有服务器需要共享公共文件,并将运行 Amazon Linux 2 操作系统。您会推荐哪种存储架构来托管应用程序服务器的共享文件?

    1. Amazon 弹性文件系统 (EFS)

    2. Amazon FSx Lustre

    3. Amazon S3

    4. Amazon EBS

  55. 您刚刚启动了一个 Windows EC2 实例。您如何获取 Windows 本地管理员密码?

    1. 向 Amazon 提交支持请求以获取密码。

    2. 密码会通过电子邮件自动发送给您。

    3. 密码通过短信发送到您注册的手机。

    4. 使用密钥对解密密码。

  56. 哪个 AWS 服务使您能够通过扩展 AWS 基础设施来配置混合解决方案,从而使 EC2 和 EBS 服务能够托管在您的本地数据中心?

    1. AWS RDS

    2. AWS Direct Connect

    3. AWS Outposts

    4. AWS Route53

  57. 您的公司提供差额投注服务。您希望对当天的交易成本进行日终分析,并进行必要的市场分析。哪个 AWS 服务可以动态配置所需的计算服务,这些服务会根据提交的作业的数量和资源需求进行扩展?

    1. AWS Batch

    2. AWS CloudFront

    3. AWS Lambda

    4. AWS 区块链

  58. 哪个 AWS 服务可以帮助您使用 Kubernetes 在 AWS 上部署、管理和扩展容器化应用程序?

    1. Amazon ECS

    2. Amazon EKS

    3. Amazon MFA

    4. Amazon EC2

  59. 以下哪个陈述是使用 Amazon RDS 相对于在 EC2 实例上安装数据库的优势示例?

    1. Amazon RDS 是一个完全托管的数据库,AWS 管理底层计算和存储架构,以及修补和更新。

    2. Amazon RDS 允许您访问操作系统,使您能够针对操作系统进行数据库的细致调优。

    3. Amazon RDS 比在 EC2 实例上运行 Microsoft SQL Server 数据库更快。

    4. Amazon RDS 会自动启用 Amazon RDS 中数据的加密。

  60. Amazon RDS 的哪个功能可以让您创建数据库的备用副本,并在主副本失败时提供故障转移功能?

    1. 只读副本

    2. 多可用区(Multi-AZ)

    3. 故障转移策略

    4. 快照

  61. 您的公司计划将其本地的 MySQL 数据库迁移到 Amazon RDS。哪个服务可以帮助您进行迁移?

    1. Amazon 服务器迁移服务 (SMS)

    2. Amazon 数据库迁移服务 (DMS)

    3. Amazon 虚拟机导入导出

    4. Amazon Redshift 迁移工具

  62. AWS Redshift 的哪个功能允许您对存储在 Amazon S3 存储桶中的数据执行 SQL 查询?

    1. Redshift 主节点

    2. Redshift Spectrum

    3. Redshift 复制

    4. Redshift 流

  63. 哪种 Amazon RDS 引擎提供高可用性,并将数据库副本分布在至少三个可用区?

    1. MySQL

    2. PostgreSQL

    3. 微软 SQL Server

    4. 亚马逊 Aurora

  64. 哪个 AWS 托管的数据库服务允许您使用复杂结构存储数据,并且支持嵌套属性选项,例如 JSON 风格的文档?

    1. 亚马逊 RDS

    2. 亚马逊 Redshift

    3. 亚马逊 DynamoDB

    4. 亚马逊 Aurora

  65. 哪个 AWS 数据库服务旨在存储不可变的敏感数据,并且其事务日志是加密可验证的?

    1. AWS QLDB

    2. 亚马逊 Neptune

    3. 亚马逊 Aurora

    4. 亚马逊 RDS

模拟测试 2

  1. 您目前每 4 小时手动对单实例 MySQL Amazon RDS 数据库进行快照。一些用户抱怨,当备份过程初始化时,连接到数据库的应用程序会经历短暂的中断。您可以采取什么措施解决这个问题?

    1. 配置您的 Amazon RDS 数据库,启用只读副本。

    2. 配置您的 Amazon RDS 数据库,启用 Multi-AZ。

    3. 配置 AWS 备份来执行 RDS 数据库备份。

    4. 使用 DMS 服务将 MySQL 数据库迁移到 Microsoft SQL Server。

  2. 您所在的组织位于纽约的医疗行业。您计划使用内存缓存引擎来减轻 Amazon RDS 数据库的负载,以应对频繁的查询。哪个 AWS 内存缓存引擎提供 Multi-AZ 能力、数据加密,并且符合 健康保险流通与问责法案 (HIPAA)?

    1. 亚马逊 Elasticache for Redis

    2. 亚马逊 Elasticache for Memcached

    3. 亚马逊 CloudFront

    4. 亚马逊 DynamoDB DAX

  3. 哪个 AWS 服务提供完全托管的数据仓库功能,并且允许您使用标准 SQL 和 商业智能 (BI) 工具分析大型数据集?

    1. 亚马逊 RDS

    2. 亚马逊 QLDB

    3. 亚马逊 Redshift

    4. 亚马逊 Aurora

  4. 以下哪些服务会进一步增加 EC2 实例的成本?(选择两个)

    1. 详细监控

    2. 使用弹性负载均衡器

    3. 您连接的 S3 存储桶

    4. 您查询的 DynamoDB 表

    5. 设置多个密钥对

  5. 您的开发团队需要部署一个弹性负载均衡器,该负载均衡器将基于 URL 路径和 HTTPS 协议将流量引导到您的 Web 服务器。您会推荐哪种弹性负载均衡器?

    1. 网络负载均衡器

    2. ALB

    3. 网关负载均衡器

    4. 经典负载均衡器

  6. 弹性负载均衡器服务的哪个功能适用于 传输控制协议 (TCP)、用户数据报协议 (UDP) 和 传输层安全协议 (TLS) 类型的流量,并且在 开放系统互联 (OSI) 模型的第 4 层运行?

    1. 网络负载均衡器

    2. ALB

    3. 网关负载均衡器

    4. 经典负载均衡器

  7. 以下关于弹性负载均衡器的哪一项是正确的?

    1. 弹性负载均衡器充当防火墙,以保护运行在 EC2 实例上的应用程序。

    2. 弹性负载均衡器使你能够通过将传入的 web 流量分配到位于多个区域的目标来实现跨多个区域的高可用性。

    3. 弹性负载均衡器使你能够通过将传入的 web 流量分配到位于多个可用区的目标来实现单一区域内的高可用性。

    4. 弹性负载均衡器使你能够通过根据资源的需求来水平扩展,配置或终止 EC2 实例。

  8. 配置弹性负载均衡器的哪个组件,确保你能在指定端口上接收流量,并将该流量转发到负载均衡器后面的 EC2 实例的特定端口?

    1. 端口转发器

    2. NAT 网关

    3. 监听器

    4. Echo

  9. 你正在构建一个多层架构,其中 web 服务器部署在公有子网,应用服务器部署在 VPC 的私有子网中。你会选择哪种类型的负载均衡器来分配流量到应用服务器?

    1. 面向互联网

    2. 内部负载均衡器

    3. 动态负载均衡器

    4. 静态负载均衡器

  10. AWS Auto Scaling 服务的哪个配置功能可以帮助你定义在你的队列中可以启动的 EC2 实例的最大数量?

    1. 自动扩展组

    2. 自动扩展启动配置

    3. 自动扩展最大队列大小

    4. 自动扩展策略

  11. 哪个 AWS 服务可以帮助你仅配置满足应用需求的必要数量的 EC2 实例,从而节省通常与资源过度配置相关的成本?

    1. 弹性负载均衡器

    2. 自动扩展

    3. 成本管理器

    4. EC2 启动器

  12. 你最近推出了一个新的免费优惠券 web 应用程序,该应用程序配置在一个自动扩展组中的一组 EC2 实例上。在黑色星期五促销前流量大幅增加,你发现自动扩展服务并没有启动更多 EC2 实例,尽管 CloudWatch 中的阈值指标已经被突破。你的同事告诉你,你可能已经超过了可以启动的 EC2 实例数量的配额或限制。哪个 AWS 服务可以快速查看并确定是否确实是这种情况?

    1. 个人健康仪表板

    2. AWS 系统管理器

    3. AWS Config

    4. AWS Trusted Advisor

  13. ALB 提供哪种防火墙保护服务来帮助防御常见的 web 攻击,如跨站脚本和 SQL 注入?

    1. AWS WAF

    2. AWS Shield

    3. 亚马逊 Guard Duty

    4. 网络访问控制列表NACLs

  14. 亚马逊 Auto Scaling 服务提供的哪种动态扩展策略可以帮助你根据特定指标的目标值启动或终止 EC2 实例?

    1. 目标追踪扩展策略

    2. 步骤扩展策略

    3. 简单扩展策略

    4. 可预测扩展策略

  15. 你计划使用 Amazon CloudWatch 发送警报,任何时候生产 EC2 实例的 CPU 使用率超过 80% 并持续 15 分钟时都能触发该警报。你可以使用哪个 AWS 服务来发送警报通知?

    1. 亚马逊 SES

    2. 亚马逊 SNS

    3. 亚马逊 SQS

    4. 亚马逊 MQ

  16. Amazon SNS 服务的哪个功能可以让您将通知消息并行推送到多个端点?

    1. 您可以使用 SNS Fanout 场景来帮助您将通知推送到多个端点。

    2. 您可以使用 SNS FIFO 主题来帮助您将通知推送到多个端点。

    3. 您可以更改超时期限,以确保通知能够发送到多个端点。

    4. 为了将通知发送到多个端点,您需要配置 Amazon SQS 与 Amazon SNS 进行集成。

  17. 哪个 AWS 服务使您能够通过将应用组件解耦成分布式系统,并促进微服务架构的设计来设计您的应用架构?

    1. Amazon SNS

    2. Amazon Simple Queue Service (SQS)

    3. Amazon MQ

    4. Amazon Redshift

  18. 您计划使用 Amazon SQS 来帮助解耦您的应用组件。哪个队列类型将帮助您确保从一个组件到另一个组件的消息顺序得以保留?

    1. 配置 Amazon SQS 为标准队列。

    2. 配置 Amazon SQS 为 FIFO 队列。

    3. 配置 Amazon SQS 为 LIFO 队列。

    4. 配置 Amazon SQS 为 DLQ(死信队列)。

  19. 您计划将一个应用迁移到云端。哪个消息代理服务可以让您继续使用 Apache ActiveMQ,并促进应用组件之间的通信?

    1. Amazon SQS

    2. Amazon MQ

    3. Amazon SNS

    4. Amazon SES

  20. 哪个 AWS 服务可以帮助您基于事件(例如从 Amazon S3 存储桶中删除对象)触发 Lambda 函数?

    1. AWS ECS

    2. AWS Batch

    3. AWS EventBridge

    4. Amazon CloudTrail

  21. 您的保险理赔解决方案的应用架构包含一个工作流过程,该过程可能需要最多 30 天才能完成,并且需要通过手动审批过程进行人工干预。您会推荐哪个 AWS 服务来构建该工作流过程?

    1. Amazon SQS

    2. Amazon Step Functions

    3. AWS CloudFormation

    4. AWS Lambda

  22. 您计划配置一个 Lambda 函数,该函数将在工作日的开始和结束时自动启动和停止 EC2 实例。您如何根据指定的计划自动启动和停止 EC2 实例?

    1. 配置 Amazon SNS 以触发警报,启动 Lambda 函数。

    2. 配置 Amazon CloudTrail 以根据指定的计划触发 Lambda 函数。

    3. 配置 Amazon CloudWatch Events 并设定规则,以根据指定的计划触发 Lambda 函数。

    4. 配置 Amazon Scheduler 服务。

  23. 您需要运行某些 SQL 查询来分析来自流媒体源的数据并进行分析。以下哪个服务可以让您实时分析流数据?

    1. Amazon SQS

    2. Amazon Kinesis Data Streams

    3. Amazon Kinesis Analytics

    4. Amazon Athena

  24. 您需要对存储在 Amazon S3 中的每周报告运行临时测试查询。您可以使用哪个 AWS 服务使用标准 SQL 查询 Amazon S3 中的原始数据?

    1. Amazon Athena

    2. Amazon Kinesis

    3. Amazon RDS

    4. Amazon Redshift

  25. 哪个 AWS 服务可以用来将大量流式数据实时加载到你的 Redshift 数据仓库解决方案中?

    1. Amazon Kinesis 数据流

    2. Amazon Kinesis Firehose

    3. Amazon Kinesis 视频流

    4. Amazon Athena

  26. 哪个 AWS 服务可以用来创建和发布交互式 BI 仪表板,并通过 Amazon 提供的 API 和 SDK 嵌入到你的应用程序、网站和门户中?

    1. Amazon Athena

    2. Amazon QuickSight

    3. Amazon Config

    4. Amazon Glue

  27. 哪个 AWS 服务提供无服务器的提取、转换和加载ETL)解决方案,用于从各种来源发现和提取数据,对数据仓库和数据湖中的数据进行清洗或规范化,然后将其加载到数据库中?

    1. AWS QuickSight

    2. Amazon Athena

    3. Amazon Glue

    4. Amazon CloudTrail

  28. 作为迁移到云的一部分,你需要重新托管一个使用 Apache Spark 处理大量数据的大数据项目应用程序。你可以使用 AWS 上的哪个服务来帮助进行数据转换,并执行排序、聚合、连接等 ETL 工作?

    1. AWS QuickSight

    2. Amazon EFS

    3. Amazon EMR

    4. Amazon S3

  29. 你需要定期为当前正在开发的新应用程序构建测试环境。你可以使用哪个 AWS 服务自动构建测试环境的基础设施,从而减少配置所需基础设施的时间?

    1. Amazon Elastic Beanstalk

    2. Amazon CloudFormation

    3. AWS OpsWorks

    4. AWS Systems Manager

  30. 哪个服务可以用来编排和配置环境,通过 Chef 和 Puppet 企业工具部署应用程序?

    1. Amazon CloudFormation

    2. AWS OpsWorks

    3. Amazon Elastic Beanstalk

    4. Amazon Cloud9

  31. 哪个服务允许开发人员将代码上传到 AWS,并为该应用程序配置和管理所需的基础设施?

    1. Amazon Elastic Beanstalk

    2. Amazon CloudFormation

    3. Amazon Cloud9

    4. AWS OpsWorks

  32. Elastic Beanstalk 架构中,以下哪个环境层是为了支持后台操作而设计的?

    1. Web 服务层

    2. Worker 层

    3. 后端层

    4. 数据库层

  33. 以下哪种格式是 CloudFormation 模板编写的?(选择两个)

    1. YAML

    2. XML

    3. CSV

    4. JSON

    5. JAVA

  34. 以下哪项是自定义 CloudWatch 指标的例子?

    1. CPU 利用率

    2. 磁盘读取

    3. 网络字节入

    4. 内存

  35. CloudWatch 的哪个功能可以在特定阈值在指定时间段内被突破时,通过 Amazon SNS 发送通知警报?

    1. 仪表板

    2. 警报

    3. 日志

    4. 事件

  36. 你计划使用 CloudWatch Logs 来监控进入 AWS 环境并专门指向 EC2 实例的网络流量。你希望记录所有通过的端口 80 的入站网络流量。你可以配置哪个服务来帮助你实现这一要求?

    1. ALB 访问日志

    2. VPC 流日志

    3. CloudTrail 日志

    4. Config 日志

  37. 哪个 AWS 服务可以让你跟踪 AWS 账户中的用户活动和 API 使用情况,用于审计目的?

    1. AWS Config

    2. AWS CloudWatch

    3. AWS CloudTrail

    4. AWS Trusted Advisor

  38. 哪项 AWS 服务可以用来查看资源如何相互关联,它们过去是如何配置的,以及查看这些资源随时间的历史变化?

    1. AWS Trusted Advisor

    2. AWS Systems Manager

    3. AWS Config

    4. AWS IAM

  39. AWS Systems Manager 服务的哪个功能可以帮助你在 EC2 实例和本地服务器上推出安全补丁?

    1. Patch Manager

    2. Microsoft WSUS

    3. AWS Config

    4. SCCM

  40. 你计划部署一个三层应用架构,包含一个数据库后端。你的应用程序中硬编码了数据库连接字符串和秘密信息,如用户名和密码。公司安全政策规定这种做法不可接受,并希望你以更安全的方式管理这些秘密信息。你会推荐什么方案?

    1. 将配置信息存储在 SSM 参数存储中,并通过代码引用参数名称以动态检索连接信息。

    2. 将配置信息存储在 Amazon Redshift 中,并通过代码引用连接详细信息以动态检索连接信息。

    3. 将配置信息存储在 Amazon S3 中,并通过代码动态引用连接详细信息。

    4. 将配置信息存储在 EBS 卷上,并通过代码动态引用连接详细信息。

  41. 哪项 AWS 服务可以用来管理和解决影响 AWS 托管应用程序的事件?

    1. AWS Systems Manager 事件响应管理器

    2. AWS Systems Manager 事件管理器

    3. Amazon EventBridge

    4. AWS 个人健康仪表盘 (PHD)

  42. 哪项 AWS 服务可以用来识别那些没有按照安全最佳实践配置的资源?

    1. AWS CloudWatch

    2. AWS Trusted Advisor

    3. AWS IAM

    4. AWS CloudTrail

  43. 你正在尝试查看 AWS Trusted Advisor 服务,以分析你在 AWS 上部署的各种工作负载的潜在成本节约机会。然而,你注意到成本优化类别显示为灰色,且没有关于当前配置状态的报告。是什么原因导致你无法查看成本优化报告?

    1. 你没有足够的权限访问 AWS Trusted Advisor 中的成本优化类别。

    2. 你未订阅任何商业或企业支持计划。

    3. 你已使用 IAM 账户登录,只有 root 用户可以访问定价和成本信息。

    4. AWS 账户没有与之关联的有效借记卡/信用卡。

  44. 哪个 Well-Architected Framework 支柱建议,替换失败的资源通常比试图找出故障原因更好?找出失败的原因可以稍后进行,但专注于替换失败的资源有助于你快速恢复运行。

    1. 成本优化

    2. 容错

    3. 可靠性

    4. 性能

  45. 以下哪项服务可以帮助实现性能支柱中关于确保全球范围内低延迟访问单一 S3 桶中视频内容的指南?

    1. 使用 AWS CloudFront 将视频内容缓存到更接近终端用户的地方。

    2. 使用 AWS DynamoDB DAX 将视频内容缓存到更接近终端用户的地方。

    3. 使用 Amazon Elasticache 将视频内容缓存到更接近终端用户的地方。

    4. 使用 Amazon Kinesis 将视频内容缓存到更接近终端用户的地方。

  46. Well-Architected 框架中的哪个支柱指的是选择适当的定价选项,以便您能够采用按需模型来配置各种资源?

    1. 性能支柱

    2. 可靠性支柱

    3. 容错支柱

    4. 成本优化支柱

  47. 关于 AWS 共享责任模型,谁负责修补 Amazon RDS 数据库实例?

    1. AWS

    2. 客户

    3. 数据库引擎供应商

    4. 客户和 AWS 都负责

  48. 哪项 AWS 服务为客户提供各种合规性报告,确认 AWS 提供的服务是否符合特定要求和监管要求?

    1. AWS CloudTrail

    2. AWS 可接受使用政策 (AUP)

    3. AWS Artifacts

    4. AWS 合规性程序

  49. AWS 允许客户进行漏洞扫描和渗透测试。然而,某些类型的测试是禁止的。以下哪项行为是客户禁止执行的?

    1. 通过尝试猜测您的 Amazon RDS 数据库密码进行暴力破解攻击。

    2. 在 EC2 实例上运行恶意软件检测程序。

    3. 通过您的 ALB 进行跨站脚本或 SQL 注入测试的尝试。

    4. 执行模拟 分布式拒绝服务 (DDoS) 攻击。

  50. 哪项 AWS 服务可以让您使用 CMK 加密存储在 Amazon S3 桶中的数据,并提供审计功能?

    1. Amazon S3 管理密钥的服务器端加密 (SSE-S3)

    2. 存储在 AWS KMS 中的 CMK 的服务器端加密 (SSE-KMS)

    3. 客户提供密钥的服务器端加密 (SSE-C)

    4. 使用 Amazon 管理密钥的客户端加密

  51. 为了满足严格的合规性和监管要求,您需要使用专用的 FIPS 140-2 级别 3 验证设备加密存储在 EC2 实例上的应用数据。您可以使用哪项 AWS 服务来满足这一要求?

    1. AWS KMS

    2. AWS CloudHSM

    3. AWS TPM 硬件模块

    4. AWS 证书管理器

  52. 哪项 AWS 安全解决方案提供防护,以应对 DDoS 攻击,并配备 24/7 的 AWS Shield 响应团队 (SRT) 协助您处理此类攻击?

    1. AWS WAF

    2. AWS X-Ray

    3. AWS Detective

    4. AWS Shield Advanced

  53. 哪种类型的防火墙解决方案与 Amazon CloudFront 和 ALB 集成,提供对常见 Web 攻击(如跨站脚本和 SQL 注入)的保护?

    1. AWS WAF

    2. AWS Shield

    3. AWS X-Ray

    4. AWS 防火墙管理器

  54. 您计划在 Amazon S3 上存储大量数据,并希望监控您的数据访问方式,特别是突出显示任何敏感信息,如个人身份信息PII)。哪种 AWS 服务可以帮助您满足此需求?

    1. Amazon Macie

    2. AWS GuardDuty

    3. AWS Detective

    4. AWS X-Ray

  55. 您正在构建一个将对外公开的移动应用程序,并希望集成第三方身份提供商进行身份验证,如 Facebook 或 Google。哪种 AWS 服务可用于为您的 Web 和移动应用程序设置身份与访问控制解决方案?

    1. AWS Cognito

    2. AWS IAM

    3. Active Directory

    4. AWS Certificate Manager

  56. 哪种 AWS 服务可以通过分析来自 CloudTrail 事件日志、Amazon VPC Flow Logs 和 DNS 日志的数据来帮助检测恶意活动?

    1. AWS Shield

    2. AWS Detective

    3. AWS GuardDuty

    4. Amazon Macie

  57. 哪种 AWS 服务可以通过提取基于时间的事件(如登录、来自 Amazon VPC Flow Logs 的网络流量以及来自 GuardDuty 发现的数据)来帮助您确定安全问题的根本原因?

    1. AWS Shield

    2. AWS WAF

    3. AWS Detective

    4. Amazon Macie

  58. 您计划将本地工作负载和应用程序迁移到云中。哪种 AWS 服务可以让您捕获与您的 IT 环境相关的数百万个实时数据点,并查看适当调整和正确计费工作负载的建议?

    1. AWS 定价计算器

    2. AWS Migration Evaluator

    3. AWS Hybrid Calculator

    4. AWS 成本探测器

  59. 哪种 EC2 实例定价模型可以提供高达 90% 的按需价格折扣,并适用于在实例中断不会影响应用程序工作流的场景?

    1. 预留实例

    2. Spot 实例

    3. 专用实例

    4. 专用主机

  60. 哪种 Amazon S3 存储类可以让您作为 S3 存储容量的一部分托管 48 TB 或 96 TB,并提供在本地创建最多 100 个 S3 桶的选项?

    1. 标准存储类

    2. 标准单区(IA)

    3. Glacier

    4. Amazon S3 on Outposts

  61. 您可以创建哪种类型的策略来授予匿名访问权限,以便访问存储在 S3 桶中的对象,这些对象可用于托管网站资产?

    1. IAM 策略

    2. IAM 权限边界

    3. 资源策略

    4. SNS 策略

  62. 哪种 AWS 服务使您能够注册新的域名以满足企业业务需求?

    1. AWS DNS

    2. AWS Route53

    3. AWS VPC

    4. Amazon Macie

  63. 哪种 AWS 服务提供图像和视频分析,可以用于识别物体、人物、文本、场景和其他活动?

    1. Amazon Rekognition

    2. Amazon Kinesis Video Streams

    3. Amazon Prime

    4. Amazon Athena

  64. 哪种 AWS 服务提供文本搜索和分析功能,可以在接近实时的情况下存储、分析和执行大数据量的搜索操作?

    1. Amazon Redshift

    2. Amazon ElastiCache

    3. Amazon Elastisearch

    4. Amazon Search

  65. 你计划将整个本地网络迁移到云端,并且决定放弃物理桌面和工作站,转而采用完整的 VDI 解决方案。AWS 上哪个服务可以让你在云端配置虚拟桌面,并通过网页浏览器访问?

    1. Amazon EC2

    2. Amazon Lightsail

    3. Amazon WorkSpaces

    4. Amazon EKS

第十七章:答案

第一章

  1. D

  2. A

  3. A

  4. A 和 B

  5. A

  6. C

  7. C

  8. C

第二章

  1. C 和 D

  2. C

  3. D

  4. B

  5. B

  6. A

  7. C

  8. B

  9. A 和 E

  10. A 和 B

  11. C

  12. C

第三章

  1. A

  2. A

  3. A 和 B

  4. A

  5. A

  6. B

  7. B

第四章

  1. A 和 B

  2. B

  3. A

  4. B

  5. A

  6. A

  7. A

  8. A

  9. C

  10. B

第五章

  1. A 和 D

  2. B

  3. C

  4. D

  5. B

  6. C

  7. A

  8. A

  9. B

第六章

  1. B

  2. A

  3. A

  4. A

  5. A

  6. B

  7. D

  8. C

  9. C

  10. B

第七章

  1. D

  2. A

  3. C 和 E

  4. A

  5. A

  6. C

  7. A

  8. A 和 B

  9. A

  10. B

第八章

  1. B

  2. A

  3. A、B 和 C

  4. C

  5. B

  6. B

  7. C

  8. C

  9. B

第九章

  1. C

  2. B

  3. B

  4. A

  5. C

  6. A

第十章

  1. A

  2. D

  3. B

  4. C

  5. A

  6. A

  7. B

  8. C

  9. A

  10. D

第十一章

  1. B

  2. B

  3. C 和 E

  4. A

  5. C

  6. A

  7. C

第十二章

  1. C

  2. B

  3. A 和 B

  4. C

  5. B

  6. B

第十三章

  1. A

  2. A

  3. A

  4. B

  5. A

第十四章

  1. A 和 B

  2. B

  3. A

  4. A

  5. A

  6. B

第十五章

  1. A

  2. A

  3. A

  4. C

  5. B

第十六章

模拟测试 1

  1. C

    基础设施即服务 (IaaS) 是一种云服务模型,它使您能够访问包括计算、网络和存储服务在内的虚拟化基础设施组件。这与托管您自己的 VMware 或 Hyper-V 虚拟化平台非常相似,在这些平台上,您可以部署服务器、附加存储卷并配置网络连接服务。然而,主要的区别在于,您无法访问云托管 IaaS 解决方案中的底层虚拟化平台。IaaS 提供了对虚拟化组件配置的最大控制权,但也要求您负责管理、维护并强制执行这些组件的安全措施。

  2. C

    希望将整个应用程序套件迁移到云的公司通常会在一段时间内进行一系列的迁移项目。在此迁移阶段,需要在本地环境与 AWS 云之间建立连接,以促进迁移。许多公司可能还需要一种更永久的混合架构设计。这可能是因为某些类型的应用程序需要更接近本地基础设施,例如公司的办公网络,从而确保低延迟访问、数据驻留要求,甚至是独特的本地数据处理需求。AWS 提供了多种服务来构建混合云,从 VPN 技术和 Direct Connect 服务到提供本地服务如 AWS Storage Gateway 和 AWS Outposts。

  3. A 和 B

    选择特定 AWS 区域来部署应用程序有多个原因,包括需要更靠近最终用户以减少延迟、数据存储法律、监管要求、可用服务的选择以及成本等。

  4. C

    边缘位置是 AWS 在全球范围内的基础设施设施,帮助缓存 Amazon CloudFront 的内容。任何从源访问的内容都会在一个或多个靠近用户的边缘位置进行本地缓存,以便在特定的生存时间TTL)内访问该内容。通过这种方式,重复访问相同内容时,可以通过低延迟连接提供内容。

  5. B

    AWS Storage Gateway 使你能够通过从本地网络访问 Amazon S3 和 Glacier 环境来构建混合云解决方案。你可以在本地位置安装和配置网关设备,并使用四种网关类型中的任意一种来访问云中的无限存储。这些网关类型包括 Amazon S3 文件网关、Amazon FSx 文件网关、磁带网关和卷网关。

  6. B

    开发者支持计划仅通过电子邮件和聊天提供技术支持。这个支持计划比商业和企业支持计划便宜,推荐用于在 AWS 上进行实验或测试应用程序。

  7. A 和 B

    AWS 中有多个服务是从全球角度进行配置的。例如,使用 IAM 时,你的 AWS 账户中的每个 IAM 用户在整个 AWS 全球基础设施中都是唯一的。同样适用于 Amazon Route 53,在主机区域配置的域名在 AWS 所有区域中都有全球存在。AWS 另一个全球服务是 Amazon CloudFront。

  8. C

    云计算的六大优势之一是几分钟内全球化。这一点得以实现是因为,作为 AWS 客户,你可以访问所有的区域和可用区,在几分钟内配置托管应用程序所需的资源。

  9. A

    Amazon CloudWatch 使你能够设置警报,当某个特定阈值被突破时触发。你可以设置计费警报,监控你的总支出是否超过指定的美元金额。这个警报可以配置为发送到使用 Amazon SNS 服务的电子邮件地址。

  10. A

    Amazon EBS 就像你附加到 EC2 实例的虚拟硬盘(卷)。它们需要在与 EC2 实例启动相同的可用区内进行配置,才能附加到该 EC2 实例。此外,你不能将 EBS 卷附加到另一个可用区的 EC2 实例。如果需要,你可以对 EBS 卷进行快照,并从该快照在另一个可用区启动一个新卷。

  11. A

    AWS IAM 密码策略使你能够在 AWS 账户上定义自定义策略,以指定 IAM 用户密码的复杂性要求和强制轮换周期。这确保了 IAM 用户账户使用复杂、难以破解的密码创建。

  12. A

    多重身份验证MFA)是一种推荐的最佳实践认证安全措施。它要求你使用用户名和密码进行身份验证,同时还需要由你拥有的物理或虚拟设备生成的安全令牌。将这些因素一起使用,可以为你的 AWS 账户设置和资源提供更高的安全性。

  13. B

    IAM 组可以用于将具有共同工作职能的用户组合在一起。然后,你可以将必要的权限分配给 IAM 组,这些权限将传递给该组的成员用户。

    如果可能,应该通过 IAM 角色使用临时安全凭证授予需要访问 AWS 服务和资源的实体访问权限。例如,需要访问另一个 AWS 账户资源的用户,可以被授予假设角色的权限,而不需要在另一个账户中为其创建 IAM 账户。这被视为最佳实践,AWS 强烈推荐这种方法。

  14. C

    IAM 角色使你能够使用由 AWS 安全令牌服务STS)管理的临时凭证,授予外部用户访问你 AWS 账户中资源的权限。IAM 角色还会附加一个 IAM 策略,指定角色将授予外部用户的确切权限集合。

  15. A

    AWS 定价计算器可以帮助你估算在 AWS 上预配资源的每月费用。除了指定预计的使用量外,计算资源费用时,你还可以提供额外的细节,例如 AWS 区域内进出数据的传输量以及跨区域的传输量,以获得完整的估算。

  16. A

    你可以使用成本分配标签在成本分配报告中识别你的资源费用,并按资源和所有者追踪你的 AWS 成本。AWS 提供两种类型的成本分配标签:AWS 生成的标签和用户定义的标签。

  17. A

    AWS 成本探索器使你能够查看过去 12 个月的使用和支出数据,以及预测未来 12 个月的费用。成本探索器还可以提供有关你已经使用了多少 RI 的信息,以及通过使用 RI 相对于按需选项(如 EC2、Amazon Redshift、Amazon RDS 等)所节省的费用。

  18. B

    要以 IAM 用户身份访问 AWS 账户,你需要创建一组访问密钥,包括一个访问密钥 ID 和一个密钥访问密钥。请注意,这些密钥被视为长期访问密钥。每组密钥与特定的 IAM 用户相关联。

  19. D

    你可以创建一个具有必要权限的 IAM 角色来上传对象到特定的 Amazon S3 桶。然后,你应该将该角色附加到你的 EC2 实例上进行部署(这涉及到创建与角色关联的实例配置文件)。这个 IAM 角色将使得在 EC2 实例上运行的应用能够访问 Amazon S3 桶。使用 IAM 角色时,EC2 实例将通过安全令牌服务STS)获得临时凭证。

  20. A

    AWS Policy Simulator 可以帮助你识别在特定身份、身份组和 IAM 角色上允许和拒绝的策略集。你可以获得对已经允许和拒绝的特定权限的详细视图,帮助你排查访问问题。

  21. A

    IAM 凭证报告使你能够查看在你的 AWS 账户中创建的 IAM 用户账户。你可以识别一个 IAM 用户是否配置了用户名和密码,以及访问密钥。你还可以识别那些可能近期没有访问你 AWS 账户资源的 IAM 用户,这可能表明这些账户可能不再需要。定期删除不需要的 IAM 用户账户是安全最佳实践的一部分。

  22. D

    权限边界使你能够定义为 IAM 用户或 IAM 角色基于身份的策略所能授予的最大权限集。

  23. C

    SCPs是 AWS 组织服务的一个功能,允许你设置可为成员账户定义的最大权限集。你还可以设置策略,防止成员账户的根用户在接受加入邀请后移除与组织管理账户的成员身份。

  24. A

    Amazon S3 Standard-IA 可以用于存储那些你不打算频繁访问的对象,但同时,当你需要这些数据时,依然可以立即访问。

  25. A

    你可以创建一个包含条件语句的资源策略,允许你根据预定义的条件(例如公司办公室网络的 IP 块)限制策略的应用。

  26. D

    Amazon S3 Intelligent Tiering 非常适合如果你不确定对象访问模式的情况。对象会自动在四个不同的存储层之间转换,其中两个是延迟访问层,旨在在频繁访问和不频繁访问之间移动对象,而另外两个是可选的归档访问层。对于不频繁访问层,如果你在 30 天内没有访问这些对象,它们将转换为 Amazon S3 Standard-IA 存储类别,这样会更便宜。如果你稍后需要再次访问相同的对象,它们将被转换回 Amazon S3 Standard 存储类别。

  27. B

    为了防止意外删除或覆盖,可以启用 Amazon S3 版本控制。此服务确保如果有人在没有指定版本 ID 的情况下尝试执行删除请求,则该对象不会被删除。相反,将添加删除标记,并且对象将从视图中隐藏。然后,您可以删除此标记以重新启用对该对象的访问。您还应考虑设置存储桶策略,以确保并非所有用户都可以执行删除请求。

  28. A

    Amazon S3 CRR 用于异步复制不同 AWS 区域的 AWS 存储桶之间的对象。此功能可用于满足合规性和监管要求,这些要求可能要求您将数据的副本存储在数千公里外以备灾难恢复DR)之用。

  29. C

    使用 SSE-KMS,您可以加密 Amazon S3 中的对象。您可以创建和管理您的 CMK,并利用审计功能查看您的 CMK 被谁以及何时使用。此服务与 Amazon CloudTrail 集成,提供完整的审计功能。

  30. B

    如果您需要紧急访问存档中的某些数据,可以选择加速检索选项。加速检索将在 1 到 5 分钟内为最多 250 兆字节MB)的存档提供服务。

  31. A

    S3TA 减少了由于公共互联网架构常常出现的速度波动。S3TA 通过 Amazon CloudFront 全球分布的边缘位置和 AWS 骨干网络来路由您的上传。反过来,这为您的数据传输提供了更快的速度和始终如一的低延迟。

  32. B

    Amazon Snowball Edge 存储优化设备提供了更大的存储容量,非常适合数据迁移任务。配备 80 TB 的 HDD 和 1 TB 的 串行先进技术附件SATA)SSD 卷,您可以开始将大量数据迁移到云中。该设备还配有 40 个 vCPU 和 80 GB 内存。

  33. B

    Amazon FSx 文件网关使您能够将需要大量存储的本地 Windows 应用程序连接到云托管的 Amazon FSx Windows 文件服务器服务,并提供低延迟连接。Amazon FSx 文件网关还支持与 Active DirectoryAD)的集成,并能够使用 ACLs 配置访问控制。

  34. B

    NAT 网关帮助代表配置为使用它们的 EC2 实例转发外向请求到互联网。NAT 网关将 EC2 实例的源 IPv4 地址替换为 NAT 网关的私有 IP 地址,从而充当代理。响应流量随后被 NAT 网关重新定向回发出原始请求的 EC2 实例的私有 IP 地址。

  35. B

    安全组是有状态的。这意味着即使你没有配置任何入站规则,响应任何出站请求的流量也将被安全组允许入站。同样,如果你配置了任何入站规则,响应任何入站流量的出站响应流量也会被允许,无需你显式创建这些出站规则。

  36. A

    VPC 对等连接是两个 VPC 之间的私有网络连接。该服务允许你连接多个 VPC,以便一个 VPC 中的实例可以通过私有 IP 地址空间访问另一个 VPC 中的资源。

  37. A

    配置多个 VPC 连接时,VPC 对等连接的问题在于每个 VPC 必须与其对等体建立一对一连接。这会迅速创建复杂的连接,难以管理。每个 VPC 的路由表也需要为每个对等连接进行配置。

    AWS Transit Gateway 允许你通过网关以中心辐射模型连接 VPC,极大地减少了这种复杂性,因为每个 VPC 只需要连接到网关即可访问其他 VPC。

  38. C

    Direct Connect 是一种服务,允许你通过专用的私有连接将企业数据中心连接到 VPC 以及 AWS 提供的公共服务,如 Amazon S3,从而完全绕过互联网。该服务可实现最高 100 Gbps 的带宽连接。

  39. B

    你可以在本地网络和 VPC 之间设置VPN连接。这是一个通过公共互联网在两个端点之间建立的安全加密站点到站点隧道。它提供 AES 128 或 256 位IPsec加密,这意味着你可以在两个端点之间安全地传输数据。

  40. A

    Amazon Route 53 可以帮助你创建别名记录,使得当用户在浏览器中输入公司域名友好的名称时,流量将被引导到 AWS 服务,例如 ALB,从而访问 Web 应用程序。

  41. A

    Amazon Route 53 提供域名注册服务。你可以购买并管理域名,例如example.com,Amazon Route 53 将自动为你的域名配置 DNS 设置。

  42. C

    为了提供高可用性,你可以在理想情况下将资源的两份副本托管在不同的区域。一个资源集将被指定为主要资源,另一个为次要资源。如果主要资源离线,则用户的请求会被重定向到次要资源。

  43. C

    Amazon CloudFront 是一个内容分发网络CDN),它帮助你通过低延迟连接在全球范围内分发静态和动态内容。该服务会将内容缓存到靠近用户访问网站的边缘位置。

  44. A

    要启动一个带有自定义 AMI 的 EC2 实例,你需要确保将该 AMI 复制到目标区域。

  45. D

    加速计算 EC2 实例类型配备硬件加速器或协处理器,用于执行复杂的功能。它们最适合处理复杂的图形、数值计算和机器学习。

  46. D

    专用主机是仅供你使用的物理主机,它使你对如何将实例部署到物理服务器上有更多控制和管理能力。此外,专用主机可以帮助解决基于每个 CPU 核心/插槽的某些第三方许可条款问题。

  47. A

    按需计费适用于需要在需要时灵活消耗计算资源且无需长期承诺的用户。它们非常适合测试/开发环境或具有短时波动性或不可预测工作负载的应用程序。

  48. D

    提供高性能的 IOPS SSD EBS 存储非常适合关键的、I/O 密集型的数据库和应用程序工作负载。

  49. D

    使用全额预付支付选项购买你的 RI 意味着在合同开始时一次性支付整个 RI 期限的费用。你不会收到月度/小时账单,并且你可以享受最大可用折扣。此外,3 年期承诺将比 1 年期提供更大的折扣。

  50. B

    Amazon Lightsail 是一个 VPS 解决方案,预配置了常见的应用程序堆栈,如 WordPress、Drupal、Plesk、LAMP 和你选择的操作系统。你可以选择服务器的大小,且它已预配置了 SSD 存储、IP 地址等。Lightsail 的最佳之处在于,你有一个基于实例类型及已部署操作系统和应用程序的固定月费。

  51. B

    ECS Fargate 启动类型使你能够设置 ECS 环境,而无需启动 EC2 实例、配置和扩展集群或自己修补和更新虚拟服务器。AWS 将管理 ECS 任务在集群中的放置,根据需要扩展它们,并为你完全管理整个环境。

  52. B

    Amazon Lambda 是 AWS 提供的无服务器服务,允许你运行代码并执行某些任务。Amazon Lambda 被称为功能即服务FaaS)解决方案,可以用来构建一个完全无服务器的架构,包含存储、数据库和网络能力,你无需管理任何底层服务器。

  53. B

    需要共享文件的 Microsoft Windows 应用程序可以轻松使用 FSx for Windows 文件共享,它支持 SMB 协议和 Windows NTFS、AD 集成以及分布式文件系统DFS)。

  54. A

    Amazon EFS 可被基于 Linux 的 EC2 实例用作集中式文件存储解决方案。当你有多个 EC2 实例部署的应用程序需要共享公共文件时,这特别有用。Amazon EFS 还可以通过 VPN 或 Direct Connect 服务从本地服务器访问。

  55. D

    当您启动服务器(Windows 或 Linux)时,必须将其配置为与密钥对相关联。这是一个加密的密钥,您可以使用私钥登录到基于 Linux 的服务器,或者通过 AWS 管理控制台解密 Windows 管理员密码。

  56. C

    AWS Outposts 非常适合当您希望将 AWS 资源与本地应用程序之间建立低延迟连接,或者如果由于合规性和监管要求需要进行本地数据处理时。您可以将 AWS Outposts 作为 42U 机架交付到您的本地位置,并可以从 1 个机架扩展到 96 个机架,创建计算和存储容量池。

  57. A

    AWS Batch 可用于在 AWS 上运行成千上万的批处理计算作业,以执行各种类型的分析。AWS Batch 会设置并配置必要的计算资源来满足您的批处理请求。您无需部署服务器集群,因为 AWS 会为您处理这一切。

  58. B

    Amazon EKS 旨在帮助您在 AWS 上使用 Kubernetes 部署、管理和扩展容器化应用程序。

  59. A

    使用 Amazon RDS 而不是在 EC2 上安装数据库的主要优势在于,AWS 管理所有计算和存储资源的配置,并执行所有数据库管理任务。这样,您就可以专注于您的应用程序和托管数据库的基础设施组件。

  60. B

    Amazon RDS 提供一个名为 Multi-AZ 的功能,其中数据库的主副本(主数据库)部署在一个可用区,副本(备用数据库)部署在另一个可用区。数据会持续地从主副本同步复制到备用副本。如果主副本发生故障,AWS 将提升备用副本为新的主副本,并执行故障转移。

  61. B

    Amazon 提供 数据库迁移服务DMS),可用于将数据从一个数据库迁移到另一个数据库。此迁移可以通过 VPN 连接或 Direct Connect 连接将您的本地网络中的数据迁移到 AWS 云。AWS DMS 支持同类迁移,例如从 MySQL 到 MySQL 或 Oracle 到 Oracle,也支持不同引擎之间的迁移,例如从 Oracle 到 Microsoft SQL Server 或 Amazon Aurora。

  62. B

    Redshift Spectrum 允许您对直接存储在 Amazon S3 存储桶中的数据执行 SQL 查询。这在以下情况下尤为有用:例如,如果您将频繁访问的数据存储在 Redshift 中,而将一些不常访问的数据存储在 Amazon S3 中。

  63. D

    Amazon Aurora 是 AWS 的专有数据库,它在至少三个可用区内保持数据库副本。Amazon Aurora 的速度比标准 MySQL 数据库快五倍,比标准 PostgreSQL 数据库快三倍。它还提供自我修复的存储功能,支持每个数据库实例最多 128 TB 的扩展。

  64. C

    DynamoDB 支持键值和文档数据模型(如 JSON)。DynamoDB 是一个 NoSQL 数据库解决方案,提供灵活的模式,并在任何规模下都能提供单毫秒级别的性能。

  65. A

    Amazon QLDB 是一个完全托管的账本数据库,提供由中央可信授权方拥有的透明、不可篡改并且加密可验证的事务日志。Amazon QLDB 能够维护所有数据变化的历史记录。

模拟测试 2

  1. B

    在仅部署了单个 RDS 数据库实例的场景下,当备份过程启动时,用户可能会遇到短暂的 I/O 中断。通过为你的 Amazon RDS 数据库配置多可用区,备份将从数据库的备用副本而非主副本中进行。这将确保用户在访问数据库时不会遇到短暂的宕机。

  2. A

    Amazon Elasticache for Redis 专为复杂数据类型设计,提供多可用区功能、数据加密,以及符合 FedRAMP、HIPAA、PCI-DSS 的合规要求,并提供高可用性和自动故障转移选项。

  3. C

    Amazon Redshift 是 AWS 提供的数据库仓储解决方案,专为分析设计,并且优化了对多个列或单列大量数据的扫描。与按行组织数据不同,Redshift 通过列透明地组织数据。你可以使用标准 SQL 来查询数据库,并与现有的 BI 工具配合使用。

  4. A 和 B

    详细监控和使用弹性负载均衡器会增加你的 EC2 实例成本。这是因为弹性负载均衡器不属于免费层,你将根据每小时或部分小时的负载均衡器运行时间以及每小时使用的 负载均衡器容量单元 (LCUs) 付费。此外,基本监控是免费的,而详细监控是收费服务。

  5. B

    ALBs 设计用于在应用层分配流量(使用 HTTP 和 HTTPS)。此外,使用 ALBs,你可以拥有多个目标组,允许你根据不同的应用组件定义复杂的路由规则。你可以配置基于路径的路由、基于主机的路由等。你还可以将 Lambda 函数配置为负载均衡器的目标。

  6. A

    网络负载均衡器设计用于在 OSI 模型的第四层操作,并能够处理每秒数百万个请求。网络负载均衡器专为负载均衡 TCP 和 UDP 流量而设计,并保持超低延迟。

  7. C

    使用负载均衡器,你可以将传入流量引导到在给定区域内多个可用区中注册的多个 EC2 实例。这样,即使某个 EC2 实例发生故障或整个可用区离线,你也能提供高可用性。

  8. C

    你需要将监听器配置为特定端口,以便接受传入流量,并将流量转发到 EC2 实例的端口。

  9. B

    内部负载均衡器的节点只有私有 IP 地址,并允许在 Web 层和内部应用层之间进行通信。内部负载均衡器的 DNS 名称可以公开解析为节点的私有 IP 地址。因此,内部负载均衡器只能路由来自具有访问权限的 VPC 客户端的请求。

  10. A

    在配置自动扩展组时,你可以定义组的最小和最大规模。你还可以选择将组的大小保持为初始大小,这样就不会扩大组的规模,但能确保始终有精确数量的 EC2 实例运行。

  11. B

    Amazon Auto Scaling 可以根据 CloudWatch 指标帮助你根据 EC2 实例负载的变化来配置新的 EC2 实例。同样,当需求减少时,你可以配置 Auto Scaling 终止不需要的资源,从而节省成本。

  12. D

    AWS Trusted Advisor 是一款在线工具,可以为 AWS 基础设施提供指导,提升安全性和性能,降低成本,并监控服务配额。Trusted Advisor 的服务配额(服务限制)类别可以在你使用特定服务的服务配额超过 80% 时通知你。你可以根据推荐删除资源或请求增加配额。

  13. A

    AWS ALB 服务与 Web 应用防火墙WAF)集成,有助于防止常见的 Web 攻击,如 SQL 注入和跨站脚本攻击。

  14. A

    使用目标追踪扩展策略,Auto Scaling 将根据特定指标的目标值启动或终止 EC2 实例。目标追踪策略跟踪指标值,并尝试确保运行的 EC2 实例数量正确,以达到该目标值。

  15. B

    亚马逊 简单通知服务SNS)是一种基于推送的消息和通知系统,可以用于允许一个应用组件向另一个应用组件或直接向最终用户发送消息。因此,Amazon SNS 可用于在特定的 CloudWatch 指标超过某个阈值并触发警报时发送通知。

  16. A

    Fanout 场景使你能够将消息发布到 SNS 主题进行并行异步处理。你可以将通知发送到支持的端点,如 Kinesis 数据 Firehose 传输流、Amazon SQS 队列、HTTP(S) 端点和 Lambda 函数。

  17. B

    亚马逊 SQS 是一款完全托管的消息排队解决方案,能够帮助你将应用组件解耦成分布式系统,并促进微服务的设计和架构。像 Amazon SQS 这样的排队系统可以帮助你应用的不同组件独立工作。队列可以存储请求/任务形式的消息,直到有可用的容量。

  18. B

    SendMessageBatchReceiveMessageDeleteMessageBatch)。

  19. B

    Amazon 推荐使用 Amazon MQ 来迁移现有消息代理中的应用程序,特别是在需要兼容 JMS 等 API 或 AMQP 0-9-1、AMQP 1.0、MQTT、OpenWire 和 STOMP 等协议的情况下。

  20. C

    Amazon EventBridge 是一个无服务器的 事件总线服务,它允许你从应用程序流式传输实时事件,支持 Lambda 函数等目标,这些目标可以被触发以执行某种形式的操作。在前面的示例中,如果有人尝试删除 S3 存储桶中的对象,EventBridge 可以触发 Lambda 函数,从而针对该事件采取某些行动。

  21. B

    Amazon Step Functions 使你能够将这些工作流定义为一系列包含状态的状态机,这些状态组成了工作流。状态根据输入做出决策,执行某些操作,并生成输出到其他状态。Step Functions 还允许你集成人工交互,特别是在需要手动干预的情况下,并且可以运行最长达 1 年。

  22. C

    你可以配置 CloudWatch Events 规则,在预定的时间触发 Lambda 函数。你需要先创建 Lambda 函数,然后在 CloudWatch 事件的规则设置中指定 Lambda 函数作为目标,按指定时间触发该函数。

  23. C

    Kinesis Data Analytics 让你能够实时查询和分析流数据。你可以使用 Java、Python 和 SQL 等标准编程和数据库查询语言,查询正在被摄取的流数据。

  24. A

    Amazon Athena 是一个交互式查询服务,可以使用标准 SQL 分析 Amazon S3 中的数据。要设置该服务,你需要指定源 S3 存储桶并定义一个模式。

  25. B

    Amazon Kinesis Firehose 旨在捕获、转换并将流数据传递到多个 AWS 服务,包括 Amazon S3 和 Redshift,几乎是实时的。该服务还可以批量处理、压缩、转换和加密数据流,从而减少存储使用并提高安全性。

  26. B

    Amazon QuickSight 是一个无服务器的 商业智能 (BI) 服务,可以帮助你构建交互式仪表盘,并将可视化嵌入到应用程序和网页门户中。

  27. C

    AWS Glue 是一项完全托管的 ETL 服务,简化了客户准备和加载数据进行分析的过程。

  28. C

    Amazon EMR 是一个托管的 Hadoop 框架,允许你处理大量的大数据。你可以使用开源工具,如 Apache Spark、Apache Hive、Apache HBase、Apache Flink、Apache Hudi 和 Presto。

  29. B

    Amazon CloudFormation 是一个可以帮助你使用代码设计、构建和部署基础设施的解决方案。你可以创建使用声明式方法的模板,指示 CloudFormation 按照测试团队的要求,重复构建一个精确的基础设施。CloudFormation 模板也可以配置为接受输入参数,用于特定环境的配置和构建所需的变化。

  30. B

    AWS OpsWorks 是一个配置管理和编排服务,使你能够使用 Chef 和 Puppet 在云端和本地配置资源,例如服务器。通过 OpsWorks,你可以为应用程序堆栈定义服务层,如数据库层、负载均衡器层等。

  31. A

    Amazon Elastic Beanstalk 是一项服务,使你能够部署应用程序,而无需手动配置支撑应用程序的基础设施。你只需上传支持的语言和环境中的代码,AWS 会配置底层基础设施,例如计算、存储和网络组件,以支持应用程序。Amazon Elastic Beanstalk 还允许你指定底层基础设施组件的部署方式——例如,你可以指定部署的 EC2 实例类型和大小,或者强制部署一定数量的 EC2 实例,作为自动扩展组的一部分。

  32. B

    在多层应用架构中,后端操作,如应用程序、中间件或数据库操作,是由 Elastic Beanstalk 配置中的工作层执行的。AWS Elastic Beanstalk 还将配置一个 Amazon SQS 队列,以促进 Web 服务层和工作层之间的通信。

  33. A 和 D

    CloudFormation 模板可以用 JSON 和 YAML 格式编写。这些是声明性标记语言,可以帮助 CloudFormation 在你的 AWS 账户中配置基础设施。

  34. D

    内存是一个自定义指标,因为内存指标是操作系统级别的,默认情况下无法监控。要获取自定义指标,你需要使用 CloudWatch Agent 或 PutMetricData API 操作将它们发布到 CloudWatch。

  35. B

    你可以配置 CloudWatch 警报来监控指定资源的指标,例如 EC2 实例的平均 CPU 利用率。如果指标在指定时间段内超过特定阈值,则警报会触发并采取某些行动。只有当阈值被突破并持续一段时间时,警报才会触发。

  36. B

    VPC 流日志可以捕获进出 VPC 网络接口的 IP 流量信息。你可以配置 VPC 流日志以捕获所有流量、特定子网的流量或 EC2 实例的特定网络接口的流量。

  37. C

    AWS CloudTrail 存储你 AWS 账户内发生的每个活动的事件历史记录,你可以通过 CloudTrail 控制台查看。你可以创建轨迹来存储特定的管理事件或数据事件,并且如果需要超过 90 天的事件历史记录,CloudTrail 也支持。

  38. C

    AWS Config 是一项服务,允许你查看 AWS 资源在 AWS 账户中的配置和部署情况。这包括配置的详细信息,以及随时间变化的配置更改。你还可以使用 AWS Config 强制执行特定的配置规则,确保遵守内部指南,以满足合规要求。

  39. A

    AWS Systems Manager 的 Patch Manager 使您能够自动修补您的 EC2 实例,包括安全性和应用程序更新。请注意,Windows 服务器上的应用程序更新仅限于 Microsoft 发布的更新。

  40. A

    AWS Systems Manager 的 Parameter Store 使您能够将敏感信息,如密码和数据库连接字符串,作为参数值提供。这些值可以存储或加密,您的应用程序可以被配置为在需要时安全地从 Parameter Store 中检索这些值。

  41. A

    AWS Systems Manager 的 Incident Manager 服务提供一个管理控制台,用于跟踪所有事件,通知响应人员事件的影响,识别有助于故障排除的数据,并帮助您恢复服务。

  42. B

    AWS Trusted Advisor 分析您的资源及其配置,并将这些配置与安全实践进行对比,以识别节省成本、提高系统可用性和性能或解决安全问题的机会。

  43. B

    AWS Trusted Advisor 服务提供不同级别的检查,这取决于您订阅的 AWS 支持计划。要访问所有类别的完整检查范围,您必须订阅 Business 或 Enterprise 支持计划。订阅这两种计划中的任何一种,您还可以使用 Amazon CloudWatch Events 来监控 Trusted Advisor 检查的状态。

  44. C

    可靠性支柱同样关注您如何根据架构设计快速恢复故障。这是因为故障难以避免,您的架构必须能够迅速从这些故障中恢复。一个关键概念是,替换故障的资源通常比尝试找出故障原因并解决导致故障的问题更有效。

  45. A

    在为云架构解决方案时,您必须根据性能需求选择资源类型和大小,同时持续监控您的资源,以确保根据需求保持这些性能水平。Amazon CloudFront 可以通过减少全球访问大量内容时的延迟来帮助您提高性能。它通过在边缘位置缓存正在访问的内容来实现这一点。

  46. D

    成本优化支柱侧重于确保您以避免不必要成本的方式架构和构建解决方案。同时,您还希望确保您的应用程序具有高性能、可靠性、操作效率和安全性。为了实现成本优化,您应该了解您的消费模式,并分析资金流向。

  47. A

    Amazon RDS 是一个托管数据库服务。客户可以配置数据库,并选择实例类型和大小来支持数据库。但是,客户无法管理实例本身,因为 AWS 会负责这一部分,包括打补丁和安装数据库更新。相比之下,EC2 实例的补丁更新是客户的责任,因为 EC2 不是一个完全托管的服务。

  48. C

    合规报告和协议可以通过 AWS 上的一个门户——AWS Artifact访问。这些报告包括 AWS 的服务组织控制SOC)报告、支付卡行业PCI)报告,以及来自不同地区认证机构的认证。

  49. D

    作为客户,你需要遵循渗透测试的服务政策,包括允许的服务和禁止的活动。这些禁止的活动包括拒绝服务DoS)、DDoS、模拟 DoS 和模拟 DDoS。

  50. B

    使用 SSE-KMS,你可以创建和管理CMK,并使用这些密钥来加密数据密钥和你的数据。SSE-KMS 还提供了额外的功能,如审计能力,并与 CloudTrail 集成。

  51. B

    AWS CloudHSM 是一个专用的硬件安全模块HSM),允许你在云中生成和管理加密密钥。AWS 提供了专用的符合 FIPS 140-2 Level 3 标准的 HSM 设备,放置在你的 VPC 中,并由 AWS 全权管理。

  52. D

    AWS Shield 是一个完全托管的服务,提供 DDoS 攻击防护。AWS Shield Advanced 提供额外的防护,保护你的 EC2 实例、ELB、CloudFront、Global Accelerator 和 Route53 资源免受攻击。该服务还提供专门的 AWS Shield Response TeamSRT),24/7 全天候协助你应对此类攻击。

  53. A

    AWS WAF 可以帮助你保护应用程序的第 7 层OSI模型,这有助于你监控和保护 HTTP 和 HTTPS 上的流量。这样,你就能保护你的内容免受常见的网络攻击,如 SQL 注入和跨站脚本攻击。

  54. A

    Amazon Macie 利用机器学习和模式匹配技术检测并警报任何存储在 Amazon S3 中的敏感数据,如PII

  55. A

    Amazon Cognito 使你能够为 Web 和移动应用程序设置身份和访问控制解决方案,使用诸如 OAuth 2.0、SAML 2.0 和 OpenID Connect 等标准。通过 Amazon Cognito,你可以创建用户池和身份池。

  56. C

    AWS GuardDuty 是一个威胁检测服务,可以分析和检测针对你的 AWS 账户和应用工作负载的恶意活动。该服务能够检测暴露的凭证的使用、与恶意 IP 地址和域名的通信,以及你 AWS 账户中执行的不正常活动。

  57. C

    Amazon Detective 可以提取基于时间的事件,例如登录、来自 AWS CloudTrail 和 Amazon VPC 流日志的网络流量,并将你的 GuardDuty 发现结果导入,以确定这些安全发现的根本原因。

  58. B

    使用迁移评估器服务,您可以使用 AWS 应用发现服务、TSO Logic 无代理收集器或第三方工具来发现并深入了解当前的计算、存储和总拥有成本。无代理收集器工具可以分析任何本地资源,只需对您的 VMware、Hyper-V、Windows、Linux、Active Directory 和 SQL Server 基础设施提供只读访问权限。

  59. B

    Spot EC2 实例非常适合容错、可扩展或灵活的应用程序,且您的应用程序能够容忍中断。Spot 实例可以帮助您节省高达 90% 的按需价格,并且无需预先承诺。

  60. D

    Amazon S3 on Outposts 通过在您的 Outposts 上存储数据于多个设备和服务器之间,实现数据的耐用性和冗余性。它非常适用于低延迟访问,同时使您能够满足严格的数据驻留要求。

  61. C

    资源策略旨在使您能够访问 Amazon S3 存储桶中的对象等资源。此策略使您能够识别授予访问权限的主体。通过基于资源的策略,您可以将主体配置为通配符(*),表示任何人,并允许您授予匿名访问权限。

  62. B

    Amazon Route53 提供完整的域名注册服务。当您选择注册某个名称时,您可以选择 .com.co.uk.org.net 等顶级域名。如果您选择的名称在某个特定的顶级域名下不可用,您可以尝试使用其他顶级域名。

  63. A

    Amazon Rekognition 是一项使用机器学习来识别图像和视频中的物体、人物、文本、场景和活动的服务,还可以检测不当内容。Amazon Rekognition 可用于各种应用解决方案,如识别人物,或在图像和视频中识别敏感数据,如 PII

  64. C

    Elasticsearch 是一个开源全文搜索和分析引擎,可以分析各种类型的数据,如文本数据、数值数据、地理空间数据、结构化数据和非结构化数据。Amazon Elasticsearch 提供与 Kibana(数据可视化工具)和 Logstash(一个开源的服务器端数据处理管道)的集成。

  65. C

    Amazon WorkSpaces 是一项终端用户计算服务,使您能够在云中部署虚拟的 Linux 和 Windows 桌面。AWS 管理这些虚拟桌面,包括安全补丁和操作系统管理。使用 Amazon WorkSpaces,您可以考虑将本地桌面基础设施迁移到 虚拟桌面基础设施 (VDI) 解决方案。

posted @ 2025-06-26 15:33  绝不原创的飞龙  阅读(572)  评论(0)    收藏  举报