跳到正文Lab 07: Compute and Storage Services in AWS · Jimmy Huang's BlogLab 07: Compute and Storage Services in AWS
本页目录· 75 条
Lab学后总结›Overview
本周 Lab 的主题是 AWS 中的计算服务和存储服务,主要会用到两个最基础、也是最常见的 AWS 服务:
EC2(Elastic Compute Cloud):用来创建和管理云上的虚拟机。
S3(Simple Storage Service):用来存储文件对象,例如图片、文本文件、PDF 等。
过程中还会接触 EBS、Security Group、CloudWatch、SNS、S3 ACL、Bucket Versioning 这些配套概念。
前几周我们更多接触的是 Nectar / OpenStack / OCI 这类云平台。本周开始切到 AWS,重点不是一次性学完 AWS,而是先理解:
AWS 里怎么创建一台虚拟机;
怎么通过 SSH 远程连接 EC2;
怎么查看 EC2 的状态和监控指标;
怎么用 CloudWatch 给 CPU 使用率设置 Alarm;
怎么创建 S3 bucket、上传文件、控制公开访问;
怎么开启 S3 versioning 来保存同一个文件的多个版本。
Goal
完成本周 Lab 后,需要掌握:
如何进入 AWS Academy Dashboard 和 AWS Console;
如何在 AWS 中创建 EC2 instance;
如何配置 AMI、instance type、key pair、security group、storage 和 termination protection;
如何通过 SSH 连接 Amazon Linux EC2;
如何查看 EC2 的 Status Checks 和 Monitoring;
如何创建 CloudWatch CPU alarm,并用高 CPU 负载触发告警;
如何创建 S3 bucket、上传文件、测试 public/private 访问;
如何使用 S3 versioning 保存同一文件的多个版本;
如何在实验结束后删除 EC2 instance、CloudWatch alarm 和不再需要的 S3 资源。
实验前替换说明
本文档中会用到一些占位符,实际操作时需要替换成自己的值:
AWS Academy Starter Account 通常只能使用 us-east-1 region。
Amazon Linux 的默认 SSH 用户名是 ec2-user,不是 ubuntu。
S3 bucket 名称必须在全球范围唯一,不能只叫 test、lab 这种简单名字。
本周会用到 CloudWatch alarm,实验结束后要删除,避免资源一直保留。
如果你的 AWS Console 页面布局和截图不同,以页面中的关键词为准,例如 Launch instance、Security groups、CloudWatch、S3、Permissions。
Task 0: Login to the AWS Academy Dashboard
本 Task 主要是进入 AWS Academy 和 AWS Console,并确认当前账号、region 和服务入口。
Step 0.1:登录 AWS Academy
进入 AWS Academy 课程页面后,打开本周对应的 Lab 环境。
如果页面上有 Start Lab 按钮,先点击启动 Lab,然后等待状态变成可用。
Step 0.2:进入 AWS Console
在 AWS Academy 页面中点击进入 AWS Console。
Task 1: Launch an EC2 Instance
本 Task 要创建一台 AWS EC2 虚拟机。
进入 EC2 Dashboard;
创建一台 Amazon Linux 2023 EC2 instance;
选择 t3.micro instance type;
创建或选择 key pair;
配置 Security Group,允许 SSH 和 HTTP;
使用默认 root EBS volume;
开启 termination protection;
成功启动 instance;
用 SSH 连接到 instance。
Step 1.1:进入 EC2 Dashboard
进入 EC2 Dashboard 后,可以看到当前 region 下 EC2 资源概览,例如:
Running instances;
Volumes;
Security groups;
Key pairs;
Elastic IPs。
Step 1.2:点击 Launch Instance
建议给 instance 起一个容易识别的名字,例如:
Step 1.3:选择 AMI
在 Application and OS Images (Amazon Machine Image) 部分选择:
AMI 可以理解为虚拟机模板;
它决定了这台 EC2 instance 使用什么操作系统;
本 Lab 使用 Amazon Linux 2023;
Amazon Linux 的默认 SSH 用户名是 ec2-user。
Step 1.4:选择 Instance Type
Step 1.5:创建或选择 Key Pair
在 Key pair 部分,如果你已经有可用 key pair,可以直接选择已有的。
key pair 用来通过 SSH 登录 EC2;
AWS 只会在创建 key pair 时让你下载一次 private key;
private key 丢失后,通常不能再次下载;
后续 SSH 连接必须用这个 .pem 文件。
Step 1.6:设置私钥文件权限
Step 1.7:配置 Network 和 Security Group
在 Network settings 部分,使用默认 VPC 和默认 subnet 即可。
SSH 如果可以选 My IP,优先选 My IP;
如果课堂环境要求简单操作,可以临时选择 Anywhere;
HTTP 规则可以选择允许 Internet 访问;
不需要开启 HTTPS,除非老师另有要求。
Step 1.8:配置 Storage
在 Configure storage 部分保留默认 root volume。
Step 1.9:开启 Termination Protection
Step 1.10:Review 并 Launch Instance
Step 1.11:复制 Public IPv4 Address
在 EC2 instance 列表中选中你的 instance。
Step 1.12:通过 SSH 连接 EC2
Step 1.13:查看 Connect 选项
在 EC2 instance 页面,选中 instance 后点击:
AWS Academy Starter Account 对 IAM 和 Systems Manager 有限制;
Session Manager 或某些 browser-based connection 方式可能不可用;
如果这些方式打不开,不代表 instance 有问题,优先使用 SSH。
Task 2: Managing and Monitoring EC2 Instances
本 Task 主要是管理和监控 EC2 instance。
查看 EC2 的 Details、Status checks 和 Monitoring;
验证 termination protection;
查看 Reserved Instances 购买页面;
创建 CloudWatch CPU alarm;
用高 CPU 负载触发 alarm;
查看 CloudWatch alarm 和 EC2 Monitoring 中的 CPU 变化;
实验结束后删除 CloudWatch alarm,并停止 CPU 负载。
Step 2.1:查看 EC2 Instance 状态信息
Status checks 用来检查 AWS 底层主机和 EC2 instance 是否正常;
Monitoring 用来查看 CPU、Network、Disk 等指标;
这些指标后面会被 CloudWatch alarm 使用。
Step 2.2:验证 Termination Protection
因为前面开启了 termination protection,AWS 应该会提示无法 terminate。
后续真正要删除 instance 时,需要先进入:
把 termination protection 改成:
Step 2.3:查看 Reserved Instances 页面
点击后选择购买或搜索 Reserved Instance。
Reserved Instance 是 AWS 的一种长期预留计费方式;
和按需使用的 On-Demand Instance 不同;
本 Lab 只是让你看一下页面和概念,不要求真的购买。
Step 2.4:进入 CloudWatch
Step 2.5:选择 EC2 CPUUtilization Metric
选择 CPUUtilization 后点击下一步。
Step 2.6:设置 Alarm 条件
Step 2.7:配置 Email Notification
在 configure actions 页面,选择创建新的 SNS topic。
CloudWatch alarm 本身负责判断指标是否超过阈值;
SNS topic 负责把通知发到你的 email;
如果没有确认 email subscription,即使 alarm 触发,也可能收不到邮件。
Step 2.8:确认 Email Subscription
确认后,SNS 才能真正向你的邮箱发送 alarm 通知。
AWS 不会直接向未确认的邮箱发告警;
这一步很容易漏掉;
如果后面 alarm 触发但没有收到邮件,优先检查 subscription 是否确认。
Step 2.9:SSH 登录 EC2 并制造高 CPU 负载
如果 CPU 一直没有超过 90%,可以用更稳定的方式在后台开多个循环:
不要长时间运行高 CPU 负载;
看到 alarm 触发并截图后,要及时停止循环;
如果终端卡住,先尝试 Ctrl + C。
Step 2.10:查看 CloudWatch Alarm 是否触发
同时邮箱中应该收到 AWS alarm notification。
Step 2.11:查看 EC2 Monitoring 中的 CPU Spike
Step 2.12:停止 CPU 负载
如果你还在 SSH session 中运行循环,停止它。
停止人为制造的 CPU 压力;
避免持续高负载;
为后续 cleanup 做准备。
Step 2.13:删除 CloudWatch Alarm
Task 3: Storage in AWS (S3)
本 Task 要创建一个 S3 bucket,并测试 object 的 private/public 访问。
进入 S3 服务;
创建一个 bucket;
上传 sample file;
访问 object URL 并观察 Access Denied;
修改 bucket public access 设置;
修改 object-level ACL;
再次访问 object URL,确认文件可以公开访问。
Step 3.1:进入 S3 服务
Step 3.2:填写 Bucket Name 和 Region
bucket name 必须全球唯一;
只能使用小写字母、数字和 hyphen;
不要使用空格;
如果提示名字重复,换一个更独特的名字。
Step 3.3:设置 Object Ownership 和 ACL
因为本 Lab 后面要用 object-level ACL 把单个文件设置为 public,所以创建 bucket 时需要注意 ACL 设置。
如果页面中有 Object Ownership 选项,选择:
ACL 是 Access Control List;
本 Lab 会通过 ACL 给 Everyone 添加 read permission;
如果 ACL 被禁用,后面 object permissions 里可能不能修改 public ACL;
真实生产环境中通常不建议随便开启 public ACL,但本 Lab 是为了学习权限控制。
Step 3.4:保持 Block Public Access 默认开启
在创建 bucket 时,Block Public Access 默认会全部勾选。
AWS 默认不让 S3 bucket 公开;
这是为了避免误把文件暴露到 Internet;
后面会手动关闭这个限制,并观察权限变化。
Step 3.5:创建 Bucket
创建成功后,在 bucket 列表中查看新 bucket。
Step 3.6:准备一个 Sample File
创建一个简单文件用于上传测试;
后面会通过 object URL 访问它。
Step 3.7:上传 Sample File
点击刚创建的 bucket 名称,进入 bucket。
上传完成后,回到 bucket object list,应该能看到这个文件。
Step 3.8:查看 Object Details 和 Object URL
点击刚上传的文件,进入 object details 页面。
Object URL 是这个文件的 HTTP 访问地址;
但现在 bucket 和 object 都没有公开;
所以浏览器访问会被拒绝;
这说明 S3 默认访问控制是 private 的。
Step 3.9:关闭 Bucket 的 Block Public Access
关闭 Block Public Access 后,bucket 允许你设置 public permission;
但这一步本身不等于 object 已经 public;
如果只做这一步,再访问 object URL 仍然可能是 Access Denied。
Step 3.10:修改 Object ACL,让文件 Public Read
在 Everyone (public access) 中勾选:
如果页面有 Object ACL 的 Read,也可以按 Lab 页面要求一起勾选。
前面关闭的是 bucket 的 public access block;
这里才是给具体 object 加 public read permission;
因为本 Lab 使用 object-level ACL,所以每个新上传的 object 默认仍然可能是 private;
新上传的文件如果要 public,需要再次设置 ACL。
Step 3.11:再次访问 Object URL
回到 object details 页面,再次点击或复制:
这次应该可以在浏览器中看到文件内容,或者浏览器会下载该文件。
Step 3.12:理解 Bucket-level 和 Object-level 权限
本 Lab 的操作主要是 object-level ACL:
S3 也可以在 bucket-level 设置权限,例如:
object-level ACL:控制单个 object;
bucket policy:可以控制整个 bucket 或一组路径;
Block Public Access:是更上层的安全开关,会阻止 public policy 或 public ACL 生效。
Task 4: Versioning in S3
本 Task 要开启 S3 bucket versioning,并上传同名文件的不同版本。
Step 4.1:开启 Bucket Versioning
versioning 开启后,S3 会保存同一个 object 的历史版本;
更新同名文件不会直接覆盖旧版本;
删除 object 时,也会保留 delete marker 或历史版本;
versioning 是一种防止误删和误覆盖的保护机制。
Step 4.2:创建 Version 1 文件
Step 4.3:上传 Version 1
上传完成后,进入 object details,点击 Object URL 查看内容。
如果出现 Access Denied,按 Task 3 的方法给这个 object 设置 public read。
Step 4.4:修改同名文件为 Version 2
Step 4.5:上传 Version 2
因为 bucket versioning 已经开启,所以这次上传不会简单覆盖旧文件,而是生成一个新的 version。
可以直接看到新内容;
出现 Access Denied。
如果出现 Access Denied,说明新上传的 object version 默认是 private,需要重新给当前 object 设置 public read。
Step 4.6:查看 Object Versions
你应该能看到同一个 object 的多个版本,包括:
Version ID;
Last modified;
Size;
Storage class。
Step 4.7:理解 Versioning 的影响
可以找回旧版本;
可以防止误覆盖;
可以降低误删文件造成的风险;
适合重要数据备份。
每个版本都会占用存储空间;
大文件频繁更新会快速增加 bucket size;
删除当前 object 不一定等于删除所有历史版本;
真正清理 bucket 时,需要删除所有 versions 和 delete markers。
Task 5: Cleanup
停止 CPU 负载;
删除 CloudWatch alarm;
删除 SNS topic;
关闭或删除 EC2 instance;
如果不再需要,清空并删除 S3 bucket;
确认没有遗留 running instance。
Step 5.1:确认 CPU 负载已经停止
如果你还在 EC2 里运行 CPU 循环,先停止。
Step 5.2:删除 CloudWatch Alarm
Step 5.3:删除 SNS Topic
Step 5.4:删除 EC2 Instance
如果 termination protection 还开着,先关闭:
Step 5.5:清理 S3 Bucket
如果老师要求保留截图后即可删除 S3 bucket,可以清理 S3。
如果 bucket 没有开启 versioning,只需要删除所有 objects:
如果 bucket 开启了 versioning,需要打开:
所有 object versions;
所有 delete markers。
确认 bucket 为空后,回到 bucket list,选择 bucket,点击:
按页面要求输入 bucket name 确认删除。
Summary
本周 Lab 的主线是:先用 EC2 创建一台 AWS 云虚拟机,再用 CloudWatch 监控它,最后用 S3 学习对象存储和版本控制。
EC2 部分重点是理解一台云虚拟机从创建到连接的完整流程:
Amazon Linux 默认用户是 ec2-user;
SSH 必须使用正确 .pem key;
Security Group 要允许 22 端口;
termination protection 可以防止误删 instance;
EC2 Monitoring 和 CloudWatch alarm 都是基于 metrics 工作的。
CloudWatch 部分重点是理解 alarm 的逻辑:
S3 部分重点是理解 object storage 的权限和 versioning:
bucket 是存放 object 的容器;
object 默认不是 public;
只关闭 Block Public Access 不一定能访问 object;
object-level ACL 需要给 Everyone 添加 read permission;
versioning 会保存同一个 object 的多个版本;
versioning 提高安全性,但会增加存储空间和成本。
最后要记住:AWS Lab 做完后一定要 cleanup,尤其是 EC2 instance 和 CloudWatch alarm。
本周必须理解的知识点
1. EC2 是什么
你可以把 EC2 理解为云上的一台 Linux 或 Windows 电脑,只不过它运行在 AWS 的数据中心里。
2. AMI 是什么
AMI 是创建 EC2 instance 的系统模板。
3. Security Group 是什么
Security Group 是 EC2 的虚拟防火墙。
4. EBS 是什么
EBS 是给 EC2 使用的 block storage。
本 Lab 中 root volume 就是一个 EBS volume。
5. CloudWatch 是什么
CPU 使用率;
网络流量;
Disk 指标;
Status check;
Alarm 状态。
6. S3 是什么
每个 object 可以通过 object URL 访问,但是否能访问取决于权限。
7. S3 Versioning 是什么
S3 versioning 会保存 object 的多个历史版本。
关键概念对比
EC2 vs EBS vs S3
Security Group vs S3 Permissions
Block Public Access vs ACL vs Bucket Policy
Termination Protection vs Delete on Termination
US East (N. Virginia) / us-east-1
Key pair name: lab07-key
Key pair type: RSA
Private key file format: .pem
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0644 for 'lab07-key.pem' are too open.
Auto-assign public IP: Enable
SSH TCP 22 My IP 或 Anywhere
HTTP TCP 80 0.0.0.0/0
Root volume: 8 GiB
Volume type: gp3
Delete on termination: Yes
AMI: Amazon Linux 2023 AMI
Instance type: t3.micro
Key pair: 已选择或已创建
Security Group: SSH 22 + HTTP 80
Storage: 默认 root volume
Termination protection: Enabled
Region: us-east-1
Are you sure you want to continue connecting (yes/no/[fingerprint])?
EC2 Instance Connect
Session Manager
SSH client
Details
Security
Networking
Storage
Status checks
Monitoring
Tags
Instance state → Terminate instance
Actions → Instance settings → Change termination protection
Instance type: t2.small
Term: 1 month - 12 months
EC2 → Per-Instance Metrics → CPUUtilization
InstanceId = <INSTANCE_ID>
Threshold type: Static
Condition: Greater than
Threshold value: 90
Topic name: lab07-cpu-alarm-topic
Email endpoints: <YOUR_EMAIL>
CloudWatch → Alarms → All alarms
EC2 → Instances → 选择你的 instance → Monitoring
CloudWatch → Alarms → All alarms
fit5225-lab07-<studentid>-<date>
fit5225-lab07-12345678-20250901
US East (N. Virginia) / us-east-1
ACLs disabled (recommended)
Block all public access: Enabled
Permissions → Block public access (bucket settings) → Edit
Access control list (ACL)
Bucket Policy
Access Control Lists
Properties → Bucket Versioning → Edit
This is version 1
This is version 2
S3 versioning 能提高数据安全性,但会增加存储成本,尤其是大文件频繁更新时。
CloudWatch → Alarms → All alarms
Actions → Instance settings → Change termination protection → Disable
Actions → Instance state → Terminate instance
S3 → Buckets → <BUCKET_NAME>
Objects → Select all → Delete
AMI → Instance Type → Key Pair → Security Group → EBS Root Volume → Launch → SSH
Metric → Condition → Alarm state → Notification
CPUUtilization > 90 → In alarm → SNS email notification
Amazon Linux 2023 + t3.micro
Security Group inbound rules
EC2 instance 运行系统
EBS root volume 存放操作系统和文件
EC2 = 电脑
EBS = 电脑硬盘
S3 = 云端文件仓库
先关闭 Block Public Access
再给 object ACL 添加 Everyone Read
最后访问 Object URL
ssh -i <KEY_FILE>.pem ec2-user@<PUBLIC_IPV4>
ssh -i <KEY_FILE>.pem ec2-user@<PUBLIC_IPV4>
while true; do echo; done
while true; do :; done &
while true; do :; done &
echo "This is a sample file for Lab 07 S3 test." > sample-s3.txt
echo "This is version 1" > samplefile.txt
echo "This is version 2" >> samplefile.txt