跳到正文Lab学后总结 · Jimmy Huang's BlogLab学后总结
本页目录· 80 条
1. 一句话总结这个 Lab
这个 Lab 要教会你:如何在 AWS 上创建一台可远程登录的云服务器 EC2,并用 CloudWatch 监控它;同时学习如何用 S3 存储文件、控制公开访问,以及用 Versioning 保存文件历史版本。
更简单地说:
EC2 负责“跑东西”,S3 负责“放文件”,CloudWatch 负责“看状态并报警”,Security Group / Key Pair / S3 权限负责“控制谁能访问”。
2. 这个 Lab 实际做了什么
按照实验主线,这个 Lab 大致做了两大部分:计算服务 EC2 和 存储服务 S3。
2.1 第一部分:进入 AWS Academy 和 AWS Console
你首先通过 AWS Academy Dashboard 启动实验环境,然后进入 AWS Management Console。
可以理解为:
AWS Academy Dashboard:学校给你的实验入口,负责启动临时 AWS 环境。
AWS Console:真正操作 AWS 服务的控制台,例如创建 EC2、S3、CloudWatch Alarm 等。
Lab Session / Sandbox:一个临时云环境,通常有时间和额度限制,所以最后要清理资源。
这一部分的目的不是创建服务,而是让你确认:
你进入了正确的 AWS 账户环境;
你正在实验允许的区域和权限范围内操作;
后续创建的资源都属于这个 Lab 环境。
2.2 第二部分:创建 EC2 Instance,也就是云服务器
你在 EC2 服务里创建了一台虚拟机。创建 EC2 时一般会配置这些东西:
| Instance Type | 决定 CPU、内存等规格 | 像“电脑配置” |
| Key Pair | 用来 SSH 登录 EC2 | 像“登录钥匙” |
| Security Group | 控制哪些网络流量能进来 | 像“门卫/防火墙” |
| EBS Root Volume | EC2 的系统硬盘 | 像“电脑硬盘” |
| Termination Protection | 防止误删 EC2 | 像“删除保护开关” |
页面可读取内容中提到使用的是 Amazon Linux 2023 AMI。这意味着你启动的是一台 Linux 云服务器,不是 Windows 服务器。
2.3 第三部分:用 SSH 连接 EC2
创建 EC2 后,你会拿到一个 Public IPv4 address 或 Public DNS,然后在本地电脑上用 SSH 连接它。
SSH 是远程登录 Linux 服务器的方法;
Key Pair 证明“你是有钥匙的人”;
Security Group 决定“22 端口是否允许你进来”;
如果 Key Pair 对了,但 Security Group 没开 22 端口,你还是连不上;
如果 Security Group 开了 22 端口,但 private key 不对,你也连不上。
所以连接 EC2 不是只靠一个东西,而是至少要同时满足:
EC2 正在运行;
EC2 有公网 IP 或可达的网络路径;
Security Group 允许 SSH 入口;
你本地 private key 正确;
SSH 命令里的用户名、IP、key 文件权限正确。
2.4 第四部分:查看 EC2 状态和监控
Instance State:例如 running、stopped;
Status Checks:AWS 检查这台实例和底层基础设施是否正常;
Monitoring:例如 CPU 使用率、网络流量、磁盘相关指标等。
云服务器不是创建出来就不管了,真实项目里你必须知道它是否健康、是否过载、是否需要处理故障。
2.5 第五部分:用 CloudWatch 创建 CPU Alarm
Lab 中还会用 CloudWatch 给 EC2 的 CPU 使用率创建 Alarm。
2.6 第六部分:制造高 CPU 使用率来触发 Alarm
Lab 主线里提到会制造高 CPU 使用率,让 CloudWatch Alarm 被触发。
这一步不是为了“故意搞坏服务器”,而是为了让你看到:
EC2 CPU 指标会上升;
CloudWatch 能监控到变化;
Alarm 会从 OK 变成 ALARM;
通知机制可以被触发。
程序进入死循环;
请求量突然变大;
后端服务处理不过来;
机器规格太小;
需要扩容或优化代码。
2.7 第七部分:创建 S3 Bucket 并上传文件
Lab 的第二大块是 S3。你会创建一个 Bucket,然后上传文件。
但是要注意:S3 不是传统意义上的“文件夹硬盘”,它是 object storage。它适合存储文件对象,不适合像本地磁盘一样随便修改文件的一小部分。
2.8 第八部分:理解为什么 Object URL 默认不能访问
你上传文件后,可能会看到一个 Object URL。
2.9 第九部分:修改权限让文件可以公开访问
Lab 中会让你接触 S3 ACL、Bucket Public Access 相关概念。
S3 默认更偏向私有和安全。想让文件公开,不是只点一个 URL,而是要确保 public access 没有被整体阻止,并且 object / bucket 权限允许公开读取。
Block Public Access;
Object ACL;
Bucket Policy;
Public read;
Object Ownership。
具体实验用了哪一种,需要以你实际 Lab 步骤为准。页面可读取内容明确提到了 S3 ACL 和“修改权限让文件公开”,但没有完整展开每个权限设置细节。
2.10 第十部分:开启 S3 Bucket Versioning
Lab 最后还会开启 S3 Versioning,并上传同名文件的不同版本。
开启 Versioning 后,同一个 object key 可以保留多个历史版本,而不是简单覆盖旧文件。
你看到的可能还是同一个文件名,但 S3 内部会保留版本 ID。
防止误覆盖;
可以恢复旧版本;
可以查看历史版本;
对重要文件更安全。
2.11 最后:删除资源,避免继续占用额度
这一步非常重要,因为云平台按资源使用计费。哪怕你没有主动使用,只要资源还存在,可能就会继续占用额度。
3. 每个核心组件有什么用
3.1 AWS Academy Dashboard
你可能无法使用学校配置好的 AWS 环境,或者进入错误账户。
它是进入 AWS Console 的前置入口,不是具体云服务本身。
3.2 AWS Management Console
你通过它创建 EC2、S3、CloudWatch Alarm 等资源。
你就需要用 AWS CLI、SDK 或 IaC 工具来操作,对初学者更难。
Console 是管理入口,EC2、S3、CloudWatch 才是被管理的服务。
3.3 Region
AWS 的地理区域,例如 Sydney、Singapore、US East 等。
EC2、S3、CloudWatch 等资源通常都和 Region 有关。做 Lab 时一定要看清楚当前 Region。
3.4 AMI
Amazon Machine Image,EC2 的系统模板。
决定 EC2 启动后是什么操作系统和基础环境。页面可读取内容提到 Amazon Linux 2023 AMI。
EC2 不知道要安装什么系统,无法启动成一台可用服务器。
AMI 用来创建 EC2 Instance。可以把它理解成“系统安装镜像”。
3.5 EC2 Instance
Elastic Compute Cloud,AWS 上的虚拟机。
作为一台云服务器,让你可以 SSH 连接、运行命令、观察 CPU 指标。
3.6 Instance Type
EC2 的硬件规格,例如 CPU、内存、网络能力等。
Instance Type 是 EC2 的资源配置,和 AMI 不一样。AMI 决定系统,Instance Type 决定硬件规格。
3.7 EBS Root Volume
EC2 负责计算,EBS 负责块存储。它们通常绑定在一起使用。
3.8 Key Pair
一对密钥:public key 和 private key。
private key 不能泄露,也不要随便上传到 GitHub。
3.9 SSH
Secure Shell,一种远程登录 Linux 服务器的协议。
3.10 Security Group
如果没有任何允许规则,外部流量进不来;如果规则太宽,服务器会暴露风险。
3.11 Termination Protection
它只防止 terminate,不等于备份,也不等于防止 stop。
3.12 Status Checks
Status Checks 是 EC2 的健康检查,Monitoring 是指标趋势,两者不是一回事。
3.13 CloudWatch
收集 EC2 的 CPU 使用率等指标,并创建 Alarm。
3.14 CloudWatch Alarm
当 CPU 使用率超过设定阈值时,状态从 OK 变成 ALARM。
CPU 再高也没人提醒你,除非你自己一直盯着图表。
Alarm 依赖 CloudWatch 指标,也可以触发 SNS 发送通知。
3.15 SNS
Simple Notification Service,AWS 的通知服务。
接收 CloudWatch Alarm 的触发结果,并把通知发给订阅者,例如邮件。
Alarm 可能只在控制台里变状态,不会主动通知你。
3.16 S3 Bucket
Bucket 是 Object 的容器,权限、Versioning 等很多设置也是在 Bucket 层级配置的。
3.17 S3 Object
Object 存在于 Bucket 中,每个 Object 有 key、URL、metadata、permission、version 等属性。
3.18 Object URL
Object URL 只是地址,不等于权限。能不能访问还取决于 Block Public Access、ACL、Bucket Policy 等。
3.19 S3 ACL
Access Control List,S3 的一种访问权限控制方式。
用于理解如何控制 bucket 或 object 的访问权限。
你仍然可以用其他机制控制权限,例如 Bucket Policy 或 IAM Policy;但这个 Lab 会让你接触 ACL 概念。
ACL 是 S3 权限控制的一部分,但如果 Block Public Access 开着,公开 ACL 也可能被拦截。
3.20 Block Public Access
解释为什么 object URL 默认可能打不开。
误公开 bucket 或 object 的风险会更高。
它会覆盖或限制 ACL / Bucket Policy 带来的公开访问效果。简单说,它是更高层的安全保护。
3.21 Bucket Versioning
让你上传同名文件时不会简单覆盖旧版本,而是保留历史版本。
Versioning 是 bucket 级功能,开启后影响该 bucket 后续对象的版本管理。
4. 用初学者类比解释
可以把整个 Lab 想象成一个“云端小区 + 仓库系统”。
4.1 AWS Console = 小区物业管理办公室
你要建房子、开仓库、设置门禁、查看监控,都要去物业办公室操作。
创建 EC2;
创建 S3;
设置 Security Group;
查看 CloudWatch;
配置 Alarm。
4.2 EC2 = 小区里的一间工作室 / 云电脑
安装软件;
运行命令;
部署后端;
测试 CPU 压力。
4.3 AMI = 房间装修模板 / 系统安装盘
Amazon Linux 2023 AMI = 装好 Amazon Linux 的房间;
Ubuntu AMI = 装好 Ubuntu 的房间;
Windows AMI = 装好 Windows 的房间。
4.4 Instance Type = 房间大小和配置
4.5 EBS = 房间里的硬盘柜
你的系统文件、配置文件、部分数据都存在 EBS 里。
4.6 Security Group = 房间门口的保安
Security Group 不管你是谁,它先看:
允许 22 端口:可以 SSH;
允许 80 端口:可以访问 HTTP 网站;
允许 443 端口:可以访问 HTTPS 网站。
4.7 Key Pair = 你的钥匙
Public key 像门锁,装在 EC2 上;
Private key 像钥匙,放在你本地电脑;
SSH 时用钥匙开锁。
4.8 CloudWatch = 小区监控室
这间房 CPU 忙不忙;
网络有没有流量;
系统有没有异常;
指标有没有超过阈值。
4.9 CloudWatch Alarm = 监控室里的报警规则
不是所有监控都会报警。你必须先设置 Alarm,它才知道什么时候提醒你。
4.10 SNS = 小区广播 / 邮件通知系统
CloudWatch 发现 CPU 过高;
Alarm 触发;
SNS 把消息发给订阅者;
你收到邮件提醒。
CloudWatch 负责“发现问题”,SNS 负责“告诉别人”。
4.11 S3 Bucket = 小区公共仓库
它不是你 EC2 房间里的硬盘,而是独立的云端仓库。
4.12 S3 Object = 仓库里的一个包裹
图片;
文本文件;
PDF;
HTML;
日志文件;
备份文件。
4.13 Object URL = 包裹地址
Object URL 只是告诉你这个包裹在仓库的哪个位置。
4.14 S3 Public Access = 仓库是否允许外人取货
如果你想让别人通过浏览器访问文件,就要允许公开读取。
但是这很危险,因为一旦配置错误,可能把不该公开的文件暴露出去。
4.15 Versioning = 仓库给每次改动都留历史记录
5. 重点区分容易混淆的概念
5.1 EC2 和 AMI 的区别
5.2 EC2 和 EBS 的区别
5.3 EBS 和 S3 的区别
EBS 像硬盘,S3 像对象仓库;不要把 S3 当成 EC2 的本地硬盘。
5.4 Security Group 和 Key Pair 的区别
Security Group 管“门开没开”,Key Pair 管“你有没有钥匙”。
5.5 SSH 和 Security Group 的关系
SSH 是一种登录方式;Security Group 是网络防火墙。
SSH 命令正确;
private key 正确;
EC2 地址正确;
Security Group 允许 TCP 22;
EC2 正在运行。
SSH 是你走的通道,Security Group 决定这个通道有没有被放行。
5.6 CloudWatch 和 SNS 的区别
CloudWatch 发现问题,SNS 负责通知人。
5.7 Status Checks 和 Monitoring 的区别
Status Checks 看“活着没”,Monitoring 看“忙不忙”。
5.8 S3 Bucket 和 Object 的区别
Bucket 是容器,Object 是里面的文件。
5.9 Object URL 和 Public Permission 的区别
5.10 Block Public Access 和 ACL 的区别
如果 Block Public Access 还在拦截,ACL 允许公开也可能没有效果。
5.11 Versioning 和普通覆盖的区别
Versioning 让“覆盖”变成“新增一个历史版本”。
5.12 Stop 和 Terminate 的区别
5.13 哪个是入口?哪个是数据库?哪个是权限控制?哪个是网络控制?
6. 这个 Lab 有什么实际用途
这个 Lab 很基础,但它对应真实项目里非常常见的云架构能力。
6.1 后端开发:把程序部署到云服务器
你以后写 FastAPI、Node.js、Spring Boot、Django 后端时,可以把它部署在 EC2 上。
这个 Lab 的 EC2 + SSH + Security Group 就是后端部署的基础。
6.2 DevOps:理解服务器创建、登录和排错
服务器启动失败;
SSH 连不上;
防火墙端口没开;
CPU 使用率过高;
实例状态检查失败;
资源忘记删除导致费用增加。
6.3 云安全:理解“默认不公开”的重要性
6.4 监控告警:不要等用户告诉你系统坏了
CPU 告警;
内存告警;
磁盘告警;
错误率告警;
延迟告警;
通知渠道。
这个 Lab 的 CloudWatch + Alarm + SNS 是监控体系的入门版。
6.5 存储设计:区分服务器硬盘和对象存储
EC2:跑服务;
EBS:给 EC2 当硬盘;
S3:放文件对象;
RDS:放结构化数据库数据。
这个 Lab 主要覆盖 EC2、EBS、S3,没有创建 RDS。
6.6 版本保护:减少误覆盖风险
S3 Versioning 在真实项目里很有用,例如:
用户上传文件后保留历史版本;
配置文件误覆盖后恢复;
静态网站文件回滚;
备份数据保留多个版本。
但是也要配合生命周期规则管理旧版本,否则旧版本越积越多,会增加存储成本。
7. 生动形象示意图
下面是一张适合初学者理解的 Mermaid 架构图。
如果你的 Markdown 编辑器支持 Mermaid,可以直接渲染成图;如果不支持,也可以按文字关系理解。
最后复习:你需要真正记住的 10 句话
EC2 是云服务器,用来运行程序。
AMI 是创建 EC2 的系统模板,不是服务器本身。
EBS 是 EC2 的硬盘,S3 是独立的对象存储。
Security Group 控制网络流量,Key Pair 控制 SSH 身份认证。
SSH 连不上时,要同时检查 IP、用户名、private key、key 权限、Security Group、EC2 状态。
CloudWatch 负责监控指标,Alarm 负责判断是否触发告警。
SNS 负责把告警消息通知给人。
S3 Bucket 是仓库,Object 是仓库里的文件。
Object URL 只是地址,不代表任何人都能访问。
S3 Versioning 可以保留同名文件的历史版本,但也会增加存储占用。
自测题
Q1:为什么我有 EC2 private key,但还是 SSH 不进去?
Q2:为什么我复制了 S3 Object URL,但浏览器打不开?
Block Public Access;
Object ACL;
Bucket Policy;
IAM 权限;
Object Ownership 设置。
Q3:CloudWatch 和 SNS 谁负责发邮件?
CloudWatch Alarm 负责判断指标是否异常,SNS 负责把通知发送出去。
Q4:S3 Versioning 开启后,同名文件会怎样?
你看到的文件名可能一样,但每个版本有不同的 version ID。
Q5:这个 Lab 和真实项目最接近的地方是什么?
你的电脑
|
| 使用 private key
| 通过 SSH 访问 22 端口
v
Security Group 检查是否允许
|
v
EC2 Instance
EC2 产生 CPUUtilization 指标
|
v
CloudWatch 收集和展示指标
|
v
Alarm 判断 CPU 是否超过阈值
|
v
如果超过阈值,进入 ALARM 状态
|
v
通过 SNS 等方式通知用户
report.txt v1
report.txt v2
report.txt v3
CloudWatch Alarm
-> SNS Topic
-> Email Subscription
-> 你的邮箱
report.txt v1
report.txt v2
report.txt v3
创建 EC2
-> SSH 登录
-> 安装依赖
-> 上传代码
-> 启动后端服务
-> 配置 Security Group 开放端口
后端程序运行在 EC2 / ECS / Lambda
图片、文件、日志、备份放在 S3
数据库放在 RDS / DynamoDB
监控放在 CloudWatch
flowchart TB
User["你 / 本地电脑<br/>SSH Client"] -->|"使用 Private Key<br/>SSH :22"| SG["Security Group<br/>EC2 门口防火墙"]
SG -->|"允许 22 端口"| EC2["EC2 Instance<br/>Amazon Linux 云电脑"]
AMI["AMI<br/>系统安装模板"] -->|"启动生成"| EC2
Type["Instance Type<br/>CPU / 内存规格"] -->|"决定性能"| EC2
EC2 -->|"系统盘"| EBS["EBS Root Volume<br/>EC2 的硬盘"]
EC2 -->|"CPUUtilization 指标"| CW["CloudWatch<br/>监控室"]
CW -->|"超过阈值<br/>进入 ALARM"| Alarm["CloudWatch Alarm<br/>告警规则"]
Alarm -->|"发送通知"| SNS["SNS<br/>邮件 / 消息通知"]
Console["AWS Console<br/>管理入口"] -->|"创建 / 配置"| EC2
Console -->|"创建 / 配置"| S3["S3 Bucket<br/>云端文件仓库"]
Console -->|"创建 / 配置"| CW
S3 -->|"存放"| Obj["S3 Object<br/>上传的文件"]
Obj -->|"开启后保留历史"| Ver["Bucket Versioning<br/>同名文件多版本"]
Public["公网用户 / Browser"] -.->|"❌ 默认不能直接访问<br/>只有 URL 不等于有权限"| Obj
Public -->|"✅ 只有关闭相应阻止<br/>并授予 public read 后"| Obj
BadUser["陌生人"] -.->|"❌ Security Group<br/>未允许的端口会被挡住"| EC2
Remember["你要记住的核心区别<br/>EC2 = 跑程序的云电脑<br/>EBS = EC2 的硬盘<br/>S3 = 放文件的对象仓库<br/>Security Group = 网络门卫<br/>Key Pair = 登录钥匙<br/>CloudWatch = 监控表<br/>SNS = 通知喇叭"]
CloudWatch 看数据
Alarm 判断是否异常
SNS 发通知
云服务器运行服务
-> 网络规则控制访问
-> 监控系统观察负载
-> 告警系统通知异常
-> 文件对象放入云存储
-> 权限系统控制谁能访问文件