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指标 |
| 故障排除 | 连接问题、日志查看、实例恢复 |
下一步学习 #
掌握实例管理后,接下来可以:
- EC2存储 - 了解EC2存储选项
- Lambda无服务器 - 学习无服务器计算
- VPC基础 - 学习网络配置
最后更新:2026-03-28