使用 Amazon Web Services 提高您的工作效率

已发表: 2022-03-11

在过去的几年里,每个人最热的词是“生产力”。 在快速发展的互联网世界中,快速完成某事总是会得到支持。 尽管需要快速准确地实现真实的业务逻辑,但作为一名经验丰富的 PHP 开发人员,我仍然在其他任务上花费了数百个小时,例如设置数据库或缓存、部署项目、监控在线统计信息等等。 许多开发人员多年来一直在为这些所谓的杂项任务苦苦挣扎,他们浪费时间而不是专注于项目逻辑。

四年前,当一位朋友提到亚马逊网络服务 (AWS) 时,我的生活发生了变化。 它打开了一扇新的大门,极大地提高了生产力和项目质量。 对于没有使用过 AWS 的任何人,请阅读这篇文章,我相信您会觉得值得您花时间阅读。

提高您的生产力

Amazon Web Services (AWS) 可以在几分钟内提高您的工作效率。
鸣叫

AWS 背景

Amazon Web Services 于 2006 年正式推出。很多人都听说过它,但可能不知道它可以提供什么。 那么,第一个问题是:什么是 AWS?

Amazon Web Services (AWS) 是云计算服务的集合,也称为 Web 服务,它们构成了 Amazon.com 提供的云计算平台。

维基百科

从这个定义中,我们知道了两件事:AWS 是基于云的,AWS 是服务的集合,而不是单一的服务。 由于这并不能告诉您太多信息,因此在我看来,初学者最好将 AWS 理解为:

  • 正如定义所说,AWS 是云中的服务集合。
  • AWS 在线提供快速计算资源(例如,您需要 10 分钟来设置 Linux 服务器)。
  • AWS 提供负担得起的费用。
  • AWS 提供开箱即用的易于使用的服务,这可以节省大量手动设置数据库、缓存、存储、网络和其他基础设施服务的时间。
  • AWS 始终可用并且具有高度可扩展性。

当然,使用 AWS 还有更多优势,因此,让我们快速了解一下它如何提高您的工作效率。

免费创建 AWS 账户

要开始使用任何服务,您需要有一个帐户。 为 AWS 创建一个账户应该不会超过五分钟。 确保您手头有以下信息:

  • 一个电子邮件地址,用于接收确认电子邮件。
  • 一张信用卡,由于设置过程始终免费,因此无需付费。
  • 一个电话号码,它将接收自动系统调用以识别用户

而已。 准备好上面列出的信息后,请访问 AWS 网页,然后按照易于遵循的说明创建一个帐户。

请注意以下事项:

  • 大多数 AWS 服务按月提供大量免费套餐资源。 也就是说,测试 AWS 通常会花费很少或不花费任何费用。
  • 根据我的经验,电话号码和其他个人信息没有被滥用

获取您的第一个 EC2 服务器设置

云服务的好处之一是能够按需获取共享资源。 亚马逊为用户访问其服务提供了四层服务,按容易程度排列:

  • 管理控制台,
  • 命令行工具,
  • 开发工具包,
  • RESTful API。

在本文中,我们将使用管理控制台。 因此,登录到控制台后,您将看到如下屏幕:

在 AWS 中设置您的第一台 EC2 服务器

有两个地方需要注意:

  • 在右上角,您会找到区域选择器。 AWS 在全球 11 个不同的地区提供服务,并且还在不断增长。 选择一个区域作为您的选择,或将其保留为美国东部(弗吉尼亚北部)作为默认值。 不同地区的定价可能会有所不同,随着使用量的增长,您应该牢记这一点。
  • 大部分屏幕都充满了服务列表。 我们将在本节中介绍 EC2。 快速浏览一下 AWS 提供的功能。 如果它们没有意义,请不要担心,所有服务都将自行运行。 但是,通过使用它们的组合,您将获得更高的生产力。

云资源最基本的需求是虚拟服务器。 EC2 或 Elastic Compute Cloud 是亚马逊为其虚拟服务器服务选择的名称。 让我们看看让 Linux 服务器联机是多么容易。

  • 在 EC2 管理控制台中,启动启动过程,如下所示:

在 AWS 中设置您的第一台 EC2 服务器

  • 选择一个机器映像(简称 AMI)开始。 这是将运行您的机器的操作系统。 选择您喜欢的任何系统。 我建议您从使用yum管理包的 Amazon Linux 开始:

