快速构建一个三层应用的生产网络
日期: 2022-11-04

前言

 

Amazon Virtual Private Cloud (Amazon VPC) 让您能够全面地控制自己的虚拟网络环境,包括资源放置、连接性和安全性。首先在 AWS 服务控制台中设置 VPC。然后,向其中添加资源,例如 Amazon Elastic Compute Cloud (EC2) 和 Amazon Relational Database Service (RDS) 实例。最后,您可以定义 VPC 相互之间以及跨账户、可用区或 AWS 区域通信的方式。作为 Amazon 的基础服务之一,Amazon VPC 使得自定义 VPC 的网络配置变得容易。您可以为 Web 服务器创建一个能访问互联网的公有子网。您还可以将后端系统(如数据库或应用程序服务器)安置在无 Internet 访问的私有子网中。Amazon VPC 让您可以使用安全组和网络访问控制列表等多种安全层,帮助对各个子网中 Amazon Elastic Compute Cloud (Amazon EC2) 实例的访问进行控制。Elastic Load Balancing 在一个或多个可用区中的多个目标(如 EC2 实例、容器和 IP 地址)之间自动分配传入的流量。它会监控已注册目标的运行状况,并仅将流量传输到运行状况良好的目标。Elastic Load Balancing 根据传入流量随时间的变化对负载均衡器进行扩展。它可以自动扩展来处理绝大部分工作负载。本实验介绍如何快速搭建一个典型的三层应用的生产网络。通过本实验,您将能对  Amazon 的一些基础服务有一个直观的了解。

 

1. 创建 VPC,IGW,route table,public subnet,private subnet

 

1.1 创建 VPC

1. 登录到 AWS Console,打开 VPC 服务
2. 点击 Your VPCs,点击 Create VPC 按钮
3. 在 Name tag 输入 vpc1,在 IPv4 CIDR block 输入 192.168.0.0/16,点击 Create VPC 按钮
4. 选中创建好的 vpc1,从 Actions 选择下拉列表中的 Edit DNS hostnames
5. 勾上 Enable,点击 Save changes 按钮。

 

1.2 创建 IGW

1. 点击 Internet Gateways,点击 Create internet gateway
2. 在 Name tag 里面输入 vpc1,点击 Create internet gateway
选择 Actions下拉列表里面的 Attach to VPC
3. 从 Select a VPC 里面选择前面创建好的 vpc1 点击 Attach internet gateway 按钮。

 

1.3 创建 route table

1. 点击 Route Tables,点击 Create route table 按钮。
2. 在 Name tag vpc1
3. 点击 Route Table ID 后的链接
4. 选择 Routes,点击 Edit routes 按钮
5. 点击 Add route
6. 在 Destination 列输入0.0.0.0/0,在 target 里面选择 Internet Gateway,接着选择前面创建的 IGW,点击 Save routes 按钮

 

1.4 创建 public subnet

1. 点击 Subnets,点击 Create subnet 按钮
2. 在 Name tag 输入 publicsubnet1,VPC 选择前面创建的 vpc1,Availability Zone 选择 1a 结尾的,IPv4 CIDR block 里面输入192.168.0.0/24,点击 Create 按钮。
3. 重复1.4的步骤,创建 publicsubnet2,在 Name tag 输入 publicsubnet2,VPC 选择前面创建的 vpc1,Availability Zone 选择 1b 结尾的,IPv4 CIDR block 里面输入192.168.10.0/24,点击 Create 按钮。
4. 为 publicsubnet1 和 publicsubnet2 关联前面创建的 Route table:分别选择 publicsubnet1 和 publicsubnet2,点击 Edit route table association 按钮
5. 选择之前创建的 route table:vpc1,点击 save 按钮
6. 注意:分别为 publicsubnet1 和 publicsubnet2 关联前面创建的 Route table

 

1.5 创建 private subnet

1. 点击 Subnets,点击 Create subnet 按钮
2. 在 Name tag 输入 privatesubnet1,VPC 选择前面创建的 vpc1,Availability Zone 选择 1a 结尾的,IPv4 CIDR block 里面输入192.168.1.0/24,点击 Create 按钮。
3. 重复1.5的步骤,创建 privatesubnet2,在 Name tag 输入 privatesubnet2,VPC 选择前面创建的 vpc1,Availability Zone 选择 1b 结尾的,IPv4 CIDR block 里面输入192.168.20.0/24,点击 Create 按钮。
4. 注意:privatesubnet1 和 privatesubnet2 使用 vpc1 默认的 Route table,不需要单独关联。

 

2. 创建 Aurora MySQL

在 console上搜索 RDS,打开 Amazon RDS 服务。

 

