AWS 实战技巧:从网络架构到核心服务

1. AWS 基础

1.1 环境配置

1.1.1 安装 AWS CLI

1
2
brew install awscli
aws configure # 配置访问凭证

1.1.2 获取 Access Key

  1. 登录 AWS 管理控制台
  2. 点击右上角账户名称 → Security credentials
  3. 在 Access keys 部分点击 Create New Access Key

1.1.3 常用命令

1
2
3
# 查看 RDS 实例信息
aws rds describe-db-instances \
--query "*[].[DBInstanceIdentifier,Endpoint.Address,Endpoint.Port,MasterUsername]"

1.2 Region 与可用区

1.2.1 核心概念

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#3B82F6', 'primaryTextColor': '#1E3A5F', 'primaryBorderColor': '#2563EB', 'lineColor': '#60A5FA'}}}%%
flowchart TD
    subgraph Region ["Region(区域)"]
        direction TB
        subgraph AZ1 ["可用区 A"]
            DC1["数据中心 1"]
            DC2["数据中心 2"]
        end
        subgraph AZ2 ["可用区 B"]
            DC3["数据中心 3"]
            DC4["数据中心 4"]
        end
        subgraph AZ3 ["可用区 C"]
            DC5["数据中心 5"]
        end
    end

    AZ1 <--> |"低延迟 ≤2ms"| AZ2
    AZ2 <--> |"低延迟 ≤2ms"| AZ3

    classDef region fill:#DBEAFE,stroke:#2563EB,color:#1E3A5F
    classDef az fill:#D1FAE5,stroke:#059669,color:#065F46
    classDef dc fill:#FEF3C7,stroke:#D97706,color:#92400E

    class Region region
    class AZ1,AZ2,AZ3 az
    class DC1,DC2,DC3,DC4,DC5 dc
概念定义类比
RegionAWS 在全球的物理地理区域(如 us-east-1、ap-northeast-1)城市
可用区 (AZ)Region 内物理隔离的数据中心集群城市内的独立园区

1.2.2 Region 选择策略

考量因素说明
延迟选择离用户最近的 Region
合规性满足数据本地化法规要求
灾备跨 Region 部署实现异地容灾
成本不同 Region 定价存在差异

1.2.3 多可用区架构

多 AZ 部署是保障高可用的核心策略。AZ 间物理隔离、独立供电,单个 AZ 故障不影响其他 AZ。

成本考量

  • 同 AZ 内数据传输(私有 IP):免费
  • 跨 AZ 数据传输:约 $0.01/GB(按出方向计费,双方各自承担出站费用)
  • AZ 间延迟:1-2ms,对绝大多数应用可忽略

典型多 AZ 网络架构

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#3B82F6'}}}%%
flowchart TB
    subgraph VPC ["VPC: my-vpc (10.0.0.0/16)"]
        subgraph AZA ["us-east-1a"]
            PubA["public-subnet-a 10.0.1.0/24"]
            PriA["private-subnet-a 10.0.2.0/24"]
        end
        subgraph AZB ["us-east-1b"]
            PubB["public-subnet-b 10.0.3.0/24"]
            PriB["private-subnet-b 10.0.4.0/24"]
        end
    end

    PubA --> |"ELB, NAT GW"| PriA
    PubB --> |"ELB 节点"| PriB
    PriA --> |"EC2, RDS主"| PriB
    PriB --> |"EC2, RDS备"| PriA

    classDef pub fill:#DBEAFE,stroke:#2563EB
    classDef pri fill:#FEE2E2,stroke:#DC2626

    class PubA,PubB pub
    class PriA,PriB pri

即使 us-east-1a 整体故障,us-east-1b 的 ELB 继续接收流量,RDS 自动切换至备库,服务不中断。

1.2.4 查看 EC2 所在区域

EC2 是区域性资源,需切换到对应 Region 才能查看。可用区信息(如 us-east-1a)直接显示在实例列表中。

1.3 VPC 网络

VPC (Virtual Private Cloud) 是 AWS 中逻辑隔离的私有虚拟网络,完全由用户掌控。

核心特性

  • 自定义 IP 地址范围、子网、路由表
  • 默认隔离,需显式配置才能访问互联网或其他 VPC
  • 区域级资源,不能跨 Region,但可跨越多个 AZ

VPC 核心价值:将 EC2 应用服务器、数据库等核心资产放在私有子网(无公网访问),仅将 ALB 放在公有子网作为流量入口,实现网络层面的安全隔离。