在 AWS 中设置您的第一台 EC2 服务器

  • 接下来,选择实例类型。 您可以将其理解为虚拟服务器的硬件规格。 您可以从t2.micro开始,因为您将在第一年使用此实例每月免费使用 750 小时。 请注意,这仅在您注册之日起的第一年有效,并且适用于t2.micro实例。 如果您只想体验一下 AWS,这很划算。

在 AWS 中设置您的第一台 EC2 服务器

  • 通过更详细地配置服务器的能力,您可以启动服务器。 第一次使用 EC2 时,您将看到类似于下图的屏幕。 关于安全的警告告诉我们亚马逊对安全方面的重视程度。 但是,在访问有关托管服务的部分之前,我们可以忽略此警告。

在 AWS 中设置您的第一台 EC2 服务器

  • 最后,要访问远程服务器,我们需要一个身份。 AWS 将提示我们选择一个 SSH 密钥对,如下图所示。 下载隐私密钥文件并单击启动按钮。 是的,我们完成了; 正在配置新的虚拟服务器,并将在几分钟内准备就绪。

在 AWS 中设置您的第一台 EC2 服务器

  • 实例准备就绪后,您可以使用您的隐私密钥作为默认用户ec2-user登录系统。 ec2-user是 AWS 默认值,也具有 sudo 功能。 虽然无法更改默认用户名,但您可以创建任何用户并根据您的偏好分配适当的权限。 您的服务器地址可以在这里找到:

在 AWS 中设置您的第一台 EC2 服务器

上面的过程应该不到五分钟,这就是我们启动和运行虚拟服务器的容易程度。 在下一节中,我们将了解 AWS 如何帮助我们管理刚刚创建的实例。

按需计费

大多数 AWS 资源都按小时计费,这提供了很好的灵活性。 例如,以我们刚刚创建的 EC2 实例为例,有两种方法可以让它停止服务:停止和终止。 这两项操作都将停止计费。 不同之处在于,通过停止一个实例,我们可以稍后重新启动它并保存我们所有的工作。 相反,通过终止实例,我们将实例返回给 AWS 进行回收,并且无法恢复信息。 默认情况下,AWS 设置每个区域每个账户 20 个实例的限制导致终止实例的需要,并且停止的实例在终止之前仍然计数。

我们可以通过以下方式快速停止实例:

在 AWS 中设置您的第一台 EC2 服务器

当您停止 EC2 实例时,您的账单也会停止增长。 它在以下场景中特别有用:

  • 当您想尝试新事物时,如果您只需要支付几个小时的费用,成本会更高,而且您可能不会超过某些服务的免费套餐。
  • 当您的计算需求在生产环境中扩展时。 例如,在过去,我需要预留通常比峰值使用量多 30-50% 的计算资源。 使用 AWS,我可以以更灵活的方式预置资源:

在 AWS 中设置您的第一台 EC2 服务器

AWS 的定价信息可在线获取。 经过一番计算,你可能会提出一个问题:AWS真的更便宜吗? 通过将一个月的小时费率相乘,看起来它根本没有竞争力。 答案是肯定的和否定的。

如果您仅计算一个月内按需资源的小时费率,AWS 并不便宜。 但是,我们仍然有预留实例计费选项,如下图所示:

在 AWS 中设置您的第一台 EC2 服务器

对于最低资源要求,我们可以使用预留实例以及作为按需实例计费的其他不同资源实现 30% 到 70% 的折扣。 在实践中,一年承诺会便宜 30% 到 40%,而使用预留实例的三年承诺会更便宜。 这就是为什么我会在上述问题上投“是”的原因。 如果您将安全和监控优势包括在内,AWS 会更便宜。

管理服务

AWS 的目标之一是尽可能多地消除运营成本。 传统上,我们需要一个庞大的系统工程师团队来维护我们基础设施的安全和健康,无论是在现场在线。 经验丰富的团队将编写和部署他们的自动化工具来简化流程。 然而,管理服务在实践中也成为一个复杂的项目。 AWS 在帮助我们管理资源方面起到了救星的作用。 下面,我列出了 AWS 提供的一些最常用的服务:

  • AWS 安全组,
  • IAM,身份访问管理,
  • 云观察,
  • 以及 OpsWorks 等自动部署服务的列表(本文不会涉及)。

