根据亚马逊,“ 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 instances,Sub Groups和Key pairs。
我已将AWS文档转交给创建Custom VPCs和setting 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
创建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
互联网网关
将其连接到新创建的VPC并验证。
去Internet网关
创建Internet网关
名称标签-IGW
创建Internet网关
动作
附加VPC -myVPC
附加Internet网关
在Web Public Subnet 1A(WebPubsub1a)中使用Elastic IPv4地址创建NAT网关(NATGW)
创建NAT网关
名称-Natgw
子网 - webpubsub1a
单击分配弹性IP
创建NAT网关
3路线表 - 公共(PubRT)和2个私人(Adrt and dbrt)
转到路线表
创建路由表
名称 - pubrt
VPC -Project -VPC
创建路由表
- 将入站规则添加到公共路由表(PubRT)以允许从Internet附加流量 - 附加Internet网关(IGW)。
单击pubrt
路线
编辑路线
目的地-0.0.0.0/0
目标-IGW
保存更改
- 将公共子网(webpubsub1a,webpubsub1b)关联到公共路由表(pubrt)。
单击pubrt
子网联想
编辑子网联想
检查-WebPubsub1a,webpubsub1b
保存关联
======
转到路线表
创建路由表
名称 - Advert
VPC -Project -VPC
创建路由表
- 添加一个入站规则,将NAT网关(NATGW)附加到私人路由表(ADDRT)。因此,私有子网中的实例可以通过IPv4通过NAT网关发送请求(例如,对于软件更新和补丁)。
单击Adryt
路线
编辑路线
目的地-0.0.0.0/0
目标-NATGW
保存更改
- 将私有子网(AppPrisub1a,appprisub1b,dbprisub1a,dbprisub1b)关联到私人路由表(Adrdt)。
======
转到路线表
创建路由表
名称-DBRT
VPC -Project -VPC
创建路由表
DBRT允许在VPC中进行通信。
- 将私人子网(DBPRISUB1A,dbprisub1b)关联到私人路由表(DBRT)。
创建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
创建安全组
- 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
创建安全组
- dbpubsg-创建数据库安全组(dbpubsg),并添加一个入站规则,以允许从App Server组(AppPrisg)(AppPrisg)允许RDP访问访问RDP访问。
转到安全组
创建安全组
安全组名称-DBPRISG
VPC -Project -VPC
入站规则
SSH-端口22 -AppPubsg
创建安全组
创建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分钟才能活跃
使用内部
创建应用程序负载平衡器(appalb)在AWS管理控制台中的EC2仪表板上
负载平衡
负载平衡器
创建负载平衡器
应用负载平衡器
创建
在基本配置下
负载平衡器名称-Appalb
方案选择内部
IP地址类型 - 选择IPv4。
在网络映射下
VPC -Project -VPC
在映射下
选择可用区和公共子网 - webpubsub1a,webpubsub1b
安全组 - appprisg
听众和路由 - 协议http端口80
单击创建目标组(这将打开一个新选项卡)
创建目标名称 apptg
协议 - http,港口80,vpc vpc-project-vpc
服用所有默认值
下一个
单击创建目标组
下一个在负载平衡器页面上
刷新目标组
选择apptg
创建负载平衡器
需要3-4分钟才能活跃
为Web Tier(WEBLT)和应用程序层(APPLT)创建启动模板。
请参阅我的previous article,以创建具有大量图的类似设置。但是我会再次在这里穿过您的设置。
为Web Tier(WEBLT)创建启动模板
在AWS管理控制台中的EC2仪表板上
在实例下
启动模板
创建启动模板
启动模板名称
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
创建启动模板
创建应用程序层(Applt)
的启动模板在AWS管理控制台中的EC2仪表板上
在实例下
启动模板
创建启动模板
启动模板名称Applt
模板版本说明
Applt
单击快速启动 / Amazon Linux AWS
AMI AMI-026B57F3C383C2EC
实例键入T2.Micro
关键对名称nvirkey
在网络设置下
子网 - appprisub1a
选择现有的安全组 - appprisg
在高级网络配置下
网络接口1
自动分配公共IP
创建启动模板
为Web层创建自动缩放组,并具有2个EC2实例的应用程序层。
使用2个EC2实例为Web层创建自动缩放组。
在AWS管理控制台中的EC2仪表板上
自动缩放
自动缩放组
创建自动缩放组
名称 - webasg
启动模板 /刷新
选择weblt
下一个
在网络下
VPC
选择-Project -VPC
可用区和子网
选择WebPubsub1a,webpubsub1b
下一个
在配置高级选项下
负载平衡
附加到现有的负载均衡器
现有的负载平衡器目标组
刷新并选择WebAlbtg
下一个
小组尺寸
期望的能力2
最低容量2
最大容量3
目标缩放策略
名称 - 目标缩放策略
进行默认设置
接下来,下一个和下一个
评论
创建自动缩放组
为具有2个EC2实例的应用程序层创建自动缩放组。
在AWS管理控制台中的EC2仪表板上
自动缩放
自动缩放组
创建自动缩放组
名称 - appasg
启动模板 /刷新
选择应用
下一个
在网络下
VPC
选择-Project -VPC
可用区和子网
选择appprisub1a,appprisub1b
下一个
在配置高级选项下
负载平衡
附加到现有的负载均衡器
现有的负载平衡器目标组
刷新并选择apptg
下一个
小组尺寸
期望的能力2
最低容量2
最大容量3
目标缩放策略
名称 - 目标缩放策略
进行默认设置
接下来,下一个和下一个
评论
创建自动缩放组
从RDS页面创建数据库子网。使用RDS(免费层)创建数据库层。配置第三安全组以接受来自应用程序层安全组的流量。
从RDS页面创建DB子网。
DB子网组为您的DB实例指定
OM Amazon RDS仪表板
子网组
创建DB子网组
在子网组细节下
名称
dbsub
描述
dbsub
VPC
项目-VPC
可用区域
US-EAST-1A,US-EAST-1B
子网
dbprisub1a,dbprisub1b
使用MySQL引擎创建RDS数据库
在RDS仪表板上
创建数据库
选择 - 标准创建
创建RDS数据库
引擎选项
mysql
模板
免费级别
默认值
主用户名作为主密码123
默认值
VPC -Project -VPC
VPC安全组
选择现有的
现有的VPC安全组
dbprisg
可用区
us-east-1a
带有图中显示的选项。
注意:vpc - myvpc,db子网组dbsub,安全组 - 仅来自appprisg的入口流量,可用性区和子网dbprisub1a,dbprisub1a,dbprisub1b
>从Internet验证Web层访问并ping应用程序层。
复制Web实例的公共IP之一
54.208.92.121
使用此命令
ssh -i "NVirKey.pem" ec2-user@54.208.92.121
ping应用程序层
[ec2-user@ip-10-0-1-35 ~]$ ping 10.0.11.221
清理:
删除所有AWS资源
删除自动升级组
应用负载平衡器
Tatget Group
VPCS
终止EC2
到目前为止,我们所做的事情:
创建了一个高度可用的,易于故障的3层体系结构,该体系结构由Web层,应用程序层和数据库层组成,并具有自定义VPC及其组件。