在AWS中部署高度可用的3层体系结构
#aws #database #ec2 #vpc

根据亚马逊,“ 3层体系结构是多层体系结构的最受欢迎的实现,由单个Web层,应用程序层(逻辑层)和数据层组成。”

在本文中,我将展示如何构建一个由上述3层组成的高度可用,容忍度的3层体系结构,该体系结构具有自定义VPC及其组件。

您可以在我的GitHub Repository中找到与EC2相关的所有项目。

Web Tier

2公共子网
2个可用性区
公共路线表
互联网网关
Web服务器安全组
Nat Gateway
应用程序负载平衡器 - 互联网面向

的自动缩放组 2带启动带静态网页的EC2实例

应用层

2私人子网
2个可用性区
私人路线表
应用程序服务器安全组
应用负载平衡器 - 内部面向

的自动缩放组 2 EC2实例

数据或数据库层

2私人子网
2个可用性区
私人路线表
数据库服务器安全组
数据库RDS

目标:

先决条件:

  • 使用AWS IAM用户帐户访问亚马逊管理控制台 (不是根帐户)。
  • Admin Permissions的适当IAM

使用的资源:

知道如何创建EC2 instancesSub GroupsKey pairs

我已将AWS文档转交给创建Custom VPCssetting up Auto-scaling coupled with Application Load Balancer

让我们开始!

该项目实施的步骤:

  • 创建一个VPC及其组件 - 6个子网(2中2个子网 3层公共和私人的可用区域),Internet网关,NAT网关,3个路线表(1个公共和2个私人)。
  • 创建3个安全组(对于3层)。
  • 创建2个应用程序负载平衡器,1个用于Web层 (面向互联网)和另一个用于应用程序层(内部)。
  • 创建Web Tier(WEBLT)和应用程序层(Applt)的启动模板。
  • 创建Web层和一个具有2个EC2实例的应用程序层。
  • 从RDS页面创建一个数据库子网。使用RDS(免费层)创建数据库层。配置第三安全组以接受应用程序层安全组的流量。
  • 从Internet验证Web层访问并ping应用程序层。您也可以通过Bastion主机(跳跃主机)进入它。
  • 清理
  • 我们到目前为止所做的

创建一个VPC及其组件 - 6个子网(在2个公共和私人的2个可用区域中分别有2个子网),Internet网关,NAT网关,3个路线表(1个公共和2个私有)

创建VPC
VPC仪表板
名称标签-Project -VPC
IPv4 CIDR -10.0.0.0/16
单击创建VPC

Image description

创建6个子网-WebPubsub1a,webpubsub1b,appprisub1a,appprisub1b,dbprisub1a和dbprisub1b1b

转到子网
创建子网
选择-MyVPC
子网名称-WebPubsub1a
可用性区 - us-east-1a
IPv4 CIDR块-10.0.1.0/24

添加新子网
子网名称-Webpubsub2b
可用性区 - us-east-1b
IPv4 CIDR块-10.0.2.0/24

添加新子网
子网名称-AppPrisub1a
可用性区 - us-east-1a
IPv4 CIDR块-10.0.11.0/24

添加新子网
子网名称-AppPrisub2b
可用性区 - us-east-1b
IPv4 CIDR块-10.0.21.0/24

添加新子网
子网名称-dbprisub1a
可用性区 - us-east-1a
IPv4 CIDR块-10.0.12.0/24

添加新子网
子网名称-dbprisub2b
可用性区 - us-east-1b
IPv4 CIDR块-10.0.22.0/24

创建子网

Web公共子网(webpubsub1a,webpubsub1b)启用自动分配公共IPv4地址

将以下设置修改为自动分配IP设置,使您能够自动请求公共IPv4或IPv6地址。

单击WebPubsub1a
动作
编辑子网设置
启用自动分配公共IPv4地址 - 检查
保存

重复WebPubsub1b

Image description

互联网网关
将其连接到新创建的VPC并验证。

去Internet网关
创建Internet网关
名称标签-IGW
创建Internet网关

动作
附加VPC -myVPC
附加Internet网关

Image description

在Web Public Subnet 1A(WebPubsub1a)中使用Elastic IPv4地址创建NAT网关(NATGW)
创建NAT网关
名称-Natgw
子网 - webpubsub1a
单击分配弹性IP
创建NAT网关

Image description

3路线表 - 公共(PubRT)和2个私人(Adrt and dbrt)

转到路线表
创建路由表
名称 - pubrt
VPC -Project -VPC
创建路由表

  • 将入站规则添加到公共路由表(PubRT)以允许从Internet附加流量 - 附加Internet网关(IGW)。

单击pubrt
路线
编辑路线
目的地-0.0.0.0/0
目标-IGW
保存更改

