Amazon Linux 2 AMI 全面技术指南:从基础到实践
Amazon Linux 2 是 AWS 推出的一款免费、开源的 Linux 发行版,专为在 Amazon EC2 实例上运行而优化。作为 Amazon Linux 的继任者,它提供了长期支持(LTS)、增强的安全性、更好的性能以及与 AWS 服务的深度集成。本文将从 AMI 的基础概念出发,详细介绍 Amazon Linux 2 的特性、部署流程、最佳实践、与 AWS 服务的集成等内容,帮助用户全面掌握其使用与优化技巧。
目录#
- 什么是 Amazon Linux 2 AMI?
- 核心特性解析
- 快速上手:部署 Amazon Linux 2 实例
- 基础配置与管理
- 包管理与软件安装
- 安全最佳实践
- 性能优化技巧
- 与 AWS 服务的深度集成
- 自定义 AMI 创建与管理
- 常见问题与故障排除
- 参考资料
1. 什么是 Amazon Linux 2 AMI?#
1.1 AMI 基础概念#
AMI(Amazon Machine Image,亚马逊机器镜像)是 AWS 中用于创建 EC2 实例的模板,包含了操作系统、预安装软件、配置设置等信息。用户可基于 AMI 快速启动标准化的实例,避免重复配置。
1.2 Amazon Linux 2 AMI 的定位#
Amazon Linux 2 AMI 是 AWS 官方维护的 AMI,基于 Linux 内核(长期支持版本 5.15+),专为 EC2 优化,具备以下特点:
- AWS 原生集成:预装 SSM Agent、CloudWatch Logs 等工具,无缝对接 AWS 服务。
- 长期支持:提供 5 年安全更新(截至 2025 年 6 月),适合生产环境。
- 轻量级与高性能:精简系统组件,优化资源占用,提升实例运行效率。
2. 核心特性解析#
2.1 系统架构与兼容性#
- 内核版本:默认搭载 Linux 内核 5.15(可通过
uname -r查看),支持最新硬件与虚拟化技术。 - 初始化系统:采用
systemd(替代传统 SysVinit),提供更高效的服务管理与进程控制。 - 兼容性:兼容 RHEL/CentOS 7 生态,可直接使用多数 RPM 包与工具。
2.2 安全与合规#
- 自动安全更新:通过
yum提供定期安全补丁,支持amazon-linux-extras扩展库。 - 内置安全工具:预装
selinux-policy、firewalld,默认启用 SELinux(Permissive 模式)。 - 合规认证:符合 GDPR、HIPAA 等标准,适合敏感数据场景。
2.3 开发与运维工具#
- 包管理:基于
yum(Yellowdog Updater Modified),支持 RPM 包管理,提供amazon-linux-extras命令扩展软件源。 - 云原生工具:预装 AWS CLI、SSM Agent、CloudWatch Logs Agent,简化 AWS 服务操作。
3. 快速上手:部署 Amazon Linux 2 实例#
3.1 前提条件#
- AWS 账户及访问权限(需具备
ec2:RunInstances等权限)。 - 已创建 EC2 密钥对(用于 SSH 登录)。
- 配置好 VPC、子网、安全组(至少开放 SSH 端口 22)。
3.2 通过 AWS 控制台启动实例#
- 登录 AWS EC2 控制台,进入「实例」→「启动实例」。
- 在「选择 Amazon 系统镜像(AMI)」步骤,搜索
Amazon Linux 2,选择64 位 (x86) 或 64 位 (ARM) 版本(根据实例架构选择)。 - 选择实例类型(如
t2.micro,符合免费套餐),点击「下一步:配置实例详细信息」。 - 配置网络、子网、IAM 角色等,点击「下一步:添加存储」(默认 8GB EBS 卷)。
- (可选)添加标签,点击「下一步:配置安全组」,确保安全组允许 SSH 访问(来源设置为本地 IP 或
0.0.0.0/0,生产环境需严格限制)。 - 点击「审核和启动」→「启动」,选择已创建的密钥对,确认后启动实例。
3.3 通过 AWS CLI 启动实例#
需先安装并配置 AWS CLI,执行以下命令(替换占位符):
aws ec2 run-instances \
--image-id ami-0c55b159cbfafe1f0 # 示例 AMI ID(us-east-1 区域),需替换为目标区域 ID \
--instance-type t2.micro \
--key-name MyKeyPair \ # 密钥对名称
--security-group-ids sg-12345678 \ # 安全组 ID
--subnet-id subnet-12345678 \ # 子网 ID
--count 1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=AmazonLinux2-Test}]'注意:AMI ID 因区域而异,可通过以下命令查询目标区域的最新 Amazon Linux 2 AMI ID:
aws ec2 describe-images \ --owners amazon \ --filters "Name=name,Values=amzn2-ami-hvm-*-x86_64-gp2" \ --query "Images | sort_by(@, &CreationDate) | [-1].ImageId" \ --output text
4. 基础配置与管理#
4.1 连接实例(SSH)#
通过密钥对登录实例(替换 公网IP 与 密钥路径):
ssh -i /path/to/MyKeyPair.pem ec2-user@<实例公网IP>权限注意:密钥文件需设置权限
chmod 400 /path/to/MyKeyPair.pem,否则 SSH 会拒绝连接。
4.2 初始系统配置#
4.2.1 更新系统#
首次登录后,建议立即更新系统包:
sudo yum update -y # 更新所有包(-y 自动确认)
sudo reboot # 若内核更新,需重启生效4.2.2 创建普通用户并授权#
避免直接使用 ec2-user 或 root 操作,创建自定义用户:
sudo adduser appuser # 创建用户
sudo passwd appuser # 设置密码(可选,建议仅用 SSH 密钥)
sudo usermod -aG wheel appuser # 添加 sudo 权限配置 SSH 密钥登录(将本地公钥复制到实例):
sudo su - appuser
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "本地公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys4.2.3 防火墙配置#
默认启用 firewalld,仅开放 SSH 端口,可按需添加规则(如开放 HTTP/HTTPS):
sudo firewall-cmd --add-service=http --permanent # 永久开放 HTTP(80 端口)
sudo firewall-cmd --add-service=https --permanent # 永久开放 HTTPS(443 端口)
sudo firewall-cmd --reload # 重载配置5. 包管理与软件安装#
5.1 yum 基础命令#
Amazon Linux 2 使用 yum 管理 RPM 包,常用命令:
| 功能 | 命令 |
|---|---|
| 搜索包 | sudo yum search <包名> |
| 安装包 | sudo yum install <包名> -y |
| 卸载包 | sudo yum remove <包名> -y |
| 查看已安装包 | sudo yum list installed <包名> |
| 查看包信息 | sudo yum info <包名> |
| 清理缓存 | sudo yum clean all |
5.2 使用 amazon-linux-extras 扩展软件源#
Amazon Linux 2 提供 amazon-linux-extras 命令,用于安装额外软件(如 Docker、Node.js、PHP 等):
amazon-linux-extras list # 列出所有可用扩展
sudo amazon-linux-extras install docker -y # 安装 Docker
sudo systemctl start docker && sudo systemctl enable docker # 启动并设置开机自启5.3 示例:安装并配置 Apache 服务#
- 安装 Apache:
sudo yum install httpd -y - 启动服务并设置开机自启:
sudo systemctl start httpd sudo systemctl enable httpd # 开机自启 sudo systemctl status httpd # 检查状态 - 验证:访问实例公网 IP,若看到 Apache 测试页面,说明配置成功(需确保安全组开放 80 端口)。
6. 安全最佳实践#
6.1 系统安全#
- 定期更新:配置自动更新(通过
yum-cron):sudo yum install yum-cron -y sudo systemctl enable --now yum-cron # 启动并设置自动运行 - 禁用 root SSH 登录:编辑
/etc/ssh/sshd_config,设置PermitRootLogin no,重启sshd:sudo systemctl restart sshd - 限制 SSH 访问源:在安全组中仅允许特定 IP 访问 22 端口(避免
0.0.0.0/0)。
6.2 权限与访问控制#
- 使用 IAM 角色:为实例附加最小权限 IAM 角色(而非长期访问密钥),例如:
# 通过 AWS CLI 为实例附加角色(需实例 ID 与角色 ARN) aws ec2 associate-iam-instance-profile \ --instance-id i-1234567890abcdef0 \ --iam-instance-profile Name=MyInstanceRole - 文件权限加固:敏感文件设置
chmod 600(如/etc/ssh/sshd_config),目录设置chmod 700(如~/.ssh)。
6.3 数据安全#
- 加密 EBS 卷:创建实例时启用 EBS 加密,或通过 AWS Console 加密现有卷。
- 启用实例存储加密:对于临时存储(Instance Store),通过
dm-crypt手动加密。 - 日志审计:使用
auditd监控文件访问(如/etc/passwd、/var/log/secure):sudo yum install auditd -y sudo systemctl start auditd && sudo systemctl enable auditd
7. 性能优化技巧#
7.1 实例与存储优化#
- 选择 EBS-optimized 实例:启用 EBS 优化(部分实例默认开启),提升磁盘 I/O 性能:
# 检查是否启用 EBS 优化(输出为 1 表示启用) cat /sys/block/xvda/queue/scheduler - 使用增强型网络(ENA):支持 100Gbps 网络带宽,需实例类型支持(如
t3、c5等):modinfo ena # 检查 ENA 驱动是否加载 - 选择合适的 EBS 卷类型:生产环境推荐
gp3(通用型)或io2(高性能),避免gp2性能波动。
7.2 系统资源调优#
- 调整内核参数:编辑
/etc/sysctl.conf,优化网络与内存管理(需重启或sysctl -p生效):net.core.somaxconn = 1024 # 提高 TCP 连接队列上限 vm.swappiness = 10 # 减少 Swap 使用,优先使用内存 - 关闭不必要服务:通过
systemctl disable <服务名>禁用无用服务(如postfix、cups)。
7.3 监控与调优#
- 启用 CloudWatch 监控:通过
amazon-cloudwatch-agent收集系统指标(CPU、内存、磁盘 I/O):sudo yum install amazon-cloudwatch-agent -y sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard # 配置向导 - 分析性能瓶颈:使用
top、htop(需安装)、iostat(sysstat包)等工具:sudo yum install htop sysstat -y iostat -x 5 # 每 5 秒输出磁盘 I/O 统计
8. 与 AWS 服务的深度集成#
8.1 AWS Systems Manager(SSM)#
通过 SSM Agent 实现无 SSH 密钥登录(需实例附加 SSM 权限角色):
- 安装 SSM Agent(Amazon Linux 2 已预装,可更新至最新版):
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm sudo systemctl restart amazon-ssm-agent - 在 AWS 控制台「Systems Manager」→「会话管理器」中选择实例,点击「启动会话」即可登录。
8.2 CloudWatch Logs#
将系统日志发送至 CloudWatch Logs,便于集中管理:
- 安装 CloudWatch Logs Agent:
sudo yum install amazon-cloudwatch-logs-agent -y - 运行配置向导,指定需收集的日志文件(如
/var/log/messages、/var/log/secure):sudo /opt/aws/amazon-cloudwatch-logs-agent/bin/amazon-cloudwatch-logs-agent-setup.py
8.3 IAM 角色与服务访问#
通过 IAM 角色授予实例访问 AWS 服务的权限(无需硬编码密钥):
- 示例:允许实例读取 S3 桶,创建 IAM 角色并附加策略
AmazonS3ReadOnlyAccess,然后关联至实例。 - 在实例中通过 AWS CLI 访问 S3(无需配置
aws configure):aws s3 ls s3://my-bucket # 直接列出桶内容
9. 自定义 AMI 创建与管理#
9.1 场景#
当需要批量部署相同配置的实例(如预装软件、自定义设置)时,可基于现有实例创建自定义 AMI。
9.2 创建自定义 AMI 步骤#
- 准备实例:在实例中安装软件、配置环境(如安装 Docker、配置 Nginx),确保清理敏感数据(如
/root/.ssh/authorized_keys、/var/log/日志)。 - 停止实例(可选,非必须但推荐,避免数据不一致):
sudo shutdown -h now # 关闭实例 - 创建 AMI:
- AWS 控制台:进入「实例」→ 右键实例 →「创建镜像」,输入名称(如
MyAmazonLinux2-Custom)、描述,点击「创建镜像」。 - AWS CLI:
aws ec2 create-image \ --instance-id i-1234567890abcdef0 \ --name "MyCustomAMI" \ --description "Amazon Linux 2 with Docker and Nginx"
- AWS 控制台:进入「实例」→ 右键实例 →「创建镜像」,输入名称(如
- 验证 AMI:在「AMIs」页面查看创建进度,状态为「可用」后即可使用。
9.3 使用自定义 AMI 启动实例#
启动实例时,在「选择 AMI」步骤搜索自定义 AMI 名称,选择后按常规流程部署。
10. 常见问题与故障排除#
10.1 SSH 连接失败#
- 排查方向:
- 安全组是否开放 22 端口,且来源 IP 正确。
- 密钥文件权限是否为
400(chmod 400 key.pem)。 - 实例公网 IP 是否变化(未分配弹性 IP 时,重启实例会更换公网 IP)。
- 检查
/var/log/secure日志(需通过 SSM 或控制台串行控制台访问):journalctl -u sshd # 查看 SSH 服务日志
10.2 包安装失败#
- 错误示例:
No package <包名> available- 排查:是否启用对应软件源,通过
amazon-linux-extras安装(如 Node.js):sudo amazon-linux-extras install nodejs16 -y
- 排查:是否启用对应软件源,通过
10.3 实例无法启动#
- 排查方向:
- IAM 权限不足(如无
ec2:RunInstances权限)。 - 子网关联的路由表无互联网网关(导致无法下载 AMI)。
- EBS 卷空间不足或损坏(通过实例「状态检查」→「系统日志」查看错误)。
- IAM 权限不足(如无
11. 参考资料#
- Amazon Linux 2 官方文档
- AWS EC2 AMI 文档
- Amazon Linux 2 安全最佳实践
- AWS CLI 参考 - 启动实例
- Amazon Linux 2 镜像查找工具(获取各区域 AMI ID)
通过本文,您已掌握 Amazon Linux 2 AMI 的部署、配置、优化及集成技巧。建议结合 AWS 官方文档持续学习,针对具体场景调整最佳实践。