作者 | MICHAŁ KAPICZYŃSKI
译者 | IT外文选刊
微信原文
硅谷电视系列节目中曾经对Cloud的解释是,“this tiny little area which is becoming super important and in many ways is the future of computing”,中文意思是“这个小小的领域正在变得超级重要,在很多方面是计算的未来” 。这句话应该是准确的,只是现在的云计算已经不渺小了,未来已经到来。所以,让我们来深入了解云计算的世界,学习如何利用AWS平台来构建高可用、安全、容错的云系统,学习它的关键组件是什么以及如何在AWS上部署你的应用。
这篇文章是整个系列中的第一篇,将带领大家了解搭建企业级AWS基础架构的过程。到本系列结束时,我们将搭建一个基础架构,它由在两个不同的可用性区的四个子网组成的VPC组成。里面部署了一个客户端应用、后端服务器和数据库。我们的架构将能够提供现代云系统所需的可扩展性和可用性。我们将解释亚马逊云服务平台的基本概念和组件。在这篇文章中,我们将讨论架构的脚手架,具体来说就是一个虚拟私有云(VPC)、子网、弹性IP地址、NAT网关和路由表。整个系列的文章包括:
第一篇
- 架构的脚手架(VPC、子网、弹性IP、NAT)
第二篇
- 应用程序部署和数据库配置(EC2、AMI、Bastion主机、RDS)
第三篇
- 扩展基础架构(负载均衡、自动扩展)
云计算
在过去几年里,IT产业经历了一场重大变革,大多数全球企业从传统的IT基础设施转向云计算。这背后的主要原因是云计算带来的灵活性和可扩展性,云计算是指通过互联网(云)提供计算服务,如服务器、存储、数据库、网络、分析服务等。在这种模式下,企业只需要为实际使用的云资源付费,不需要管理其背后的物理基础设施。市场上有许多云服务提供商,主要有亚马逊云服务(AWS)、微软Azure和谷歌云。本文将重点介绍AWS上的服务,但请记住,这里介绍的大多数概念在其他平台上都有对应的概念。
基础架构概述
让我们从整个系列中将要构建的内容开始。我们的目标是创建一个真实的、企业级的AWS基础架构,它将能够承载一个由React.js Web应用程序、Java Spring Boot服务器和关系型数据库组成的用户管理系统。
图1
架构如图1所示。它包括一个VPC,有四个子网(2个公共子网和2个私有子网),分布在两个不同的可用性区。在公共子网中托管了一个客户端应用程序、一个NAT网关和一个Bastion主机(后面会有更多介绍),而我们的私有子网包含后端服务器和数据库实例。基础架构还包括互联网网关,以实现从我们的VPC和负载均衡器访问互联网。将后端服务器和数据库放在私有子网中的原因是为了保护这些实例不会直接暴露在互联网上,因为它们可能包含敏感数据。而且它们将只拥有私有IP地址,并且位于NAT网关和面向公共的弹性负载均衡器后面。目前的基础架构通过将实例部署在两个不同的可用性区,并使用Auto Scaling组,提供系统的自动扩展和健康管理,从而提供了高水平的可扩展性和可用性。
图2展示了我们将在AWS上托管的用户管理系统的界面。
图2
这个应用可以在GitHub上找到:
客户端:
https://github.com/mkapiczy/r...
服务端:
https://github.com/mkapiczy/u...
在这一篇,我们将重点介绍基础架构的脚手架,即分配弹性IP地址、设置VPC、创建子网、配置NAT网关和路由表。
AWS免费套餐说明
AWS为新用户提供了12个月的免费套餐,让客户可以在指定限制内免费使用其服务。这些限制包括每月750小时的t2.micro EC2实例、5GB的Amazon S3存储、每月750小时的Amazon RDS等。在AWS管理控制台中,亚马逊通常会提示哪些资源属于免费套餐,在整个本系列中,我们将使用这些免费的服务。如果你想确保自己不会超过免费套餐的限制,记得每当你在AWS上完成工作时,就停止你的EC2和RDS实例。你还可以设置一个计费提醒,如果超过了指定的限制,就会通知你。
AWS概念
1. VPC
我们进入AWS基础架构的广阔世界的第一步是了解亚马逊虚拟私有云(VPC)。VPC 允许开发人员创建一个虚拟网络,他们可以在其中启动资源,并使其与其他 VPC 和外部世界进行逻辑隔离。在VPC中,您的资源拥有私有IP地址,它们可以相互通信。你可以控制对VPC内所有这些资源的访问权限,并根据你的喜好来路由传出流量。
图3
对VPC的访问是通过使用几个关键功能来配置的:
安全组:它们基本上像迷你防火墙一样工作,定义了允许传入和传出的IP地址和端口。它们可以在实例级别设置,在许多实例之间共享,并提供了允许从其他安全组而不是IP访问的可能性。
路由表:路由表负责决定来自子网或网关的网络流量应该被引导到哪里。有一个与VPC关联的主路由表,您可以为您的子网和网关定义自定义路由表。
网络访问控制列表(网络ACL):它作为一个用于入站和出站流量的IP过滤表,可以作为安全组之上的附加安全层。网络ACL的作用类似于安全组,但不是在实例层应用规则,而是将其应用到整个VPC或子网。
2. 子网
实例不能直接在VPC中启动。它们需要运行在子网中。子网是一个额外的隔离区域,它有自己的CIDR块、路由表和网络访问控制列表。子网允许你在同一个VPC中有不同的行为。例如,你可以创建一个可以访问互联网和被互联网访问的公共子网和一个不能通过互联网访问的私有子网,私有子网必须通过NAT(网络地址转换)网关才能访问外部世界。
图4
3. NAT(网络地址转换) 网关
NAT 网关用于使位于私有子网中的实例能够连接到互联网或其他 AWS 服务,同时仍然防止从互联网直接连接到这些实例。例如,当您需要在私有子网中运行的 EC2 实例上安装或升级软件或操作系统时,NAT 可能很有用。AWS提供了一个NAT网关管理服务,只需要很少的管理工作量。我们在设置基础架构的时候会使用它。
4. 弹性IP
AWS提供了一个弹性IP地址的概念,用于方便动态云计算的管理。弹性IP地址是一个公共的、静态的IP地址,它与你的AWS账户相关联,可以轻松分配到你的EC2实例中的一个实例。其背后的想法是,该地址并不与您的实例紧密关联,相反,该地址的弹性特性允许在系统出现任何故障的情况下,迅速将该地址重新映射到您账户中的另一个健康实例。
5. AWS区域
AWS 区域是指 AWS 设有数据中心的地理区域。区域被划分为可用性区(AZ),这些区域是独立的数据中心,相互之间的位置相对较近。可用性区用于提供冗余和数据复制。为您的基础设施选择 AWS 区域时,应考虑以下因素。
就近:出于延迟或监管原因,您通常希望您的应用部署在靠近您的运营区域的地方。
成本:不同的区域有不同的定价。
功能选择:并非所有地区的服务都是可用的,这对于新推出的功能来说尤其如此。
可用区:所有地区至少有2个AZ,但有些地区有更多。根据您的需求,这可能是一个关键因素。
练习
AWS区域
首先,让我们开始选择要操作的AWS区域。在 AWS 管理控制台的右上角,你可以选择一个区域。在这一点上,你选择哪个区域其实并不重要。但是,需要注意的是,您将始终只查看在当前选择的区域中启动的资源。
弹性IP
下一步就是分配一个弹性IP地址。为此,进入AWS管理控制台,找到VPC服务。在左侧菜单栏的虚拟私有云选项下,应该可以看到弹性IP服务。在那里,你可以分配一个由你自己拥有的新地址,也可以从AWS的可用地址池中分配。
图5
配置可用性区A
接下来,我们来创建我们的VPC和子网。现在,我们将只设置可用性区A,在创建VPC之后,我们将在高可用性上下功夫。所以再次进入VPC服务,点击启动VPC向导按钮。在接下来的页面上,您可以选择您希望 AWS为您设置的 VPC 配置类型。为了尽可能的匹配我们的目标架构,我们将选择VPC与公共子网和私有子网的VPC。
图6
在下一个页面中,您可以设置VPC的配置细节,如
- 名称。
- CIDR区块:
- 子网的详细信息。
- 名称:
- IP地址范围----VPC CIDR范围的一个子集。
- 可用区。
如架构图(图1)所示,我们需要在2个不同的可用性区(Availability Zone)中设置4个子网。因此,让我们把VPC的CIDR设置为10.0.0.0.0.0/22,子网如下:
-公共子网-a: 10.0.0.0.0.0/24 (A区)
-私有子网-a: 10.0.1.0/24 (A区)
-公共子网-b: 10.0.2.0.0/24 (B区)
-私有子网-b: 10.0.3.0/24 (B区)
设置好一切,如图7所示。这里需要注意的重要的点是选择公共子网和私有子网的可用性区域(Availability Zone)相同,而且AWS会自动为我们设置一个NAT网关,我们只需要指定之前分配的弹性IP地址即可。现在,点击 "创建VPC "按钮,AWS就会对你的VPC进行配置。
图7
NAT网关
创建VPC结束后,进入到NAT网关部分,应该可以看到AWS为你创建的网关。为了让它更有辨识度,让我们把它的名称标签设置为nat-a。
图8
路由表
AWS还为您的 VPC 配置了路由表。接下来是路由表部分,您应该有两个与您的VPC关联的路由表。其中一个是你的VPC的主路由表,第二个是目前与你的公共子网-a关联的路由表。我们修改一下这个设置。
首先,选择主路由表,进入路由选项,点击编辑路由。目前有两个条目。第一个是指任何引用本地VPC CIDR的IP地址都应该在本地解析,我们不用修改它。第二个是指向NAT网关的,我们要修改它来配置我们VPC的Internet网关,以便让出站流量到达外部网络世界。
图9
接下来是子网关联选项,将主路由表与公共子网-a关联。你也可以将其名称标签编辑为main-rt。然后,选择与VPC关联的第二个路由表,编辑它的路由,将每一个出网请求都路由到nat-a网关,如图10所示。将此路由表与私有子网-a关联,并将其名称标签设置为private-a-rt。
图10
配置可用性区B
为了提供高可用性,我们需要在第二个可用性区也设置好一切。第一步是创建子网。再次转到AWS管理控制台中的VPC服务,在左侧菜单栏中找到子网部分。现在,单击 "创建子网 "按钮并配置一切,如图11和12所示。
公共子网-b
图11
私有子网-b
图12
NAT网关
对于可用性区B,我们需要手动创建NAT网关。为此,在 VPC 控制面板左侧菜单栏中找到 NAT 网关部分,点击创建 NAT 网关。选择公共子网-b,分配弹性IP,并添加NAT-b为名称标签。
路由表
最后一步是配置可用性区B中的子网的路由表。我们的公共子网-b要和公共子网-a有相同的路由规则,所以让我们为公共子网-b的main-rt表添加一个新的关联。然后,点击创建路由表按钮,命名为private-b-rt,选择我们的VPC并点击创建。接下来,选择新创建的表,进入路由选项,通过类似于private-a-rt表的方式编辑路由,但不是将每一个外部请求引导到nat-a网关,而是将其引导到nat-b(图13)。
图13
最后,你应该有三个路由表与你的VPC关联,如图14所示。
图14
总结
就这样,我们的VPC的脚手架已经准备好了。图15所示的图是刚刚创建的整个基础架构。现在,它已经准备好了,可以创建所需的EC2实例、Bastion主机、配置RDS数据库和部署我们的应用程序了,这将在本系列的下一篇中介绍。
图15
参考
https://azure.microsoft.com/e...
https://aws.amazon.com/what-i...
https://docs.aws.amazon.com/A...
https://docs.aws.amazon.com/v...
https://docs.aws.amazon.com/v...
https://docs.aws.amazon.com/v...
https://medium.com/@datapath_...
https://cloudacademy.com/blog...
https://aws.amazon.com/blogs/...
https://aws.amazon.com/quicks...
https://aws.amazon.com/blogs/...
http://thebluenode.com/exposi...
https://app.pluralsight.com/l...
https://app.pluralsight.com/l...
https://app.pluralsight.com/l...
https://datanextsolutions.com...
https://docs.aws.amazon.com/v...