☰
devops-exercises 实战:从运行中的 EC2 实例创建自定义 AMI 并启动新实例
2026/9/30 2:06:22 网站建设 项目流程
  • 文档
  • 教程
  • DevOps
  • 运维

【免费下载链接】devops-exercises

Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions

项目地址:https://gitcode.com/GitHub_Trending/de/devops-exercises
点击查看免费下载

本指南基于 devops-exercises 仓库中 AWS 模块的create_ami练习,系统讲解如何在一台运行中的 EC2 实例上完成系统定制后,将其制作为自定义 AMI(Amazon Machine Image),并基于该 AMI 启动一台全新实例以验证定制内容是否完整保留。读者将掌握控制台与 CLI 两种创建 AMI 的完整路径,理解 AMI、EBS 快照与实例启动之间的底层关系,并能在真实环境中复现一套"定制 → 镜像化 → 克隆部署"的完整工作流。

练习目标与前置条件

该练习的原始定义见 练习文件,其要求与目标非常明确:

  • 前置条件:至少有一台正在运行的 EC2 实例(running EC2 instance)。
  • 目标 1:在实例的操作系统中做出一些修改,例如创建文件、修改文件、安装软件包等。
  • 目标 2:从这台运行中的 EC2 实例创建一份 AMI 镜像。
  • 目标 3:使用刚创建的自定义 AMI 启动一台新实例,并确认修改已被继承。

官方参考解法见 解法文件,其核心思路是"先定制、再镜像、后克隆"三步法。仓库的 AWS 模块 README 同时提醒:部分练习会产生真实费用、无法在免费套餐内完成,且官方解法基于 AWS 控制台,更推荐使用 IaC(如 Terraform、Pulumi)来完成——本指南将在控制台方案之外补充 CLI 与 IaC 思路。

AMI 是什么:理解镜像的底层构成

在动手之前,先明确 AMI 的概念。仓库的 AWS 模块 README 中专门设有 AMI 问答区,可以提炼出以下关键事实:

  • 定义:AMI(Amazon Machine Image)提供了启动一台实例所需的全部信息——包括操作系统、启动卷(由 EBS 快照承载)、启动权限与块设备映射等。
  • 来源分类:AMI 主要有三类——个人 AMI(自己创建)、AWS Marketplace AMI(他人发布,多为付费)、公共 AMI(AWS 官方提供,如练习中反复出现的 Amazon Linux 2)。
  • 区域性:AMI 是针对特定区域构建的,但可以通过"复制(Copy)"跨区域迁移。
  • 创建流程(高层视角):先启动实例 → 定制实例(安装软件包、修改 OS 配置)→ 停止实例(避免数据一致性问题)→ 创建 EBS 快照并构建 AMI → 用该 AMI 启动实例进行验证。

这一点与本练习的步骤完全吻合:练习的官方解法没有要求显式操作快照,但 AMI 在底层正是由 EBS 快照与元数据构成的——理解了这一点,就理解了为什么"修改操作系统内容"最终能被完整继承到新实例。

方案一:控制台操作(仓库官方解法)

按照 解法文件 的步骤,完整流程如下,每一步都补充了可操作的细节:

步骤 1:连接到你的 EC2 实例

选择 SSH、EC2 Instance Connect 控制台或 Session Manager 等任意方式登录实例。例如使用密钥对直连:

ssh -i your-key.pem ec2-user@<实例公网IP>

步骤 2:在操作系统中做出修改

这是整个练习的"定制"环节,目的是让这台实例与通用公共镜像产生差异。可以做任意组合的修改,例如:

# 创建文件 touch /home/ec2-user/custom-marker.txt echo "custom-ami-demo" >> /home/ec2-user/custom-marker.txt # 安装软件包(Amazon Linux 2 示例) sudo yum update -y sudo yum install -y htop # 修改配置文件 sudo bash -c 'echo "server_name custom-ami-demo;" > /etc/nginx/conf.d/demo.conf'

这些修改会被写入实例的 EBS 根卷,从而成为后续 AMI 的内容来源。

步骤 3:进入 EC2 服务控制台

在 AWS 控制台中切换到 EC2 服务,进入"Instances"(实例)列表,找到刚才完成定制的实例。

步骤 4:右键实例 → Image and templates → Create image

对目标实例点击右键,选择Image and templates子菜单下的Create image。控制台会弹出创建镜像对话框,这里需要关注的典型配置项包括:

  • Image name:镜像名称,建议包含用途与版本信息,例如my-custom-ami-v1;
  • Image description:镜像描述,可记录定制内容摘要;
  • No reboot 选项(控制台对应 "No reboot" 复选框):默认情况下 AWS 会先重启实例以确保文件系统一致性,勾选该选项可避免重启、加快镜像创建,但要求文件系统本身处于一致状态;
  • 块设备映射默认继承原实例的卷配置,通常无需改动。

步骤 5:填写名称并点击 Create image

填写好 Image name 后点击Create image。镜像创建不是即时的:AWS 会先为相关 EBS 卷创建快照,再基于快照构建 AMI。可以在左侧菜单AMIs页面查看进度,状态从pending变为available后即可使用。在Snapshots页面下可以看到伴随生成的 EBS 快照,这也印证了上一节"AMI 底层由 EBS 快照构成"的原理——相关快照操作可参考仓库中的 快照练习解法。

