什么是 AWS EC2

Amazon Elastic Compute Cloud (Amazon EC2) 直译过来是一种可伸缩的计算云,提供了广泛的实例类型选择,这些实例类型经过优化以适应不同的用例,实例类型包括CPU、内存、存储和网络容量的不同组合,使我们能够灵活地为应用程序选择适当的资源组合。每个实例类型包括一个或多个实例大小,允许您将资源扩展到目标工作负载的需求。这里是 EC2 实例类型一览表,截部分图在这里展示

【AWS征文】使用 AWS EC2 安装 Apache 服务

说简单一点: EC2 就是一个按照你需求配置的虚拟机,如果你需要在虚拟机上做 CPU 密集型的任务,那就选高 CPU 低内存的实例,如果是 I/O 密集型的,那就选择低 CPU 高内存的实例,花最少的钱满足提供最贴合你需要的服务

在 EC2 上安装 Apache 服务

有了这个基本的了解过后,我们就可以在 EC2 上安装 Apache 服务来进一步了解 EC2

前置准备

由于自己开通了 AWS free tier(绑定信用卡),可以免费玩 12 个月,如果你也这样做,建议设置好账单阈值,当使用了产生费用的服务时,会给你提醒,以防产生过多开销

新建 EC2

点击下图 Launch Instance 按钮新建 EC2 实例

【AWS征文】使用 AWS EC2 安装 Apache 服务

新建 EC2 实例主要按照下图上方的七步完成,首先是选择 AMI (Amazon Machine Images), 其实就像选择操作系统,标记为 Free tier eligible 的是我们可以免费使用的,下图用红色框线标记的则是 Amazon 封装好的 AMI,里面会包含 ECS agent 以及 Docker 的配置(本次 demo 不会用到这些服务),其他 AMI 可能需要手动安装,所以没有特殊要求也建议选择 Amazon AMI

【AWS征文】使用 AWS EC2 安装 Apache 服务

点击右侧的 Select 按钮进入下一步

选择系统配置,Free tier eligible 只有这么一种类型(1个vCPU,1GB Memory)

【AWS征文】使用 AWS EC2 安装 Apache 服务

继续点击 Confiture Instance Details,进行详细内容配置,下图中做了一些字段的说明,演示的情况下多以默认设置为主

【AWS征文】使用 AWS EC2 安装 Apache 服务

如果没有额外的 non-required 的配置,可以继续点击 Add Storage 进行存储方面的配置,默认会有 8GB 的存储空间,足够我们安装 Apache 服务,所以这里不会额外添加其他 Volume

【AWS征文】使用 AWS EC2 安装 Apache 服务

继续下一步 Add Tags

【AWS征文】使用 AWS EC2 安装 Apache 服务

下一步 Configure Security Group, Security Group 其实就好比防火墙,分为 Inbound Rule(默认deny all) 和 Outbound Rule(默认 allow all),下图配置了两种(SSH/HTTP)方式反问 EC2 实例,前者用于后续安装 Apache 服务,后者用于浏览器验证服务,这里的 source 都是 0.0.0.0/0 (指任何访问来源,这是很宽松的规则,实际业务中也是不允许这样的)

【AWS征文】使用 AWS EC2 安装 Apache 服务

到这里就可以点击 Review and Launch 来发布 EC2 实例了

【AWS征文】使用 AWS EC2 安装 Apache 服务

检查配置内容,如果没有问题,最终点击 Launch,在最终 launch 之前,还需要生成 key pair(将其下载到本地),用于 SSH 访问,如果已经生成过,也可以选择用已有的

【AWS征文】使用 AWS EC2 安装 Apache 服务

最终 Launch Instances,就得到了一个处在 running 状态的 EC2 instance

【AWS征文】使用 AWS EC2 安装 Apache 服务

从上图中可以看出,我们也被分配一个 Public IP 54.145.44.9

如果我们不使用 Elastic IP ,我们每次 Launch 一个 EC2 服务都会得到一个新的 Public IP,所以你的应该和我的不一样

接下来,我们就可以用刚刚的 Key Pair 连接 EC2 来安装 Apache 服务

连接 EC2

点击上图 Connect 按钮, 有三种连接方式:

【AWS征文】使用 AWS EC2 安装 Apache 服务

第一种连接方式就像你创建 github repo 一样给出了你完整的操作步骤。默认情况下,如果你直接使用下载下来的 Key Pair 来连接 EC2, 会报错说「文件权限太大」。所以要通过 chmod 400 来给定合理的文件权限, 接下来就在 Mac 下做一下连接 EC2 的演示

【AWS征文】使用 AWS EC2 安装 Apache 服务

其中 ec2-user 是 Amazon Linux 2 AMI 的默认用户 (连接的前提必须是在 Security Group 的 Inbound Rule 支持 SSH 方式连接配置)

如果你身边没有命令行工具或者 Putty,也可以直接使用第三种通过浏览器连接的方式:

