目标:通过对常规的WEB层应用-apache迁移实验,使学员掌握WEB层应用如何使用Graviton创建和部署,以及如何迁移.
小汪公司是一个互联网企业,应用服务全球,前端大规模使用了CDN服务,并把Apache作为前端接入服务,原系统基于X86架构部署,现在出于将本增效的目的,需要把系统迁移到AWS Graviton架构的EC2主机上,并且希望在2小时停机窗口内完成新老系统的割接。
实验流程:
1.创建作为目标实例的Graviton EC2,安装ARM架构下的 Apache server;
2.更改Apache配置文件,路由至 Graviton Java 的地址
3.客户端进行接入层服务响应测试;
4.CloudFront更改源站至Apache On Graviton,执行切换;
5.整体测试,验证割接。
创建EC2,在左侧的控制台导航菜单选择EC2 DashboardEC2控制面板
验证控制台右上角的Region(区域)是否与本次实验的Region值一致,然后从列表中选择 Launch instance(启动实例)下拉菜单,启动实例
选择启动实例
注意:架构处的下拉框请选中 64位(ARM ),如下图

启动实例的参数如下:
创建EC2如下:
Graviton_Target-WebC6g.large Amazon Linux 2 AMI(HVM)64位(***ARM*** )ee-default-keypair.pemGraviton-GameDay-VPCStack-xxxxxxxxPublic subnet 1Graviton-GameDay-SecurityGroupStack-xxxxxxx-WebServerSecurityGroup1
最后点击启动实例按钮在,请在summary(汇总)核对下参数信息。 启动完毕EC2后,可以悬着 View all instance(查看所有实例),等待实例的状态显示为Running(正在运行),这表示实例已完成启动。

3.1使用登录SSM的远程连接管理器或者Putty连接到堡垒机
登录到堡垒机后再登录到Apache服务器,请您记录下源java的Private IP DNS name如下图所示

在堡垒机上使用ssh命令登录后端机器,输入
ssh -i ee-default-keypair.pem ec2-user@<your-redis-Private-name>
其中 ee-default-keypair.pem替换为您秘钥的文件名,<your-web-Private-name>替换为您在控制塔查看的redis的Private IP DNS name,输入yes以便确定连接
3.2 部署ARM架构下的httpd AWS extras了流行的软件包,在任何平台安装常用的软件包非常简单,现在我们在Web目标机上使用安装命令,输入
sudo yum -y update -y
sudo yum install -y httpd
得到如下返回
............
Verifying : httpd-filesystem-2.4.54-1.amzn2.noarch 7/9
Verifying : apr-1.7.0-9.amzn2.aarch64 8/9
Verifying : httpd-tools-2.4.54-1.amzn2.aarch64 9/9
Installed:
httpd.aarch64 0:2.4.54-1.amzn2
Dependency Installed:
apr.aarch64 0:1.7.0-9.amzn2 apr-util.aarch64 0:1.6.1-5.amzn2.0.2 apr-util-bdb.aarch64 0:1.6.1-5.amzn2.0.2 generic-logos-httpd.noarch 0:18.0.0-4.amzn2
httpd-filesystem.noarch 0:2.4.54-1.amzn2 httpd-tools.aarch64 0:2.4.54-1.amzn2 mailcap.noarch 0:2.1.41-2.amzn2 mod_http2.aarch64 0:1.15.19-1.amzn2.0.1
Complete!
3.3 由于我们更新了后台Java-Tomcat的地址,我们需要更新Hpptd的配置文件
删除默认的httpd.conf文件,并使用vim编辑器编辑配置文件,请复制执行以下命令(以下vim内的配置信息由原x86环境httpd.conf复制而来)
sudo rm -rf /etc/httpd/conf/httpd.conf
sudo vim /etc/httpd/conf/httpd.conf
#web
ServerRoot "/etc/httpd"
Listen 80
<VirtualHost *:80>
ProxyPass / http://$APPEndpoint:8080/
ProxyPassReverse / http://$APPEndpoint:8080/
</VirtualHost>
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
<IfModule mod_http2.c>
Protocols h2 h2c http/1.1
</IfModule>
IncludeOptional conf.d/*.conf
请将$APPEndpoint替换为您在应用层迁移中完成的Graviton_Target-App的Private DNS,如图
然后按ESC 并且输入:wq 保存退出
启动Web服务并进行本地验证
现在我们启动httpd服务,并为apache赋予权限,请执行以下命令
sudo su
systemctl start httpd.service
systemctl enable httpd.service
systemctl status httpd.service
usermod -a -G apache ec2-user
chown -R ec2-user:apache /var/www
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} \;
find /var/www -type f -exec chmod 0664 {} \;
在您的WEB服务器上Curl一下80端口,请输入以下命令
curl 127.0.0.1:80/sample-webapp/
您将得到如下返回,是我们Contact Management应用系统的前端代码
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
crossorigin="anonymous">
</head>
<body>
<div class="container col-md-5">
<div class="card">
<div class="card-body">
<form action="j_security_check" method="post">
<caption>
<h2>
Wellcome to Graviton Game Day
</h2>
<h2>
Login to Contact Management
.......
.......
name="j_password">
</div>
</div>
</div>
</body>
在您的自己的笔记本或任意客户端上Curl一下Graviton Web服务器Public IPv4 DNS的80端口,请输入以下命令,您将依然得到同上的返回,是我们Contact Management应用系统的前端代码
curl ec2-18-213-151-194.compute-1.amazonaws.com:80/sample-webapp/
返回
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<link rel="stylesheet"
.............
<caption>
<h2>
Wellcome to Graviton Game Day
</h2>
<h2>
Login to Contact Management
....................................................
当然,您也可以使用浏览器访问迁移完成后的web层服务地址,例如
http://ec2-18-213-151-194.compute-1.amazonaws.com:80/sample-webapp/
请将ec2-18-213-151-194.compute-1.amazonaws.com替换为您自己的Graviton Web服务器Public IPv4 DNS

至此,您完成了接入层的迁移,并且验证了接入层验证与迁移后应用层的调用测试
而如果您的CURL命令得到404等其他报错,说明您并没有正确完成实验。可推断您的任一迁移环节出现笔误或缺失,您可以检查配置文件,查看httpd 日志进行排错
登录到您的AWS控制台,导航至Cloudfront

点击Distributions,或 分布,然后点击Origins,或 源

现在gravitongameday这个部分,他现在是指向原Web服务的配置,我们要替换迁移后为Graviton Web的服务地址
请先前往查看记录Graviton Web的服务的公网地址

回到Cloudfront页面,点击Origins,或 源的编辑按钮,将新的地址复制过来,点击确认保存

现在您在公网服务域名不变的情况下完成了后端的切换,请暂停原有web服务主机,到浏览器输入cloudfront服务域名进行验证

以上,恭喜您,您完成小汪公司apache/java/redis/mysql全套架构从x86到Graviton迁移和平滑割接的伟大壮举!