1.4 ELB 与 NAT Gateway

ELB 和 NAT Gateway 是云架构中两个关键的流量组件,分别处理入站和出站流量:

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#3B82F6', 'primaryTextColor': '#1E3A5F', 'primaryBorderColor': '#2563EB', 'lineColor': '#60A5FA'}}}%%
flowchart LR
    subgraph Internet ["互联网"]
        User["用户"]
        ExtAPI["外部 API"]
    end

    subgraph VPC ["VPC"]
        subgraph Public ["公有子网"]
            ELB["ELB 流量入口"]
            NAT["NAT GW 流量出口"]
        end
        subgraph Private ["私有子网"]
            EC2["EC2 实例"]
        end
    end

    User --> |"Inbound"| ELB
    ELB --> EC2
    EC2 --> NAT
    NAT --> |"Outbound"| ExtAPI

    classDef internet fill:#F3E8FF,stroke:#7C3AED
    classDef public fill:#DBEAFE,stroke:#2563EB
    classDef private fill:#FEE2E2,stroke:#DC2626

    class User,ExtAPI internet
    class ELB,NAT public
    class EC2 private
组件方向功能类比
ELB外 → 内接收外部请求并分发至后端服务器大楼前台
NAT Gateway内 → 外允许私有实例访问互联网,阻止外部主动访问公司外线电话

NAT Gateway 关键配置

  • 必须部署在公有子网
  • 需分配弹性 IP (Elastic IP)
  • 服务对象是私有子网中的实例

1.5 ELB 与 Target Group

ELB 不直接连接 EC2 实例,而是通过 Target Group 管理后端目标。

三层关系ELB → Target Group → Targets

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#3B82F6'}}}%%
flowchart LR
    User["用户请求"] --> ALB["ALB"]
    ALB --> |"/api/*"| TG1["API Target Group"]
    ALB --> |"/web/*"| TG2["Web Target Group"]
    TG1 --> EC2A["EC2-API-1"]
    TG1 --> EC2B["EC2-API-2"]
    TG2 --> EC2C["EC2-Web-1"]
    TG2 --> EC2D["EC2-Web-2"]

    classDef alb fill:#3B82F6,stroke:#2563EB,color:#fff
    classDef tg fill:#10B981,stroke:#059669,color:#fff
    classDef ec2 fill:#F59E0B,stroke:#D97706,color:#fff

    class ALB alb
    class TG1,TG2 tg
    class EC2A,EC2B,EC2C,EC2D ec2

1.5.1 创建 Target Group

1
2
3
4
5
target_type: "IP addresses"  # 或 Instances
protocol: HTTP
port: 80
vpc: your-vpc-id
health_check_path: "/readiness"

负载均衡算法

  • 轮询 (Round Robin):默认算法,按顺序分配请求
  • 最少未完成请求 (Least Outstanding Requests):优先分配给正在处理请求数最少的目标

会话粘性(可选):通过 Target Group 的 Stickiness 配置实现,基于 Cookie 而非 IP。

1.5.2 创建 ALB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
scheme: "Internet-facing"
ip_type: "IPv4"
subnets:
- public-subnet-a # 至少两个不同 AZ 的公有子网
- public-subnet-b
security_group:
inbound:
- HTTP: 0.0.0.0/0
- HTTPS: 0.0.0.0/0
listeners:
- port: 80
target_group: ecs-online-server
- port: 443
target_group: ecs-online-server

安全最佳实践:修改 EC2 安全组,将 HTTP 入站规则的源改为 ALB 的安全组,拒绝直接访问。

1.6 HTTPS 与证书

HTTPS 在 ALB 层面配置和终止,后端流量可保持 HTTP:

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#3B82F6'}}}%%
flowchart LR
    User["用户浏览器"] <--> |"HTTPS 加密"| ALB["ALB"]
    ALB <--> |"HTTP 未加密"| EC2["EC2"]

    classDef secure fill:#10B981,stroke:#059669,color:#fff
    classDef plain fill:#F59E0B,stroke:#D97706,color:#fff

    class User,ALB secure
    class EC2 plain

优势

  • 证书集中管理,无需在每台 EC2 配置
  • 降低后端 CPU 负载
  • 简化后端配置,仅需监听 80 端口
  • VPC 内部流量处于受信环境

