亚麻云之轻云直上EC2
本文作者: 封磊
Eclicktech SA | AWS Community Builder DevTool | AWS UGL | 亚马逊云科技云博主
阿里云&InfoQ&CSDN签约作者
前言
在上一篇《亚麻云之平步"轻"云》中,我们体验了Amazon Lightsail的简单易用。当你的应用需要更多灵活性和控制权时,就是时候"轻云直上",进入Amazon EC2的世界了。EC2是AWS的核心计算服务,掌握它是云计算进阶的必经之路。
什么是Amazon EC2?
Amazon EC2(Elastic Compute Cloud)是AWS提供的可扩展计算服务,让你可以在云中运行虚拟服务器。与Lightsail相比,EC2提供了更多的配置选项和控制权。
从Lightsail到EC2的主要区别
特性 | Lightsail | EC2 |
---|---|---|
易用性 | 简单,预配置 | 灵活,需要配置 |
实例类型 | 固定套餐 | 丰富的实例类型 |
网络 | 简化网络 | 完全可控的VPC |
存储 | 固定SSD | 多种存储类型 |
定价 | 固定月费 | 按需付费 |
扩展性 | 有限 | 无限扩展 |
从Lightsail迁移到EC2
方法一:快照迁移(推荐)[也可控制台操作]
最简单的迁移方式是使用Lightsail的快照导出功能:
# 1. 创建Lightsail快照
aws lightsail create-instance-snapshot \--instance-name my-lightsail-instance \--instance-snapshot-name migration-snapshot# 2. 导出快照到EC2
aws lightsail export-snapshot \--source-snapshot-name migration-snapshot# 3. 在EC2中使用导出的AMI启动实例
方法二:手动迁移
对于简单应用,也可以手动迁移:
- 备份数据和配置文件
- 在EC2中创建新实例
- 安装相同的软件
- 恢复数据和配置
EC2基础概念
实例类型选择
EC2提供多种实例类型,适合不同的工作负载:
通用型(推荐入门)
t3.micro
:1 vCPU, 1GB RAM - 免费套餐t3.small
:1 vCPU, 2GB RAM - 轻量应用t3.medium
:2 vCPU, 4GB RAM - 中等负载
计算优化型
c5.large
:2 vCPU, 4GB RAM - CPU密集型应用
内存优化型
r5.large
:2 vCPU, 16GB RAM - 内存密集型应用
网络基础
VPC(虚拟私有云)
- 你的私有网络空间
- 可以创建子网、配置路由表
- 比Lightsail的网络更灵活
安全组
- 虚拟防火墙
- 控制入站和出站流量
- 可以引用其他安全组
存储选项
EBS(弹性块存储)
gp3
:通用SSD,性价比高【默认使用,若默认选择gp2建议换为gp3】io2
:高性能SSD,适合数据库st1
:吞吐优化HDD,适合大文件,做存储使用
创建你的第一个EC2实例
使用控制台创建【以俄勒冈为例】
控制台链接:https://us-west-2.console.aws.amazon.com/ec2/home?region=us-west-2#Home:
- 选择AMI:Amazon Machine Image(操作系统镜像)
- Amazon Linux 2023(推荐)
- Ubuntu Server
- Windows Server
- 选择实例类型:建议从
t3.micro
开始 - 配置网络:
- 选择VPC和子网
- 启用公有IP(如果需要从互联网访问)
- 配置存储:
- 根卷大小(默认8GB)
- 存储类型(推荐gp3)
- 配置安全组:
- SSH (22端口)
- HTTP (80端口)
- HTTPS (443端口)
- 选择密钥对:用于SSH连接
使用命令行创建
# 创建密钥对
aws ec2 create-key-pair \--key-name my-ec2-key \--query 'KeyMaterial' \--output text > my-ec2-key.pemchmod 400 my-ec2-key.pem# 创建安全组
aws ec2 create-security-group \--group-name my-web-sg \--description "Web server security group"# 添加规则
aws ec2 authorize-security-group-ingress \--group-name my-web-sg \--protocol tcp \--port 22 \--cidr 0.0.0.0/0aws ec2 authorize-security-group-ingress \--group-name my-web-sg \--protocol tcp \--port 80 \--cidr 0.0.0.0/0# 启动实例
aws ec2 run-instances \--image-id ami-0abcdef1234567890 \--count 1 \--instance-type t3.micro \--key-name my-ec2-key \--security-groups my-web-sg
实战案例:在EC2上部署WordPress
连接到实例
# 使用SSH连接
ssh -i my-ec2-key.pem ec2-user@your-instance-ip
安装LAMP环境
# 更新系统
sudo yum update -y# 安装Apache、MySQL、PHP
sudo yum install -y httpd mysql php php-mysql# 启动服务
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl start mysqld
sudo systemctl enable mysqld
安装WordPress
# 下载WordPress
cd /var/www/html
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzf latest.tar.gz
sudo mv wordpress/* .
sudo rm -rf wordpress latest.tar.gz# 设置权限
sudo chown -R apache:apache /var/www/html
sudo chmod -R 755 /var/www/html
配置数据库
# 登录MySQL
sudo mysql# 创建数据库和用户
CREATE DATABASE wordpress;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
配置WordPress
# 复制配置文件
sudo cp wp-config-sample.php wp-config.php# 编辑配置文件
sudo nano wp-config.php
在配置文件中修改数据库信息:
define('DB_NAME', 'wordpress');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'localhost');
现在访问你的实例IP地址,就可以看到WordPress安装页面了!
EC2的基本管理
实例生命周期
# 查看实例状态
aws ec2 describe-instances --instance-ids i-1234567890abcdef0# 启动实例
aws ec2 start-instances --instance-ids i-1234567890abcdef0# 停止实例
aws ec2 stop-instances --instance-ids i-1234567890abcdef0# 重启实例
aws ec2 reboot-instances --instance-ids i-1234567890abcdef0# 终止实例
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0
创建快照备份
# 创建EBS快照
aws ec2 create-snapshot \--volume-id vol-1234567890abcdef0 \--description "My backup snapshot"# 查看快照
aws ec2 describe-snapshots --owner-ids self
监控实例
# 查看CPU使用率
aws cloudwatch get-metric-statistics \--namespace AWS/EC2 \--metric-name CPUUtilization \--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \--start-time 2023-01-01T00:00:00Z \--end-time 2023-01-01T23:59:59Z \--period 3600 \--statistics Average
成本管理基础
定价模式
按需实例
- 按小时计费
- 无长期承诺
- 适合测试和开发
预留实例
- 1年或3年承诺
- 最多节省75%成本
- 适合稳定的生产环境
Spot实例
- 利用空闲容量
- 最多节省90%成本
- 可能被中断,适合容错应用
成本优化建议
- 选择合适的实例类型:从小开始,根据需要扩展
- 使用预留实例:对于长期运行的工作负载
- 定期审查:删除不需要的资源
- 使用标签:便于成本分配和管理
# 为实例添加标签
aws ec2 create-tags \--resources i-1234567890abcdef0 \--tags Key=Environment,Value=Production Key=Project,Value=WebApp
安全基础
基本安全实践
- 使用密钥对:禁用密码登录
- 配置安全组:只开放必要端口
- 定期更新:保持系统和软件最新
- 使用IAM角色:避免在实例中存储访问密钥
系统安全配置
# 更新系统
sudo yum update -y# 配置防火墙
sudo systemctl enable firewalld
sudo systemctl start firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload# 禁用root登录
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
常见问题解决
无法连接实例
- 检查安全组是否允许SSH(22端口)
- 确认使用正确的密钥文件
- 检查实例是否在运行状态
# 检查实例状态
aws ec2 describe-instances --instance-ids i-1234567890abcdef0 \--query 'Reservations[*].Instances[*].State.Name'
性能问题
- 检查CPU使用率
- 监控内存使用
- 考虑升级实例类型
# 修改实例类型(需要先停止实例)
aws ec2 stop-instances --instance-ids i-1234567890abcdef0
aws ec2 modify-instance-attribute \--instance-id i-1234567890abcdef0 \--instance-type Value=t3.medium
aws ec2 start-instances --instance-ids i-1234567890abcdef0
下一步学习方向
掌握了EC2基础后,你可以继续学习:
- 负载均衡器:分发流量到多个实例
- Auto Scaling:自动调整实例数量
- RDS数据库:托管数据库服务
- CloudWatch:详细监控和告警
- VPC高级功能:NAT网关、VPN连接
结语
从Lightsail到EC2,你已经迈出了云计算进阶的重要一步。EC2虽然比Lightsail复杂一些,但它为你提供了更多的灵活性和控制权。
记住几个关键点:
- 从小实例开始,根据需要扩展
- 重视安全配置,定期更新系统
- 合理使用标签,便于管理和成本控制
- 定期备份重要数据
EC2是AWS的核心服务,掌握它将为你打开更广阔的云计算世界。继续实践,不断学习,你将很快成为云计算的行家!
准备好探索EC2的强大功能了吗?开始创建你的第一个EC2实例,体验真正的云计算灵活性!