【AWS征文】使用 AWS EC2 安装 Apache 服务

点击 Connect,同样会进入 EC2

【AWS征文】使用 AWS EC2 安装 Apache 服务

从上图可以看出,有两个 IP,一个 Public IP,一个 Private IP,如果通过 SSH 连接,注意使用前者

第二种连接方式由于默认情况没有 IAM 配置,暂时没办法通过该种方式连接:

【AWS征文】使用 AWS EC2 安装 Apache 服务

到这里,我们就可以进入 EC2 来安装 Apache 服务了

安装 Apache 服务

切换为超级管理员身份

sudo su

先做系统更新

yum update -y

【AWS征文】使用 AWS EC2 安装 Apache 服务

安装 httpd

yum install -y httpd.x86_64

【AWS征文】使用 AWS EC2 安装 Apache 服务

启动 httpd 服务

systemctl start httpd.service   

Enable httpd 服务

systemctl enable httpd.service

【AWS征文】使用 AWS EC2 安装 Apache 服务

到这里 Apache 服务就已经安装好了

测试 Apache 服务

直接在命令行中通过 curl 命名进行测试

curl localhost:80

从下图可以看出,Apache 服务已经安装成功

【AWS征文】使用 AWS EC2 安装 Apache 服务

这么看着不是特别友好,所以通过浏览器再次访问(通过 Public IP),就可以友好的看到 Apache 服务的测试页面了

【AWS征文】使用 AWS EC2 安装 Apache 服务

按照测试页面说明,更改一下测试页面内容

echo "Hello AWS from $(hostname -f)" > /var/www/html/index.html

刷新浏览器页面

【AWS征文】使用 AWS EC2 安装 Apache 服务

到这完成的 Apache 服务就已经安装完毕了

使用 EC2 User Data

如果在 EC2 instance 建成后安装 1 个软件还好,如果要安装多个软件,并且要在多个 EC2 instance 上运行,上面这种安装方式显然很不友好,AWS EC2 支持使用 User Data 来解决我们上述痛点

其实就是在 EC2 instance 第一次启动的时候需要执行的 shell 脚本

我们可以将上述安装 Apache 服务的所有步骤编写成一个 shell script

#!/bin/bash

sudo su

yum update -y
systemctl start httpd.service   
systemctl enable httpd.service
echo "Hello AWS from $(hostname -f)" > /var/www/html/index.html

有了这个脚本,我们就可以在 EC2 instance 的 Configure Instance 步骤时的高级选项中,就可以添加User Data 脚本内容

【AWS征文】使用 AWS EC2 安装 Apache 服务

后续步骤和上面一样,这里不再重复了,方便了许多

使用 EC2 AMI

如果创建 EC2 instance,都需要输入脚本,万一哪次拷贝出现偏差,同样会带来一些问题和不变,所以 AWS 同样支持将 EC2 打包成 image 的功能解决这个痛点(熟悉 Docker 的朋友应该秒懂创建 Image 的作用)如下图

【AWS征文】使用 AWS EC2 安装 Apache 服务

输入相关的信息

【AWS征文】使用 AWS EC2 安装 Apache 服务

一个 AMI 就这样的建成了

【AWS征文】使用 AWS EC2 安装 Apache 服务

自己创建的 AMI 可以通过点击左侧菜单 AMIs 来查看

【AWS征文】使用 AWS EC2 安装 Apache 服务

后续在 Create Instance 的时候就可以选择从你自己的 AMI 中创建,到这里,关于 EC2 种安装 Apache 服务就介绍完毕了

总结

相信通过这篇文章,你对 EC2 有了一个基本的概念,通过安装 Apache 服务,以及使用 User Data ,再到最后使用 AMI,也逐步丰富你对 EC2 相应功能的理解,以上的这些功能,也只是 EC2 的冰山一角,实际他可以结合 EC2 Template做 AWS Batch Job 工作,以及多个 instance 通过 ASG 来管理。以后陆续展开说明

最后

了解过 EC2 基本功能后,也要及时 stop 或 terminate EC2 instance,以防长时间处在 running 状态带来开销

个人感受

EC2 是一个非常成熟的服务,有多种 instance 类型应对各种需求,同时水平扩展和垂直扩展策略也可以从容应对各种突增请求。

在使用云服务之前,要考虑基础设施,网络安全,负载均衡,健康检查以及监控等,以上这些设置都要通过各种组件组合在一起,反复调试才能得到一种相对较好的平衡。而 AWS EC2 借助其他服务 VPC, ALB,以及 CloudWatch 等可以完美的将传统搭建过程融合在一起,大大降低了因为系统集成问题导致的 bug。无需搭建任何基础设施,只需要简单的配置,在保证稳定性,高可用的同时,大大缩短了一个 APP 上线周期。目前公司所有服务都已按照相应需求发布到 EC2 实例上,单一的管理入口,让多个服务管理也更加从容