1.6.1 配置步骤

  1. 申请证书:在 ACM 申请免费证书(推荐 DNS 验证,支持自动续订)

    • ⚠️ ACM 证书是区域性的,ALB 使用的证书需在同一 Region(CloudFront 例外,必须使用 us-east-1,见 4.1 节)
  2. 配置 HTTPS 监听器

    • 协议:HTTPS,端口:443
    • 默认操作:转发至 Target Group
    • SSL 证书:选择 ACM 中已签发的证书

2. EC2

2.1 磁盘扩容

2.1.1 AWS 控制台操作

EC2 → Elastic Block Store → Volumes → 修改卷大小

2.1.2 系统内扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 确认卷状态
aws ec2 describe-volumes-modifications \
--volume-id vol-0ddabcd0eb1dc33ae \
--region us-west-2

# 查看文件系统类型
df -hT

# 查看设备挂载点
findmnt /
findmnt /data2

# 扩展分区
sudo growpart /dev/nvme0n1 1

# 扩展文件系统
# ext4:
sudo resize2fs /dev/nvme0n1p1
# XFS (Amazon Linux 2023 默认):
sudo xfs_growfs /

2.2 存储性能指标

指标定义类比
IOPS每秒读写操作次数收费站每秒通过的车辆数
Throughput每秒传输的数据量 (MiB/s)高速公路的总车道宽度
  • IOPS 影响响应速度和并发处理能力
  • Throughput 影响大文件传输效率

3. S3

3.1 基础操作

1
2
3
4
5
# 下载
aws s3 sync s3://bucket-name/path/ .

# 上传
aws s3 sync . s3://bucket-name/path/

cp vs sync

命令特性
aws s3 cp无条件复制所有文件,直接覆盖
aws s3 sync仅复制新增/更新的文件;配合 --delete 可删除目标中多余文件

3.2 加速模式

1
2
3
4
5
6
7
8
obj, err := s.preSignClient.PresignPutObject(ctx, &s3.PutObjectInput{
Bucket: &bucket,
Key: &key,
}, func(po *s3.PresignOptions) {
po.ClientOptions = append(po.ClientOptions, func(o *s3.Options) {
o.UseAccelerate = true
})
})

启用顺序:先开启 S3 加速功能 → 上线代码
关闭顺序:先下线代码 → 关闭 S3 加速功能

3.3 私有桶配合 CloudFront

S3 设置为 Block all public access,通过 OAC 允许 CloudFront 访问:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::account-id:distribution/distribution-id"
}
}
}
]
}

4. CloudFront

4.1 域名绑定

  1. us-east-1 区域申请证书(CloudFront 强制要求)
  2. CloudFront 设置 → SSL/TLS → 选择证书
  3. 添加 Alternate domain name (CNAME)
  4. Route 53 创建 CNAME 记录:cdn.example.com → xxx.cloudfront.net

4.2 缓存失效

在 CloudFront 分配详情页:

  1. 选择 Invalidations → Create Invalidation
  2. 输入路径:
    • 单个对象:/path/to/object.jpg
    • 全部失效:/*
  3. 点击 Invalidate

5. RDS

5.1 创建数据库实例

关键配置项:

  • VPC:选择正确的 VPC
  • Security Group:选择正确的安全组
  • 密码管理:Secrets Manager

5.2 创建用户

1
2
3
4
5
6
7
8
9
-- 创建读写用户
CREATE USER 'app_rw'@'%' IDENTIFIED BY 'secure_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'app_rw'@'%';
GRANT CREATE, DROP, ALTER, INDEX ON database_name.* TO 'app_rw'@'%';
FLUSH PRIVILEGES;

-- 验证权限
SELECT User, Host FROM mysql.user WHERE User = 'app_rw';
SHOW GRANTS FOR 'app_rw'@'%';

5.3 创建只读副本

Database → Actions → Create read replica(使用默认选项)

⚠️ 只读副本与主库共享相同的用户名和密码。若使用 Secrets Manager 自动轮换密码,副本会自动同步。

6. ElastiCache

6.1 Serverless 模式

ElastiCache Serverless 是无服务器部署模式:

  • 无需手动配置节点数量、分片或高可用
  • Redis 引擎隐式启用 Cluster Mode,数据自动分布到多个分片

7. MongoDB Atlas(AWS Marketplace)

7.1 通过 AWS Marketplace 订阅

  1. AWS Marketplace → MongoDB Atlas (pay-as-you-go)
  2. View purchase options → Subscribe
  3. 完成账户关联

7.2 创建 Cluster

  • 模式:Dedicated
  • 实例类型:M10(2GB RAM, 2 vCPU)
  • 关闭:Global Writes、BI Connector