6. 使用 Terraform 从自定义 AMI 启动 EC2 实例

发布: (2026年2月7日 GMT+8 13:53)
5 分钟阅读
原文: Dev.to

Source: Dev.to

要为您进行翻译,我需要您提供要翻译的具体文本内容(除代码块和 URL 之外)。请粘贴文章的正文部分,我会按照要求保留源链接、格式和技术术语,将其翻译成简体中文。

实验信息

Nautilus DevOps 团队需要从现有的 EC2 实例创建 AMI,以用于备份和扩展目的。

  • 现有 EC2 实例名称: devops-ec2
  • 期望的 AMI 名称: devops-ec2-ami
  • 新 EC2 实例名称: devops-ec2-new(必须使用该 AMI 启动)

更新 main.tf 文件(不要创建单独的 .tf 文件)以:

  1. 从现有实例创建 AMI。
  2. 使用该 AMI 启动新的 EC2 实例。

创建一个 outputs.tf 文件,输出:

  • KKE_ami_id – 创建的 AMI 的 ID。
  • KKE_new_instance_id – 新 EC2 实例的 ID。

实验解决方案

main.tf

# Step 1: Read the existing EC2 instance
data "aws_instance" "existing_ec2" {
  filter {
    name   = "tag:Name"
    values = ["devops-ec2"]
  }
}

# Step 2: Create AMI from existing EC2
resource "aws_ami_from_instance" "devops_ami" {
  name               = "devops-ec2-ami"
  source_instance_id = data.aws_instance.existing_ec2.id
}

# Step 3: Launch a new EC2 from the AMI
resource "aws_instance" "devops_ec2_new" {
  ami           = aws_ami_from_instance.devops_ami.id
  instance_type = "t2.micro"

  tags = {
    Name = "devops-ec2-new"
  }
}

outputs.tf

output "KKE_ami_id" {
  value = aws_ami_from_instance.devops_ami.id
}

output "KKE_new_instance_id" {
  value = aws_instance.devops_ec2_new.id
}

Terraform 命令(必需)

按顺序运行以下命令:

terraform init
terraform validate
terraform apply
# Type "yes" when prompted

Terraform 应用输出

Source:

简单的逐步解释(原因与过程)

什么是 AMI?

AMI(Amazon Machine Image)是 快照 + 蓝图,用于描述一个 EC2 实例。它包括:

  • 操作系统
  • 已安装的软件
  • 配置
  • 磁盘数据

为什么要创建 AMI?

  • 备份 EC2 实例
  • 快速创建相同的服务器
  • 高效实现水平扩展
  • 实现灾难恢复

Terraform 代码的作用

  1. 查找已有的 EC2

    data "aws_instance" "existing_ec2" { … }

    Terraform 读取 Name 标签为 devops-ec2 的实例。此步骤不会创建新资源。

  2. 从该 EC2 创建 AMI

    resource "aws_ami_from_instance" "devops_ami" { … }

    Terraform 告诉 AWS 冻结运行中实例的磁盘状态并生成 AMI。此过程可能需要几分钟。

  3. 使用 AMI 启动新 EC2

    resource "aws_instance" "devops_ec2_new" { … }

    Terraform 基于该 AMI 创建全新的实例,得到与原实例相同的操作系统、软件和配置。

Terraform 如何确定正确的执行顺序

Terraform 会构建依赖图:

existing EC2 → AMI → new EC2

因为 AMI 资源依赖于已有实例,而新 EC2 又依赖于 AMI,Terraform 会自动按正确的顺序执行这些步骤。

terraform apply 时会发生什么

  1. Terraform 读取已有的 EC2。
  2. AWS 创建 AMI。
  3. Terraform 等待 AMI 可用。
  4. AWS 使用该 AMI 启动新 EC2。
  5. Terraform 将所有信息记录到状态文件中。
  6. 定义的输出会显示 AMI ID 和新实例 ID。

为什么输出很重要

  • 确认 AMI 已成功创建。
  • 确认新 EC2 实例已启动。
  • KodeKloud(以及其他评分系统)会使用这些输出进行验证,省去手动检查 AWS 控制台的步骤。

常见错误需避免

  • 硬编码实例 ID。
  • 创建额外的 .tf 文件(实验要求只有一个 main.tf)。
  • 在 AMI 尚未准备好时就启动新 EC2。
  • 忘记定义必需的输出。
  • 使用了错误的输出变量名(如 KKE_ami_idKKE_new_instance_id)。

资源与后续步骤

致谢
所有实验均来自:KodeKloud

0 浏览
Back to Blog

相关文章

阅读更多 »

14. 使用 Terraform 配置 IAM 用户

实验室信息:Nautilus DevOps 团队正在尝试 Terraform provisioners。你的任务是创建一个 IAM 用户并使用 local‑exec provisioner 来 l...

AI会扼杀OSS之星吗?

随着 AI 驱动的开发加速,开源软件面临一个令人不安的悖论:使用量在上升,而参与度、可持续性和社区经济……