Lesson 0020:云平台实操——你不只是在租服务器

前面 19 节课你学会了 Docker、K8s、Terraform、CI/CD 全套工具链,但有一个盲区:这些工具操作的对象——云资源本身——你还不熟悉。这节课补齐这个缺口。

JD 里「熟悉至少一个云平台」的出现率接近 100%。以 AWS 为例(概念在所有云平台通用,阿里云/腾讯云/GCP 只是名字不同),这节课覆盖 DevOps 日常高频接触的核心云服务。

VPS vs 云平台:不是一回事

维度VPS(你现有的)云平台(AWS/阿里云)
网络一个公网 IP,无隔离VPC = 你自己的虚拟私有网络
安全ufw 防火墙安全组(Security Group)= 实例级防火墙
存储本地磁盘EBS(块存储)+ S3(对象存储)+ EFS(文件存储)
数据库自己装 PostgreSQLRDS = 托管数据库,自动备份/多 AZ
权限root 一把梭IAM = 精细到单个 API 的权限控制
计费固定月费按用量计费,忘删资源 = 月底账单爆炸
本课用 AWS 术语,但你学的是概念模型——VPC/安全组/IAM/RDS/S3 是所有云平台的通用概念,换到阿里云只是名字不同(VPC→专有网络,EC2→ECS,S3→OSS)。

五大核心服务——DevOps 日常绕不开的

1. VPC(Virtual Private Cloud)——你的私有网络

VPC 是你云上所有资源的网络容器。一个典型的 Web 应用 VPC 架构:

                        Internet
                           │
                      Internet Gateway
                           │
           ┌───────────────┴───────────────┐
           │         VPC (10.0.0.0/16)      │
           │                                │
           │   Public Subnet (10.0.1.0/24)  │  ← 有公网 IP 的资源
           │   ┌──────────┐ ┌───────────┐   │
           │   │  Bastion  │ │  ALB      │   │
           │   │  (跳板机) │ │ (负载均衡)│   │
           │   └──────────┘ └───────────┘   │
           │                                │
           │   Private Subnet (10.0.2.0/24) │  ← 无公网 IP,更安全
           │   ┌──────────┐ ┌───────────┐   │
           │   │  EC2 App │ │  RDS DB   │   │
           │   └──────────┘ └───────────┘   │
           └────────────────────────────────┘

面试必知:

2. EC2(Elastic Compute Cloud)——虚拟机

EC2 就是你 VPS 的云版本。但比 VPS 多了几个关键能力:

# 启动一台 EC2 的典型参数(Terraform 视角——对应 0008):
resource "aws_instance" "app" {
  ami           = "ami-0c55b159cbfafe1f0"   # 操作系统镜像
  instance_type = "t3.medium"                # CPU/内存规格
  subnet_id     = aws_subnet.private.id      # 放在哪个子网
  vpc_security_group_ids = [aws_security_group.app.id]
  key_name      = "my-key"                   # SSH 密钥

  root_block_device {
    volume_size = 20                         # 系统盘大小 GB
    volume_type = "gp3"                      # SSD 类型
  }
}
概念含义面试问什么
AMIAmazon Machine Image,OS 快照选 Amazon Linux 2 还是 Ubuntu?
Instance TypeCPU/内存/网络规格t3 vs m5 vs c5 的区别?
Key PairSSH 密钥丢失私钥怎么办?(答:只能换 AMI 重建)
User Data启动时自动执行的脚本和 Ansible(0017) 怎么配合?
弹性 IP静态公网 IP为什么不要给每台 EC2 绑弹性 IP?(答:贵且浪费)

3. IAM(Identity and Access Management)——权限的命根子

传统运维思维:「SSH 进去,sudo su,想干什么干什么」。

云上思维:最小权限原则(Least Privilege)——每个角色只给刚好够用的权限,多一点都不行。

# IAM Policy 示例:只允许读取 S3 里的一个 bucket
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:ListBucket"],
      "Resource": [
        "arn:aws:s3:::my-app-config",
        "arn:aws:s3:::my-app-config/*"
      ]
    }
  ]
}

核心概念:

黄金规则:永远不要给 EC2 配 IAM User 的 Access Key。用 IAM Role——Role 临时凭证自动轮转,Key 泄露了也没用。这是面试必考题。

4. S3(Simple Storage Service)——对象存储

S3 不是文件系统。它是一个 key-value 存储,key 是文件名,value 是文件内容。无限容量,11 个 9 的持久性(99.999999999%)。