Image description

  • 将公共子网(webpubsub1a,webpubsub1b)关联到公共路由表(pubrt)。

单击pubrt
子网联想
编辑子网联想
检查-WebPubsub1a,webpubsub1b
保存关联

Image description

======

转到路线表
创建路由表
名称 - Advert
VPC -Project -VPC
创建路由表

  • 添加一个入站规则,将NAT网关(NATGW)附加到私人路由表(ADDRT)。因此,私有子网中的实例可以通过IPv4通过NAT网关发送请求(例如,对于软件更新和补丁)。

单击Adryt
路线
编辑路线
目的地-0.0.0.0/0
目标-NATGW
保存更改

Image description

  • 将私有子网(AppPrisub1a,appprisub1b,dbprisub1a,dbprisub1b)关联到私人路由表(Adrdt)。

Image description

======

转到路线表
创建路由表
名称-DBRT
VPC -Project -VPC
创建路由表

DBRT允许在VPC中进行通信。

Image description

  • 将私人子网(DBPRISUB1A,dbprisub1b)关联到私人路由表(DBRT)。

Image description

创建3个安全组(用于3层)。

安全组充当EC2实例的虚拟防火墙,它控制了实例的入站和出站流量。

配置2个安全组,1个用于Web层仅接受ALB(应用程序负载平衡器)的流量,另一个用于应用程序层以接受Web Tier Security Group的流量。

  • WebPubsg-创建Web Security Group(WebPubsg),并添加一个入站规则,以允许网络中的外部世界和端口22(SSH)通过端口80(HTTP)进行任何IPv4流量。

转到安全组
创建安全组
安全组名称 - websubsg
VPC -Project -VPC

入站规则
SSH-端口22-0.0.0.0/0
http-端口80-0.0.0.0/0

创建安全组

Image description

  • appprisg-另一个用于应用程序层并添加入站 从Web服务器组(WebPubsg)(WebPubsg)到DATABASE SECurity Group(DBPRISG)允许通过ICMP和SSH到达TCP协议的ECHO请求(PING)到达TCP协议的规则(PING)

转到安全组
创建安全组
安全组名称 - appprisg
VPC -Project -VPC

入站规则
SSH-端口22 -WebPubsg
所有ICMP -IPV4-端口全部-WebPubsg

出站规则
SSH-端口22 -dbprisg
所有ICMP -IPV4-端口全部-WebPubsg

创建安全组

Image description

  • dbpubsg-创建数据库安全组(dbpubsg),并添加一个入站规则,以允许从App Server组(AppPrisg)(AppPrisg)允许RDP访问访问RDP访问。

转到安全组
创建安全组
安全组名称-DBPRISG
VPC -Project -VPC

入站规则
SSH-端口22 -AppPubsg

创建安全组

Image description

创建2个应用程序负载平衡器,1个针对Web层(面向Internet),另一个用于应用程序层(内部)。

使用面向Internet的Web Load Balancer(WebAlb)创建Web Load Balancer(Webalb)

在AWS管理控制台中的EC2仪表板上
负载平衡
负载平衡器
创建负载平衡器
应用负载平衡器
创建
在基本配置下
负载平衡器名称-Webalb
方案选择“面向互联网”
IP地址类型 - 选择IPv4。
在网络映射下
VPC -Project -VPC
在映射下

选择可用区和公共子网 - webpubsub1a,webpubsub1b

安全组 - webpubsg
听众和路由 - 协议http端口80

单击创建目标组(这将打开一个新选项卡)
创建目标名称 webalbtg
协议 - http,港口80,vpc vpc-project-vpc
服用所有默认值
下一个
单击创建目标组

下一个在负载平衡器页面上
刷新目标组
选择WebAlbtg
创建负载平衡器

需要3-4分钟才能活跃

Image description

Image description

使用内部

创建应用程序负载平衡器(appalb)

在AWS管理控制台中的EC2仪表板上
负载平衡
负载平衡器
创建负载平衡器
应用负载平衡器
创建
在基本配置下
负载平衡器名称-Appalb
方案选择内部
IP地址类型 - 选择IPv4。
在网络映射下
VPC -Project -VPC
在映射下

选择可用区和公共子网 - webpubsub1a,webpubsub1b

安全组 - appprisg
听众和路由 - 协议http端口80

单击创建目标组(这将打开一个新选项卡)
创建目标名称 apptg
协议 - http,港口80,vpc vpc-project-vpc
服用所有默认值
下一个
单击创建目标组

下一个在负载平衡器页面上
刷新目标组
选择apptg
创建负载平衡器

需要3-4分钟才能活跃

Image description

Image description

为Web Tier(WEBLT)和应用程序层(APPLT)创建启动模板。