AWS 安全组

AWS 如何处理服务的访问控制是在两个单独的层中完成的。 在网络层面,它是通过使用一种称为“安全组”的概念来实现的。 所有 AWS 服务都在安全组中。 安全组决定谁可以通过。 以我们的 EC2 实例为例,AWS 自动为我们创建了一个安全组:

在 AWS 中设置您的第一台 EC2 服务器

我们可以通过配置入站/出站规则来决定什么可以进来,什么可以出去。 EC2 服务支持 TCP、UDP 和 ICMP 规则。 安全组就像一个外部硬件级别的防火墙,我们永远不需要考虑修补它。

使用安全组的另一个优点是它是可重用的。 一个安全组可以在多个资源之间共享。 在实践中,它消除了为每个资源一一设置安全策略的麻烦,大大提高了维护效率。 此外,安全组的可共享性使我们能够在一个地方对其进行配置,并将该安全策略应用于任何其他资源,而无需为每个资源一个一个地手动设置它。

身份和访问管理

AWS 提供了另一种使用 IAM 处理访问控制的方法。 当您需要访问 RESTful 接口时,这是一个应用程序级别的安全控制。 每个 REST 请求都必须签名,以便 AWS 知道谁在访问该服务。 此外,通过检查预配置的策略列表,AWS 将确定是否应拒绝或允许该操作通过。

我们不会在本文中详细介绍 IAM。 但是,请注意 AWS 对安全性进行了很多考虑,因此您可以确保没有未经授权的访问者可以访问您的机密数据。

云观察

CloudWatch 是 AWS 提供的一项服务,用于从您的 AWS 资源中收集和跟踪各种指标。 它更强大,因为它能够对某些事件(或警报)做出反应。 在 CloudWatch 的帮助下,我们可以监控新创建的 EC2 实例的运行状况。

  • 我们可以快速向我们的 EC2 实例添加警报:

在 AWS 中设置您的第一台 EC2 服务器

  • 可以通过为许多不同目的指定标准来创建警报:

在 AWS 中设置您的第一台 EC2 服务器

注意:SNS 是 AWS 提供的基于主题的服务,用于发送通知。 通知可以通过电子邮件、短信、iOS/Android 推送通知和许多其他格式发送。

从监控到通知,CloudWatch 尝试通过几次点击来自动化监控需求。 为各种 AWS 服务预定义了大量指标。 对于高级用户,您甚至可以为您的应用程序创建自定义指标。

在成本方面,CloudWatch 提供的免费套餐服务通常对于初创项目来说已经足够了。 但是,即使您的业务增长,增加的成本通常也不到服务成本的 1%。 查看详细定价以获取更多信息。 考虑到使用 CloudWatch 设置监控系统是多么容易,它已成为最常用的监控工具。

无忧申请服务

作为开发人员,我们可能经历过以下场景:

  • 我们的应用程序需要一个数据库组件,这意味着我们必须:
    • 为数据库获取服务器。
    • 安装数据库软件。
    • 为服务器和数据库配置监视器。
    • 计划备份方案。
    • 根据需要修补软件。
    • 还有许多其他未在此处列出。
  • 我们的应用程序需要分布式文件存储,这意味着我们必须:
    • 查找用于分布式文件存储的现有开源(或商业)解决方案。
    • 准备所需的服务器。
    • 安装和配置所选的解决方案,这通常并不简单。
    • 为服务器和数据库配置监视器
    • 还有许多其他未在此处列出
  • 我们的应用程序需要一个缓存。
  • 我们的应用程序需要一个消息队列。
  • 还有很多其他需要解决的问题,另外,我们还需要做前置配置和后置监控工作。

而且,您可能已经猜到了,这是 AWS 提供帮助的另一个重要领域。 有很多应用程序级服务可用,因此您无需考虑其他任何事情。

让我们介绍其中的一些,以便您快速了解一下。

RDS,为您管理但不是由您管理的数据库

关系数据库(RDBMS)已被许多应用程序广泛采用。 在生产环境中,使用 RDBMS 部署应用程序时始终需要特别注意,首先是如何设置和配置数据库,然后是何时以及如何进行备份和恢复。

