EC2实例管理 #

一、创建EC2实例 #

1.1 创建实例步骤 #

text
创建EC2实例流程:
├── 第一步:选择AMI
│   └── 选择操作系统和配置
│
├── 第二步:选择实例类型
│   └── 根据需求选择规格
│
├── 第三步:配置实例
│   ├── 网络设置
│   ├── IAM角色
│   └── 用户数据
│
├── 第四步:添加存储
│   └── 配置EBS卷
│
├── 第五步:添加标签
│   └── 为实例添加标签
│
├── 第六步:配置安全组
│   └── 设置防火墙规则
│
└── 第七步:审核启动
    └── 确认配置并启动

1.2 通过控制台创建 #

选择AMI #

text
AMI选择界面:
├── Quick Start(快速启动)
│   ├── Amazon Linux 2023
│   ├── Ubuntu
│   ├── Windows Server
│   └── Red Hat Enterprise Linux
│
├── My AMIs(我的AMI)
│   └── 自己创建的AMI
│
├── AWS Marketplace
│   └── 第三方提供的AMI
│
└── Community AMIs(社区AMI)
    └── 社区共享的AMI

配置实例详情 #

配置项 说明
实例数量 要启动的实例数量
购买选项 是否请求Spot实例
网络 选择VPC
子网 选择子网
自动分配公有IP 是否分配公网IP
IAM角色 附加IAM角色
关闭停止行为 停止/终止
能力优化 CPU选项
用户数据 启动脚本

用户数据示例 #

bash
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello from EC2</h1>" > /var/www/html/index.html

1.3 通过CLI创建 #

bash
aws ec2 run-instances \
    --image-id ami-0c55b159cbfafe1f0 \
    --count 1 \
    --instance-type t3.micro \
    --key-name my-key-pair \
    --security-group-ids sg-12345678 \
    --subnet-id subnet-12345678 \
    --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=MyInstance}]"

1.4 通过代码创建 #

Python (Boto3) #

python
import boto3

ec2 = boto3.resource('ec2')

instance = ec2.create_instances(
    ImageId='ami-0c55b159cbfafe1f0',
    MinCount=1,
    MaxCount=1,
    InstanceType='t3.micro',
    KeyName='my-key-pair',
    SecurityGroupIds=['sg-12345678'],
    SubnetId='subnet-12345678',
    TagSpecifications=[
        {
            'ResourceType': 'instance',
            'Tags': [{'Key': 'Name', 'Value': 'MyInstance'}]
        }
    ]
)

print(f'Created instance: {instance[0].id}')

二、实例生命周期 #

2.1 实例状态 #

text
实例状态流转:
┌─────────┐
│ pending │ ──────> 启动中
└────┬────┘
     │
     ▼
┌─────────┐
│ running │ ──────> 运行中
└────┬────┘
     │
     ▼
┌──────────┐     ┌─────────┐
│ stopping │ ──> │ stopped │ ──> 停止
└──────────┘     └────┬────┘
                      │
                      ▼
               ┌────────────┐
               │ terminated │ ──> 终止
               └────────────┘

2.2 状态转换操作 #

当前状态 操作 结果状态
pending 等待 running
running 停止 stopping → stopped
running 重启 pending → running
running 终止 terminated
stopped 启动 pending → running
stopped 终止 terminated

2.3 启动实例 #

bash
aws ec2 start-instances --instance-ids i-1234567890abcdef0

2.4 停止实例 #

bash
aws ec2 stop-instances --instance-ids i-1234567890abcdef0

停止实例注意事项:

text
停止实例注意:
├── 实例停止后不产生计算费用
├── EBS存储继续计费
├── 公有IP会释放
├── 实例存储数据会丢失
└── 可修改实例类型

2.5 重启实例 #

bash
aws ec2 reboot-instances --instance-ids i-1234567890abcdef0

2.6 终止实例 #

bash
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0

终止实例注意事项:

text
终止实例注意:
├── 实例被永久删除
├── 附加的EBS卷默认删除
├── 无法恢复终止的实例
└── 建议先创建AMI备份

三、连接实例 #

3.1 Linux实例连接 #

SSH连接 #

bash
ssh -i /path/to/key.pem ec2-user@public-ip

# 或使用公有DNS
ssh -i /path/to/key.pem ec2-user@ec2-xx-xx-xx-xx.compute.amazonaws.com

不同AMI的默认用户 #

AMI 默认用户名
Amazon Linux ec2-user
Ubuntu ubuntu
CentOS centos
RHEL ec2-user
Fedora fedora
Debian admin

SSH密钥权限 #

bash
chmod 400 /path/to/key.pem

3.2 Windows实例连接 #

text
Windows连接步骤:
├── 获取管理员密码
│   └── 使用密钥对解密密码
│
├── 使用RDP连接
│   └── 远程桌面连接
│
└── 输入凭据
    ├── 用户名:Administrator
    └── 密码:解密后的密码

3.3 Session Manager连接 #

使用AWS Systems Manager连接:

text
Session Manager优势:
├── 无需开放SSH端口
├── 无需管理密钥对
├── 审计所有会话
├── 跨平台支持
└── 要求
    ├── 安装SSM Agent
    └── 配置IAM角色
bash
aws ssm start-session --target i-1234567890abcdef0

四、实例配置管理 #

4.1 修改实例类型 #

text
修改实例类型步骤:
├── 1. 停止实例
├── 2. 选择实例
├── 3. 实例设置 → 更改实例类型
├── 4. 选择新类型
├── 5. 启动实例
└── 注意:公有IP可能变化

