AWS信用号 AWS EC2日常运维技巧
一、监控篇:别让EC2“裸奔”
你以为AWS的监控系统是摆设?错!CloudWatch简直是运维界的“千里眼”,但很多人只会看默认的CPU使用率,殊不知自定义指标才是王道。比如,你的应用内存泄漏了,CPU可能还很正常,这时候就得靠自定义监控了。设置告警时,别等CPU飙到100%才警报,应该提前设置80%就预警,这样你还能优雅地喝杯咖啡,而不是半夜被电话吵醒。
1.1 CloudWatch监控神器
CloudWatch默认提供CPU、网络、磁盘等基础指标,但要监控内存使用率,得先安装CloudWatch Agent。安装后配置一个JSON文件,指定收集内存指标。比如:
{
"metrics": {
"namespace": "Custom/Memory",
"metrics_collected": {
"mem": {
"measurement": [
"mem_used_percent"
]
}
}
}
}
AWS信用号 然后在CloudWatch里创建告警,当内存使用超过90%持续5分钟就发邮件。这样,你的服务器还没彻底崩掉,你就已经收到预警,可以及时处理。
1.2 自定义告警策略
告警策略要像“防贼”一样细致。比如,数据库实例的连接数异常激增,可能是被攻击或者代码bug。设置连接数超过阈值的告警,避免系统被拖垮。另外,别只盯着CPU和内存,还要看磁盘I/O、网络流量等。想象一下,磁盘写满导致服务崩溃,那真是“哑巴吃黄连”。
二、备份与恢复:别等崩溃才哭
快照是EC2的救命稻草,但别只依赖单区域快照。去年有个朋友,因为区域故障导致数据丢失,哭晕在厕所。跨区域备份虽然贵点,但关键时刻能救命。建议每周全量快照,每天增量,像给数据上保险,买得贵点总比丢了强。
2.1 快照的正确打开方式
创建快照时,别直接手动点,用脚本自动化。比如用AWS CLI命令:
aws ec2 create-snapshot --volume-id vol-12345678 --description "Daily Backup"
设置定时任务,每天自动执行。同时,记得设置生命周期策略,比如保留最近7天的快照,避免存储空间爆满。曾经有个运维同事,因为没清理快照,一个月存储费多花了2000块,心疼得不行。
2.2 跨区域备份策略
单区域快照风险太大,万一整个区域出问题(比如2021年AWS美东故障),数据全完蛋。跨区域复制快照虽然多花点钱,但安全系数翻倍。配置方法是:在目标区域创建快照时,指定源区域的快照ID。这样即使一个区域挂了,还有另一个区域的备份。
三、安全加固:防火墙不是摆设
安全组配置要像选对象一样严格,只开放必要端口。SSH访问只允许特定IP,别用通配符,否则黑客可能直接“破门而入”。记得定期审查安全组规则,删掉那些“曾经有用但现在过时”的规则,别让漏洞藏在角落。
3.1 安全组的“最小权限”原则
比如,Web服务器只需要开放80和443端口给0.0.0.0/0,但SSH只允许你的办公IP。假设你的IP是192.168.1.1,规则就是:
SSH (22) | TCP | 22 | 192.168.1.1/32
千万别写成0.0.0.0/0,否则黑客的扫描机器人可能在几秒内找到你的实例。曾经有家公司因为安全组配置不当,被挖矿病毒入侵,服务器变成“矿机”,电费都快破产了。
3.2 SSH密钥管理
别用默认的密钥对,每次新实例都生成新的。同时,把私钥存在安全的地方,比如AWS Secrets Manager或者本地加密存储。切记:私钥绝不能上传到GitHub或者公共仓库!曾经有人不小心把私钥提交到代码库,结果实例被黑客控制,数据全没了。
四、性能优化:让EC2跑得飞快
选实例类型别只看价格,得看业务需求。如果你的数据库跑在t2.micro上,那可能就像让小马拉大车,CPU信用池耗尽就卡成PPT。T系列适合突发负载,但稳定业务还是用M5或C5更稳当。
4.1 实例类型选择
t2/t3系列是“信用制”实例,平时CPU使用率低时积累信用,高峰时消耗。但如果你的业务持续高负载,信用很快耗尽,CPU直接降频。比如数据库服务,建议用M5或R5系列,内存和CPU更稳定。而计算密集型任务,比如视频转码,C5系列更合适。
4.2 负载均衡与自动伸缩
单台EC2扛不住流量?上ELB加自动伸缩组。当CPU超过70%持续10分钟,自动扩容一台新实例;当负载下降,再缩容。这样既省钱又稳定。配置时注意设置合理的最小和最大实例数,避免资源浪费。比如电商大促期间,自动扩容到10台,平时3台,既满足需求又控制成本。
五、自动化运维:偷懒的艺术
运维的最高境界是“偷懒”,用自动化代替手动操作。比如用Lambda写个脚本,每天凌晨自动清理日志,或者用CloudFormation一键部署环境,省时省力还避免人为错误。
5.1 使用Lambda处理日常任务
写个Python脚本,定期删除旧日志文件:
import boto3
s3 = boto3.client('s3')
response = s3.list_objects_v2(Bucket='my-bucket')
for obj in response['Contents']:
if obj['LastModified'] < datetime.now() - timedelta(days=7):
s3.delete_object(Bucket='my-bucket', Key=obj['Key'])
设置CloudWatch Events规则,每天1点触发Lambda。从此再也不用手动删日志,系统自动清理,干净又高效。
5.2 CloudFormation模板管理
用CloudFormation写个模板,定义EC2、安全组、RDS等资源。下次部署直接apply模板,省去手动配置的麻烦。比如:
Resources:
MyEC2:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0c55b159cbfafe1f0
InstanceType: t2.micro
SecurityGroupIds:
- !Ref MySecurityGroup
这样团队协作时,每个人都能用同一份配置,避免“我这边能跑,你那边不行”的尴尬。而且模板可以版本控制,随时回滚,简直是运维神器。
结语:运维不是消防员
记住,日常运维的最高境界是“预防为主”。通过监控、备份、安全加固、性能优化和自动化,让EC2稳如老狗,自己也能睡个好觉。下次再有人问“怎么运维EC2”,你就可以自信地说:我用的是“懒人法则”,省心又高效!