在我们的团队中,我们的数据库管理员 (DBA) 曾经花费至少 30% 的时间来编写设置和维护脚本。 随着 AWS RDS 的引入,我们的 DBA 有更多时间进行 SQL 性能调优,这是您的 DBA 投资的首选领域。

那么,RDS 为您提供什么? 简而言之:

  • RDS 支持大多数流行的数据库引擎,包括 MySQL、SQLServer、PostgreSQL。
  • 只需单击几下即可创建一个数据库,无论是节点还是集群。
  • RDS 在名为“Parameter Group”的服务下提供对共享数据库参数的内置支持。
  • RDS 在 Security Group 的帮助下提供了对访问管理的内置支持,这与我们在 EC2 中介绍的非常相似。
  • RDS 通过单击启用多可用区来提供附加服务。 所有监控、待机和故障切换都是自动完成的。
  • RDS 的维护和备份是自动化的。

总而言之,RDS 在设置和维护数据库服务方面节省了大量时间。 作为交换,您将比相应的 EC2 服务器多支付约 40% 的费用。 因此,选择 RDS 还是自行部署相应的服务器是一个业务决策。 但是,它确实允许您将更多时间投入到与实际业务相关的工作上,而不是基础设施的稳定性和可扩展性上。 此外,您很快就会注意到这是 AWS 倡导的业务方式。

Dynamo DB,一种可扩展到数十亿条记录的键值存储