步骤 6:使用自定义 AMI 启动新实例

镜像状态变为available后,点击Launch instances from AMI(或进入 AMIs 列表选择镜像后启动)。在实例配置向导中,选择镜像(Choose an Amazon Machine Image)的步骤里选中My AMIs选项卡下的自定义镜像,其余步骤(实例类型、存储、安全组等)与普通启动一致。启动完成后,登录新实例验证定制内容:

ssh -i your-key.pem ec2-user@<新实例公网IP> cat /home/ec2-user/custom-marker.txt # 应输出 custom-ami-demo htop # 应已安装

如果输出符合预期,说明定制内容已通过 AMI 完整克隆到新实例,练习目标全部达成。

方案二:AWS CLI 自动化创建

若希望脚本化、可重复执行,可使用 AWS CLI。核心命令是aws ec2 create-image:

aws ec2 create-image \ --instance-id i-0abcdef1234567890 \ --name "my-custom-ami-v1" \ --description "AMI created from customized web instance" \ --no-reboot
  • --instance-id:要镜像化的源实例 ID;
  • --name:AMI 名称,需在区域内唯一;
  • --no-reboot:跳过重启(默认会重启以确保一致性,与控制的台选项对应);
  • 命令返回ImageId(形如ami-xxxx),可用于后续启动。

验证镜像创建结果:

aws ec2 describe-images --image-ids ami-xxxx --region us-east-1

使用该 AMI 启动新实例:

aws ec2 run-instances \ --image-id ami-xxxx \ --instance-type t2.micro \ --key-name your-key \ --security-group-ids sg-xxxx \ --subnet-id subnet-xxxx

将 CLI 封装为脚本后,即可把"定制实例 → 生成镜像 → 批量克隆"固化为团队内的标准发布流程。

结合仓库其他练习:AMI 在实战链路中的位置

AMI 创建并非孤立操作,仓库中多个 AWS 练习共同构成一条完整的实践链路,本练习是其中承上启下的一环:

  • 上游——如何获得一台可定制实例:启动 EC2 Web 实例练习 演示了如何用 Amazon Linux 2 启动实例,并通过 EC2 User Data 在首次启动时自动安装 httpd、写入首页内容。这正是本练习"运行中的实例"的常见来源;你也可以把 User Data 的引导脚本效果固化进 AMI,实现"一次引导、到处克隆"。
  • 中游——本练习:把定制结果固化为 AMI。
  • 下游——镜像的规模化使用:
    • Auto Scaling Groups 基础练习 展示了在创建启动模板(Launch Template)时选择 AMI(如 Amazon Linux 2),随后 ASG 依据该模板批量扩容——若将自定义 AMI 填入启动模板,则扩出的每台实例都自动携带你的定制内容,这正是 AMI 在生产中的核心价值;
    • Spot 实例练习 在发起 Spot 请求时同样需要指定 AMI,自定义 AMI 可以帮助 Spot 实例在数分钟内即可投入服务。

仓库的 AWS 模块 README 还建议优先采用 IaC(如 Terraform、Pulumi)复现这些练习,你可以在 new_vpc 练习 与 subnets 练习 中看到仓库提供的 Terraform/Pulumi 配套文件,作为把本练习升级为基础设施即代码的起点。

关键原理与注意事项

  • 数据一致性:官方解法直接对运行中的实例创建镜像。AWS 的默认行为是临时重启实例以确保文件系统一致(对应--no-reboot选项的反面)。对于写入中的数据库、日志等场景,建议先停止实例(或使用--no-reboot并确保应用处于一致状态),这也是 AWS 模块 README 中"停止实例以避免数据完整性问题的"的原因所在。
  • 区域隔离:AMI 只存在于创建它的区域,跨区域使用必须执行"复制镜像"操作(aws ec2 copy-image),复制后在新区域获得新的ImageId。
  • 费用提示:镜像由 EBS 快照支撑,快照与存储会持续产生费用;仓库 README 也提示部分练习无法在免费套餐内完成。练习完成后,可删除不再使用的 AMI 与快照(删除 AMI 后其底层快照不会自动删除,需手动清理)以避免持续计费。
  • 验证闭环:镜像的价值必须通过"用镜像启动新实例并验证"来确认——这正是本练习目标 3 的意义所在,切勿省略。

小结

本练习用最小的资源消耗,完整覆盖了 AWS 镜像化的核心链路:定制一台实例 → 基于其 EBS 卷生成 AMI → 用 AMI 启动克隆实例并验证。配合仓库中 启动实例练习、快照练习 与 Auto Scaling 练习 串读,你可以进一步理解 AMI 在弹性伸缩、批量部署与跨区域容灾中的生产价值,并把同样的镜像化能力迁移到 Terraform、Pulumi 等 IaC 工作流中。

  • 文档
  • 教程
  • DevOps
  • 运维

【免费下载链接】devops-exercises

Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions

项目地址:https://gitcode.com/GitHub_Trending/de/devops-exercises
点击查看免费下载
上一篇:3个颠覆认知的技术突破:让原神玩家彻底摆脱重复劳动
下一篇:RePKG:Wallpaper Engine资源处理的全流程解决方案

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询