2.1 创建 DB Subnet group

1. 点击 Subnet groups,点击 Create DB Subnet Group 按钮
2. 在 Name 和 Description 分别输入 lab1,VPC 选择前面创建的 vpc1
3. Add subnets 选择1.5里面创建的两个 private subnet (注意看 CIDR 来区分),点击 Create 按钮

 

2.2 创建 Aurora MySQL database

1. 点击 Create database 按钮
2. 默认选择 Standard create,在 Engine type 默认选择 Amazon Aurora,在 Edition 默认选择 Amazon Aurora with MySQL compatibility
3. 在 Capacity type 默认选择 Provisioned在 Version 选择最新版本 Aurora(MySQL5.7) 2.09.0在 Templates 默认选 Production
4. 在 DB cluster identifier 里面输入 database-lab1,在 Password 输入你设定的密码[注意:要记录好密码]
5. 在 DB instance size 选择 Bustable classes(includes t classes),在下拉框中选择 db.t3.small在 Availability & durability 默认选择 Create an Aurora Replica or Reader node in a different AZ (recommended for scaled availability)在 Connectivity 里面选择前面创建的 vpc1
6. 点开 Additional connectivity configuration,在 Subnet group 里面选择 2.1 创建的 lab1
7. 其他保持默认,点击 Create database 按钮
8. 等几分钟,数据库的状态 Status 会变为 Available。拷贝 database cluster writer 的 endpoint
9. 接下来修改 security group:选择 Writer instance,点击 VPC security groups 链接
10. 然后点击 Edit inbound rules 按钮
11. 在 Type 里面选 MYSQL/Aurora,source 里面输入 192.168.0.0/16,点击 Save rules 按钮。

 

3. 创建 EC2

 

3.1 创建 keypair

1. 打开 EC2 服务
2. 点击 Key Pairs,点击 Create key pair 按钮
3. 在 Name 输入 lab1,File format 根据您当前的使用的ssh软件选择:pem or ppk;点击 Create key pair 按钮后会下载一个 pem 或 ppk 文件到您的本地机器上。

 

3.2 创建 EC2 实例

1. 打开 EC2 服务
2. 点击 Instances, 点击 Launch instances 按钮
3. 点击 Amazon Linux 2 AMI (HVM), SSD Volume Type 后面的 Select 按钮
4. 选择 t3.small,点击 Next:Configure Instance Details 按钮
5. 在 Network 选择前面创建的 vpc1,subnet 选择 publicsubnet1,Auto-assign Public IP 选择 Enable,点击 Next:Add Storage 按钮
6. 点击 Next:Add Tags 按钮,Key 填入 Name,Value 填入 lab1,点击 Next:Configure Security Group
7. Security group name 输入 lab1,修改 Description,点击 Add Rule 按钮,从 Type 列表里面选择 HTTP,点击 Review and Launch 按钮。
8. 点击 Launch 按钮
9. 选择 3.1 创建的 keypair lab1,勾选 I acknowledge,点击 Launch Instances 按钮。
10. 等待几分钟后 EC2 的状态 Status 变为 Running。拷贝<Public IPv4 DNS>

 

3.3 配置 ssh 远程访问 EC2

在您的客户端电脑上执行下列命令,以下以 Mac 或 Linux 操作系统的命令行为例

cd < lab1.pem 文件所在目录>

chmod 400 lab1.pem

ssh -i lab1.pem ec2-user@<Public IPv4 DNS>

 

把<Public IPv4 DNS>换为 3.2 里面的拷贝的 DNS

按提示输入 yes