NoSQL 已成为近年来最受欢迎的话题。 由于许多现实生活中的项目不需要各种关系 DBMS 的支持,因此向市场推出了一系列 NoSQL 数据库。 亚马逊在这方面并没有落后。 DynamoDB (https://aws.amazon.com/dynamodb) 是亚马逊在 2012 年宣布推出的键值存储,该服务的核心贡献者是世界顶级超频专家之一的亚马逊 CTO Werner Vogels可扩展的系统。

亚马逊处理大量流量已不是什么秘密。 DynamoDB 源自 Dynamo,Dynamo 一直是亚马逊许多业务的内部存储引擎,包括每年圣诞节为数十亿次请求提供服务的购物车服务。 DynamoDB 在扩展方面没有限制。

此外,与 Cassandra 或 MongoDB 等其他 NoSQL 解决方案相比,DynamoDB 具有巨大的经济优势; 以预留吞吐量(每秒允许写入/读取多少次)为单位计费,可实时增减。 以下是 DynamoDB 与其他独立 NoSQL 解决方案之间的成本对比表:

业务需求DynamoDB 服务DynamoDB 成本使用其他服务使用其他服务时的费用
小本生意
(少于 1000 DAU,16GB 数据)
10个写单元
10个读单元
9.07 美元/月 • t1.micro ••
16GB EBS •••
14.64 美元/月
中型企业
(少于 100k DAU,160GB 数据)
100个写入单元
100 个读取单元
101.62 美元/月m4.xlarge
160GB EBS
190.95 美元/月
大型企业
(高达 1m DAU,1TB 数据)
1000 写入单位
1000 个读取单元
852.58 美元/月集群 c4.4xlarge • 512GB EBS • 1329.24 美元/月

• 公平地说,价格是根据美国-东部地区的按需定价计算的
•• 选择AWS EC2 实例来托管其他NoSQL 服务
••• EBS 是 AWS 提供的持久存储服务

从表中我们可以看出,DynamoDB 提供开箱即用的服务,而且与构建自己的键值存储相比,通常价格更低。 这是因为除非您达到 MongoDB/Cassandra 集群的最大容量,否则您会为从未使用过的东西支付更多费用。

亚马逊以完全托管的方式提供其服务。 这意味着您不必担心如何设置、扩展或监控您的 DynamoDB; 它们都是由 AWS 完成的。 事实上,读写 DynamoDB 项目总是以恒定的时间复杂度来衡量,而不管被操纵的数据的大小。 因此,一些应用程序在切换到 DynamoDB 后选择丢弃缓存层。 确实很神奇。

SQS,分布式队列服务

在处理大量数据时,我们经常将计算分发到许多计算节点。 在全球开展业务时,我们经常需要管道来处理从分布在地理范围内的节点收集的数据。 为了帮助满足此类事件的要求,AWS 引入了 SQS,即简单队列服务。 与许多公认的队列服务一样,SQS 提供了一种在不同逻辑组件之间以持久方式传递消息/作业的方法。

顾名思义,SQS 是 AWS 初期提供的一项基础服务。 然而,亚马逊一直在稳步开发 SQS,根据需要,SQS 可能与您需要的一样简单或强大,并带有许多可自定义的参数。 SQS 的一些高级功能包括:

  • 将消息保留长达 14 天。
  • 用于避免故障事件中消息丢失的可见性机制。
  • 每条消息的传递延迟。
  • 重新驱动策略以处理失败的消息(所谓的死信)。

队列服务不应该太复杂。 您可能想知道为什么值得用一整节来介绍 SQS。 或许你已经猜到原因了; 与其他 AWS 服务一样,SQS 是一项完全托管的服务,这意味着:

  • 队列具有高度可扩展性; 它可以是您正在传递的数十条消息或每秒数百万条消息,因此 SQS 可以即时扩展。
  • 队列是持久的和分布式的,这意味着关键数据不会丢失,除非它们过期。
  • 您无需设置服务器即可部署队列软件。 当然,您也不需要为服务设置复杂的监控

S3,一个文件存储,但不仅仅是一个文件存储

S3 代表简单存储服务,就像 Dropbox 一样为最终用户提供服务,但这是针对应用程序的。 根据定义,S3 是具有简单 Web 界面的基于对象的存储。

S3 对用户来说很简单,但也带有许多高级功能。 I S3 已成为行业标准,尤其是对于使用其他 AWS 服务的应用程序。 这主要是因为 S3 非常易于集成,以至于它已成为大多数 AWS 服务的流行外部存储目标。 此外,许多服务,如 DynamoDB、SQS 等,在内部大量使用 S3。

了解 S3 应该会扩大使用其他 AWS 托管服务的好处。 这是因为大多数服务将其备份存储在 S3 上。 此外,S3 是服务的常见导出/导入目的地,包括但不限于 DynamoDB、RDS 和 Redshift。

最后,S3 就像其他 AWS 服务一样; 它是完全托管的,因此我们可以简单地开始使用该服务,而无需设置任何服务器或故障转移机制。 经济方面,S3 也是按使用付费的服务,因此,您随时可以免费试用。

更高级的服务和 SDK

还有许多其他 AWS 服务也值得注意。 由于篇幅有限,这里只列出一些有趣的:

  • Redshift:基于列的数据库,可用于以非常快速的方式处理数万亿数据。 如果您负责大量数据的ETL,您必须尝试一下。
  • 数据管道:I允许您在 AWS 服务之间快速传输数据,并进一步支持在更小的分片中定期处理数据。
  • ElastiCache:托管 Memcache 服务器,简单但完美地完成工作。
  • Lambda:下一代云计算。 Lambda 以事件驱动的方式运行一段上传的代码,为设计分布式应用程序打开了一扇新的大门。
  • Route53:强大的 DNS 解决方案,在其他工业标准 DNS 解决方案之上支持加权响应、基于地理位置的响应。
  • SNS:易于使用的通知服务,以订阅者/发布者模式设计。
  • 还有很多。

我认为每当您向应用程序引入一些新组件时检查 AWS 是一个好习惯。 大多数情况下,AWS 会给您一个惊喜,因为它会提供现成的 SaaS 替代方案。

此外,为了更容易访问 RESTful 接口,亚马逊提供了几乎所有流行编程语言的 SDK。 找到自己喜欢的 SDK 应该没有问题。

概括

我们在本文中介绍了 AWS 的一些最广泛使用的服务。 可以肯定的是,AWS 将在某些领域为您的业务提供帮助。 例如,您可以选择将现有服务组件迁移到其 AWS 等效组件,例如将 MySQL 数据库迁移到 RDS。 您可能会问自己是否有任何适用于我的软件组件的 AWS 服务? 因此,立即获得一个 AWS 账户,并在几分钟内提高您的工作效率。


进一步阅读 Toptal 工程博客:

  • 在云中为云开发:在 AWS 中使用 Docker 进行大数据开发
  • 做好功课:7 个 AWS 认证解决方案架构师考试技巧
  • 使用 AWS SSM 的 SSH 日志记录和会话管理
  • 使用 TypeScript 和 Jest 支持:AWS SAM 教程