4.2 修改安全组 #

bash
aws ec2 modify-instance-attribute \
    --instance-id i-1234567890abcdef0 \
    --groups sg-12345678 sg-87654321

4.3 添加/删除标签 #

bash
aws ec2 create-tags \
    --resources i-1234567890abcdef0 \
    --tags Key=Environment,Value=Production

aws ec2 delete-tags \
    --resources i-1234567890abcdef0 \
    --tags Key=Environment

4.4 附加IAM角色 #

bash
aws ec2 associate-iam-instance-profile \
    --instance-id i-1234567890abcdef0 \
    --iam-instance-profile Name=MyRole

五、实例监控 #

5.1 状态检查 #

text
状态检查类型:
├── 系统状态检查
│   └── AWS基础设施问题
│   └── 需要AWS修复
│
└── 实例状态检查
    └── 实例配置问题
    └── 需要用户修复

常见状态检查问题 #

检查类型 问题 解决方案
系统检查 网络连接问题 等待AWS修复或迁移
系统检查 电源问题 等待AWS修复
实例检查 内核问题 重启或重建实例
实例检查 网络配置错误 检查安全组和网络

5.2 CloudWatch监控 #

text
基本监控(免费):
├── 5分钟间隔
├── 自动启用
└── 指标
    ├── CPU使用率
    ├── 网络流量
    ├── 磁盘读写
    └── 状态检查

详细监控(付费):
├── 1分钟间隔
├── 需手动启用
└── 更及时的告警

5.3 关键监控指标 #

指标 说明 告警阈值建议
CPUUtilization CPU使用率 >80%持续5分钟
StatusCheckFailed 状态检查失败 >0
NetworkIn/Out 网络流量 根据基线设置
DiskReadOps 磁盘读取 根据基线设置

5.4 设置告警 #

bash
aws cloudwatch put-metric-alarm \
    --alarm-name "HighCPU" \
    --alarm-description "CPU超过80%" \
    --metric-name CPUUtilization \
    --namespace AWS/EC2 \
    --statistic Average \
    --period 300 \
    --threshold 80 \
    --comparison-operator GreaterThanThreshold \
    --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
    --evaluation-periods 2 \
    --alarm-actions arn:aws:sns:us-east-1:123456789012:MyTopic

六、实例故障排除 #

6.1 连接问题排查 #

text
SSH连接问题排查:
├── 检查实例状态
│   └── 确认实例正在运行
│
├── 检查安全组
│   └── 确认开放22端口
│
├── 检查网络ACL
│   └── 确认允许入站SSH
│
├── 检查密钥对
│   └── 确认使用正确的密钥
│
├── 检查公有IP
│   └── 确认使用正确的IP
│
└── 检查系统日志
    └── 查看启动日志

6.2 获取系统日志 #

bash
aws ec2 get-console-output --instance-id i-1234567890abcdef0

6.3 实例恢复 #

text
实例恢复方法:
├── 自动恢复
│   └── CloudWatch告警触发
│
├── 手动恢复
│   ├── 重启实例
│   ├── 停止后启动
│   └── 从AMI重建
│
└── 数据恢复
    └── 从快照恢复数据

七、实例自动扩展 #

7.1 启动模板 #

text
启动模板组成:
├── AMI ID
├── 实例类型
├── 密钥对
├── 安全组
├── IAM角色
├── 用户数据
└── 标签

7.2 创建启动模板 #

bash
aws ec2 create-launch-template \
    --launch-template-name MyTemplate \
    --launch-template-data '{
        "ImageId": "ami-0c55b159cbfafe1f0",
        "InstanceType": "t3.micro",
        "KeyName": "my-key-pair",
        "SecurityGroupIds": ["sg-12345678"]
    }'

7.3 自动扩展组 #

text
Auto Scaling Group配置:
├── 启动模板
├── 最小/最大/期望实例数
├── 可用区
├── 负载均衡器
├── 健康检查
└── 扩展策略

八、实例最佳实践 #

8.1 命名规范 #

text
实例命名建议:
├── 格式:环境-应用-角色-序号
├── 示例:prod-web-server-01
└── 使用标签管理

8.2 标签策略 #

标签键 值示例 用途
Name prod-web-01 实例名称
Environment production 环境标识
Application web-app 应用名称
Owner team-a 负责人
CostCenter cc-123 成本中心

8.3 安全建议 #

text
安全最佳实践:
├── 使用IAM角色而非密钥
├── 最小权限安全组规则
├── 定期更新系统补丁
├── 启用详细监控
├── 配置CloudWatch告警
├── 使用加密EBS卷
└── 定期创建AMI备份

8.4 成本优化建议 #

text
成本优化:
├── 选择合适的实例类型
├── 使用预留实例或Savings Plans
├── 及时停止/终止不用的实例
├── 使用Spot实例
├── 合理配置存储大小
└── 监控资源利用率

九、小结 #

本章介绍了EC2实例管理:

内容 要点
创建实例 选择AMI、实例类型、配置网络和存储
生命周期 pending、running、stopped、terminated
连接实例 SSH、RDP、Session Manager
监控 状态检查、CloudWatch指标
故障排除 连接问题、日志查看、实例恢复

下一步学习 #

掌握实例管理后,接下来可以:

  1. EC2存储 - 了解EC2存储选项
  2. Lambda无服务器 - 学习无服务器计算
  3. VPC基础 - 学习网络配置
最后更新:2026-03-28