如果您使用的是 windows 操作系统,请下载安装 PuTTY参看下列链接配置 [https://docs.aws.amazon.com/quickstarts/latest/vmlaunch/step-2-connect-to-instance.html](https://docs.aws.amazon.com/quickstarts/latest/vmlaunch/step-2-connect-to-instance.html)

 

3.4 配置 EC2,安装 Apache、MySQL、PHP 并配置,配置 Aurora MySQL,配置 PHP 页面

安装 httpd、php、mysql

 

sudo su
yum update -y
yum install -y httpd php mysql php-mysqlnd
service httpd start
chkconfig httpd on
echo “<?php phpinfo(); ?>” > /var/www/html/phpinfo.php
service httpd restart

 

在您的浏览器输入 http://<Public IPv4 DNS>确认是否可以看到 apache 页面 Amazon Linux AMI Test Page

在您的浏览器输入 http://<Public IPv4 DNS>/phpinfo.php 确认是否可以看到 phpinfo

配置 Aurora MySQLmysql –user=admin –password -h [your database endpoint在 2.2 拷贝的 endpoint]如下图所示:

 

 

CREATE DATABASE lab1;
USE lab1;
CREATE TABLE table1(name varchar(50),randomnumber INT);
INSERT into table1 values(‘lab1’,1);
exit
cd /var/www/html
wget https://d0.awsstatic.com/logos/powered-by-aws-white.png
vi db.php

 

拷贝下列内容进去 db.php 文件中,注意先修改 MySQL endpoint 和密码。

 

<?php
$link=mysql_connect(“您的Aurora MySQL endpoint”,”admin”,”您的对应密码”) or die(“Error,Can’t connect mySql”);
$db_selected=mysql_select_db(“lab1”,$link);
$result=mysql_query(“update table1 set randomnumber=FLOOR(RAND()*100) where name=’lab1′”);
$result=mysql_query(“select * from table1”,$link);//执行查询操作
$info=mysql_fetch_array($result);
?>
<a href=”https://aws.amazon.com/what-is-cloud-computing”><img src=”powered-by-aws-white.png” style=”background-color:black;” alt=”Powered by AWS Cloud Computing”></a>
<table>
<tr>
<td>Name</td>
<td>randomnumber</td>
</tr>
<?php
do{
?>
<tr>
<th><?php echo $info[name];?></th>
<th><?php echo $info[randomnumber];?></th>
</tr>
<?php
}while ($info = mysql_fetch_array($result));
?>
</table>

 

在您的浏览器输入 http://<Public IPv4 DNS>/db.php 确认是否可以看到 存入 MySQL 的记录,每次刷新页面都会用随机数更新记录并读取显示在页面上,如下图示例

 

 

3.5 从 EC2 实例生成 AMI

1. 点击 Instances,选中刚刚配置好的 EC2 实例,从 Actions 下拉列表里选择 Image and templates,再选择 Create image
2. 在 Image name 和 Description 里面输入 lab1,点击 Create image 按钮

 

3.6 从 EC2 实例生成 Launch Template

1. 点击 Instances,选中刚刚配置好的 EC2 实例,从 Actions 下拉列表里选择 Image and templates,再选择 Create template from instance
2. 在 Launch template name 和 Description 输入 lab1,选中 Auto Scaling guidance
3. 在 AMI 搜索 lab1,然后选择前面创建好的 AMI:lab1,点击弹出页面的 confirm changes 按钮。
4. 在 Security groups 下拉列表里面选择 vpc:lab1
5. 在 Network interface1 点击 Remove,删除,点开 Advanced details,在 userdata 里面输入下列内容:

 

#!/bin/bash
service httpd start
chkconfig httpd on

 

6. 然后点击 Create launch template 按钮
7. Behavior 如果报错,请从下拉列表中选择 Don’t include in launch template

 

4. 创建 Target group、AutoScaling Group、ALB

 

4.1 创建 Target Group

1. 点击 Target Groups,点击 Create target group 按钮
2. Target group name 输入 lab1,VPC 选择 vpc1,点击 next 按钮
3. 点击 Create target group 按钮

 

4.2 创建 AutoScaling Group

1. 点击 Auto Scaling Group 链接,点击 Create an Auto Scaling group 按钮
2. 在 name 输入 lab1,在 Launch template 列表里选择 3.6 创建的 launch template:lab1,点击 next 按钮
3. VPC 选择 vpc1,Subnet 选择 publicsubnet1 和 publicsubnet2,点击 next 按钮
4. 勾选 Enable load balancing,target group 选择 4.1 创建的 target group:lab1,勾选 ELB,点击 next 按钮
5. 修改 Group size,选择 Target tracking scaling policy,点击 skip to review 按钮;然后点击 Create Auto Scaling Group 按钮

 

4.3 创建 ALB

1. 点击 Load Balancers,点击 Create Load Balancer 按钮
2. 点击 Application Load Balancer 下面的 Create 按钮
3. 输入 name:lab1,VPC 选择 vpc1,分别选择两个子网 publicsubnet1和publicsubnet2,其他保持默认,点击 Next 按钮
4. 忽略警告,选择之前创建的安全组 security group:lab1,点击 next 按钮
5. 选择 Existing target group,选择 lab1,点击 next 按钮
6. 会看到已有 Auto Scaling Group 里面配置的 2 台 EC2 实例,点击 next 按钮,然后点击下一页的 Create 按钮。
7. 然后等待这个 Application Load Balancer 状态 state 变为 active;拷贝它的 DNS name

 

5. 验证测试

在您的浏览器里面粘贴 4.3 拷贝的 Application Load Balancer 的 DNS namehttp://<Application Load Balancer 的 DNS name> 查看 apache 页面http://<Application Load Balancer 的 DNS name>/db.php 查看动态更新数据库的页面。