Amazon Linux 2 AMI 全面技术指南:从基础到实践

Amazon Linux 2 是 AWS 推出的一款免费、开源的 Linux 发行版,专为在 Amazon EC2 实例上运行而优化。作为 Amazon Linux 的继任者,它提供了长期支持(LTS)、增强的安全性、更好的性能以及与 AWS 服务的深度集成。本文将从 AMI 的基础概念出发,详细介绍 Amazon Linux 2 的特性、部署流程、最佳实践、与 AWS 服务的集成等内容,帮助用户全面掌握其使用与优化技巧。

目录#

  1. 什么是 Amazon Linux 2 AMI?
  2. 核心特性解析
  3. 快速上手:部署 Amazon Linux 2 实例
  4. 基础配置与管理
  5. 包管理与软件安装
  6. 安全最佳实践
  7. 性能优化技巧
  8. 与 AWS 服务的深度集成
  9. 自定义 AMI 创建与管理
  10. 常见问题与故障排除
  11. 参考资料

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-policyfirewalld,默认启用 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 控制台启动实例#

  1. 登录 AWS EC2 控制台,进入「实例」→「启动实例」。
  2. 在「选择 Amazon 系统镜像(AMI)」步骤,搜索 Amazon Linux 2,选择64 位 (x86)64 位 (ARM) 版本(根据实例架构选择)。
  3. 选择实例类型(如 t2.micro,符合免费套餐),点击「下一步:配置实例详细信息」。
  4. 配置网络、子网、IAM 角色等,点击「下一步:添加存储」(默认 8GB EBS 卷)。
  5. (可选)添加标签,点击「下一步:配置安全组」,确保安全组允许 SSH 访问(来源设置为本地 IP 或 0.0.0.0/0,生产环境需严格限制)。
  6. 点击「审核和启动」→「启动」,选择已创建的密钥对,确认后启动实例。

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-userroot 操作,创建自定义用户:

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_keys

4.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 服务#

  1. 安装 Apache:
    sudo yum install httpd -y
  2. 启动服务并设置开机自启:
    sudo systemctl start httpd
    sudo systemctl enable httpd  # 开机自启
    sudo systemctl status httpd  # 检查状态
  3. 验证:访问实例公网 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 网络带宽,需实例类型支持(如 t3c5 等):
    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 <服务名> 禁用无用服务(如 postfixcups)。

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  # 配置向导
  • 分析性能瓶颈:使用 tophtop(需安装)、iostatsysstat 包)等工具:
    sudo yum install htop sysstat -y
    iostat -x 5  # 每 5 秒输出磁盘 I/O 统计

8. 与 AWS 服务的深度集成#

8.1 AWS Systems Manager(SSM)#

通过 SSM Agent 实现无 SSH 密钥登录(需实例附加 SSM 权限角色):

  1. 安装 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
  2. 在 AWS 控制台「Systems Manager」→「会话管理器」中选择实例,点击「启动会话」即可登录。

8.2 CloudWatch Logs#

将系统日志发送至 CloudWatch Logs,便于集中管理:

  1. 安装 CloudWatch Logs Agent:
    sudo yum install amazon-cloudwatch-logs-agent -y
  2. 运行配置向导,指定需收集的日志文件(如 /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 步骤#

  1. 准备实例:在实例中安装软件、配置环境(如安装 Docker、配置 Nginx),确保清理敏感数据(如 /root/.ssh/authorized_keys/var/log/ 日志)。
  2. 停止实例(可选,非必须但推荐,避免数据不一致):
    sudo shutdown -h now  # 关闭实例
  3. 创建 AMI
    • AWS 控制台:进入「实例」→ 右键实例 →「创建镜像」,输入名称(如 MyAmazonLinux2-Custom)、描述,点击「创建镜像」。
    • AWS CLI
      aws ec2 create-image \
        --instance-id i-1234567890abcdef0 \
        --name "MyCustomAMI" \
        --description "Amazon Linux 2 with Docker and Nginx"
  4. 验证 AMI:在「AMIs」页面查看创建进度,状态为「可用」后即可使用。

9.3 使用自定义 AMI 启动实例#

启动实例时,在「选择 AMI」步骤搜索自定义 AMI 名称,选择后按常规流程部署。

10. 常见问题与故障排除#

10.1 SSH 连接失败#

  • 排查方向
    1. 安全组是否开放 22 端口,且来源 IP 正确。
    2. 密钥文件权限是否为 400chmod 400 key.pem)。
    3. 实例公网 IP 是否变化(未分配弹性 IP 时,重启实例会更换公网 IP)。
    4. 检查 /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 实例无法启动#

  • 排查方向
    1. IAM 权限不足(如无 ec2:RunInstances 权限)。
    2. 子网关联的路由表无互联网网关(导致无法下载 AMI)。
    3. EBS 卷空间不足或损坏(通过实例「状态检查」→「系统日志」查看错误)。

11. 参考资料#

通过本文,您已掌握 Amazon Linux 2 AMI 的部署、配置、优化及集成技巧。建议结合 AWS 官方文档持续学习,针对具体场景调整最佳实践。