# S3 典型用法
# 1. 静态网站托管
# 2. CI/CD 制品仓库(存构建产物)
# 3. 日志归档
# 4. 数据库备份
# 5. Terraform state 后端(0008 学过 remote state)

# AWS CLI 操作
aws s3 ls s3://my-bucket/
aws s3 cp app.zip s3://my-bucket/releases/v1.0.0/app.zip
aws s3 sync ./dist/ s3://my-site/          # 部署静态站
概念含义
Bucket桶,S3 的顶层容器,名字全局唯一
Object对象 = 文件 + 元数据。单个最大 5TB
Versioning版本控制——覆盖文件不丢旧版,误删可恢复
Lifecycle Policy自动把旧文件归档或删除(30天后转 Glacier,90天后删除)
Static Website Hosting直接托管 HTML/JS/CSS,不需要 Nginx

5. RDS(Relational Database Service)——托管数据库

自己装数据库:你要管备份、升级、高可用、磁盘扩容。RDS 把这些全自动化了。

# RDS 替你做的事(对比自己装 PostgreSQL):
自己装                              RDS
──────                              ───
pg_dump + cron 定时备份            自动备份 + 时间点恢复(PITR)
手动配置主从复制                   Multi-AZ 自动故障切换
手动监控磁盘使用率                 自动扩容(或告警)
手动打安全补丁                     自动小版本升级
手动配置 SSL                       一键强制 SSL

关键参数:

动手练习:在 AWS Free Tier 上搭一个最小云环境

任务:注册 AWS 账号(需信用卡,free tier 免费),用 AWS CLI 完成以下操作。

# 1. 安装 AWS CLI
# 本机已有的话跳过
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zip
unzip awscliv2.zip && sudo ./aws/install
aws --version

# 2. 配置凭证(在 AWS Console → IAM → 创建 access key)
aws configure
# Access Key ID:     AKIA...
# Secret Access Key: ...
# Default region:    us-east-1
# Output format:     json

# 3. 验证身份
aws sts get-caller-identity
# 输出: { "Account": "123456789012", "UserId": "...", "Arn": "..." }

# 4. 创建 S3 bucket(名字必须全局唯一,加随机后缀)
aws s3 mb s3://my-devops-learning-bucket-$(date +%s)
# 输出: make_bucket: my-devops-learning-bucket-...

# 5. 上传一个文件
echo "Hello from AWS CLI" > test.txt
aws s3 cp test.txt s3://my-devops-learning-bucket-*/

# 6. 验证文件存在
aws s3 ls s3://my-devops-learning-bucket-*/

# 7. 删除文件 + 删除 bucket(记得清理,避免计费)
aws s3 rm s3://my-devops-learning-bucket-*/test.txt
aws s3 rb s3://my-devops-learning-bucket-*/

# 8. 用 Terraform 做同样的事(结合 0008 学的内容)
cat > s3.tf << 'EOF'
provider "aws" { region = "us-east-1" }
resource "aws_s3_bucket" "demo" {
  bucket = "my-terraform-bucket-${random_id.suffix.hex}"
}
resource "random_id" "suffix" {
  byte_length = 4
}
EOF

terraform init && terraform plan && terraform apply
terraform destroy   # 毁灭证据,别留账单
你的任务:完成上面的 CLI + Terraform 操作后,试着在 free tier 开一台 t2.micro EC2(750 小时/月免费),SSH 进去装 Docker,部署你 0005 课的 Node.js 应用。
加分题:用 Terraform 把 EC2 + Security Group + S3 bucket 一次性建出来,然后 destroy 掉。这就是 IaC(0008) + 云平台(0020) 的实际组合用法。

小测验

Q1:Public Subnet 和 Private Subnet 的区别是什么?
Q2:为什么推荐给 EC2 用 IAM Role 而不是 Access Key?
Q3:Security Group 和传统防火墙(ufw/iptables)的核心区别?
Q4:RDS Multi-AZ 的作用是什么?

推荐资源

下一步

下一课学 Lesson 0021:DevSecOps 安全基础——怎么在 CI/CD 流水线里防止把密钥提交到 Git、怎么扫描容器镜像漏洞、怎么把安全做成自动化。

AWS 注册需要信用卡但 free tier 不扣费。如果你不想绑卡,可以只用本课的 AWS CLI demo(前几步不需要信用卡——但创建 bucket/EC2 需要)。阿里云/腾讯云也有免费套餐,概念完全对应;关键是把 VPC/安全组/IAM/S3/RDS 这五个模型印在脑子里。
← Lesson 0019 · 术语表 · Mission