请参阅我的previous article,以创建具有大量图的类似设置。但是我会再次在这里穿过您的设置。

为Web Tier(WEBLT)创建启动模板

在AWS管理控制台中的EC2仪表板上
在实例下
启动模板
创建启动模板
启动模板名称 模板版本描述 单击快速启动 / Amazon Linux AWS
AMI AMI-026B57F3C383C2EC
实例键入T2.Micro
关键对名称nvirkey
在网络设置下
子网 - webpubsub1a
选择现有的安全组 - webpubsg
在高级网络配置下
网络接口1
自动分配公共IP
预先详细信息

UserData粘贴Bootstrap脚本以使用您的自定义消息安装Apache Web服务器

#!/bin/bash
sudo yum update -y
sudo yum install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd
EC2AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
echo '<center><h1>This Amazon EC2 instance is located in Availability Zone:AZID </h1></center>' > /var/www/html/index.txt
sed"s/AZID/$EC2AZ/" /var/www/html/index.txt > /var/www/html/index.html

创建启动模板

Image description

创建应用程序层(Applt)

的启动模板

在AWS管理控制台中的EC2仪表板上
在实例下
启动模板
创建启动模板
启动模板名称Applt
模板版本说明
Applt
单击快速启动 / Amazon Linux AWS
AMI AMI-026B57F3C383C2EC
实例键入T2.Micro
关键对名称nvirkey
在网络设置下
子网 - appprisub1a
选择现有的安全组 - appprisg
在高级网络配置下
网络接口1
自动分配公共IP
创建启动模板

Image description

为Web层创建自动缩放组,并具有2个EC2实例的应用程序层。

使用2个EC2实例为Web层创建自动缩放组。

在AWS管理控制台中的EC2仪表板上
自动缩放
自动缩放组
创建自动缩放组
名称 - webasg
启动模板 /刷新
选择weblt
下一个
在网络下
VPC
选择-Project -VPC
可用区和子网
选择WebPubsub1a,webpubsub1b
下一个
在配置高级选项下
负载平衡
附加到现有的负载均衡器
现有的负载平衡器目标组
刷新并选择WebAlbtg
下一个
小组尺寸
期望的能力2
最低容量2
最大容量3
目标缩放策略
名称 - 目标缩放策略
进行默认设置
接下来,下一个和下一个
评论
创建自动缩放组

Image description

为具有2个EC2实例的应用程序层创建自动缩放组。

在AWS管理控制台中的EC2仪表板上
自动缩放
自动缩放组
创建自动缩放组
名称 - appasg
启动模板 /刷新
选择应用
下一个
在网络下
VPC
选择-Project -VPC
可用区和子网
选择appprisub1a,appprisub1b
下一个
在配置高级选项下
负载平衡
附加到现有的负载均衡器
现有的负载平衡器目标组
刷新并选择apptg
下一个
小组尺寸
期望的能力2
最低容量2
最大容量3
目标缩放策略
名称 - 目标缩放策略
进行默认设置
接下来,下一个和下一个
评论
创建自动缩放组

Image description

从RDS页面创建数据库子网。使用RDS(免费层)创建数据库层。配置第三安全组以接受来自应用程序层安全组的流量。

从RDS页面创建DB子网。

DB子网组为您的DB实例指定

OM Amazon RDS仪表板
子网组
创建DB子网组
在子网组细节下
名称
dbsub
描述
dbsub
VPC
项目-VPC
可用区域
US-EAST-1A,US-EAST-1B
子网
dbprisub1a,dbprisub1b

Image description

Image description

使用MySQL引擎创建RDS数据库

在RDS仪表板上
创建数据库
选择 - 标准创建
创建RDS数据库
引擎选项
mysql
模板
免费级别
默认值
主用户名作为主密码123
默认值
VPC -Project -VPC
VPC安全组
选择现有的
现有的VPC安全组
dbprisg
可用区
us-east-1a

Image description

Image description

带有图中显示的选项。

注意:vpc - myvpc,db子网组dbsub,安全组 - 仅来自appprisg的入口流量,可用性区和子网dbprisub1a,dbprisub1a,dbprisub1b

>

从Internet验证Web层访问并ping应用程序层。

复制Web实例的公共IP之一
54.208.92.121
使用此命令

使用SSH客户端登录它

ssh -i "NVirKey.pem" ec2-user@54.208.92.121

ping应用程序层

[ec2-user@ip-10-0-1-35 ~]$ ping 10.0.11.221

Image description

清理:

删除所有AWS资源

删除自动升级组
应用负载平衡器
Tatget Group
VPCS
终止EC2

到目前为止,我们所做的事情:

创建了一个高度可用的,易于故障的3层体系结构,该体系结构由Web层,应用程序层和数据库层组成,并具有自定义VPC及其组件。