You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Packer amazon-chroot构建报错:InvalidSnapshot.NotFound 求助

解决Packer amazon-chroot构建时的InvalidSnapshot.NotFound错误

问题场景

我需要在临时运行的Packer amazon-ebs实例上执行amazon-chroot构建,生成带有自定义根块设备分区方案的RHEL8 AMI。临时EC2实例挂载了两块启动磁盘:一块用于父RHEL8系统的根磁盘,另一块是空的次级磁盘,计划通过amazon-chroot加载自定义分区的RHEL8系统。

调试模式下已确认EC2实例上的磁盘符合预期,但启动amazon-chroot构建时出现报错:

==> amibuild.amazon-chroot.source-ami: Creating the root volume...
==> amibuild.amazon-chroot.source-ami: Error creating root volume: InvalidSnapshot.NotFound: Snapshot does not exist

已知配置细节:

  • 使用m7g.medium实例(带NVMe磁盘)
  • amazon-ebs和amazon-chroot使用同一源AMI(ami-0238411fb452f8275)
  • Packer尝试使用的快照snap-0221afb3433c26165确实存在于源AMI的块设备映射中

核心配置调整方案

1. 显式指定amazon-chroot的源快照

amazon-chroot构建器默认依赖源AMI的块设备映射获取快照,跨构建器共享实例场景下可能出现权限或快照可见性问题。直接指定已知存在的快照ID并绑定目标磁盘:

source "amazon-chroot" "custom-partition" {
  source_snapshot_id = "snap-0221afb3433c26165"
  device_name = "/dev/nvme1n1" # 对应实例上的次级NVMe磁盘
  partition_type = "gpt" # 匹配自定义分区方案的表类型
  region = "us-east-1"
  iam_instance_profile = "packer-build-role"
}

2. 隔离amazon-ebs与amazon-chroot的磁盘使用

在amazon-ebs配置中显式指定其使用的磁盘,避免与amazon-chroot的目标磁盘冲突:

source "amazon-ebs" "base-instance" {
  ami_id = "ami-0238411fb452f8275"
  instance_type = "m7g.medium"
  root_device_name = "/dev/nvme0n1" # 指定amazon-ebs使用第一块NVMe磁盘
  # 添加次级空磁盘供amazon-chroot使用
  launch_block_device_mappings {
    device_name = "/dev/nvme1n1"
    volume_size = 30
    volume_type = "gp3"
    delete_on_termination = true
  }
}

3. 配置chroot环境的分区与挂载逻辑

在amazon-chroot的provisioners中先完成自定义分区,再将快照内容复制到新分区:

build {
  sources = ["source.amazon-ebs.base-instance", "source.amazon-chroot.custom-partition"]
  
  provisioner "shell" {
    only = ["amazon-chroot.custom-partition"]
    inline = [
      # 对次级磁盘执行自定义分区
      "parted /dev/nvme1n1 mklabel gpt",
      "parted /dev/nvme1n1 mkpart primary xfs 1MiB 50GiB",
      "parted /dev/nvme1n1 mkpart primary xfs 50GiB 100%",
      # 创建文件系统
      "mkfs.xfs /dev/nvme1n1p1",
      "mkfs.xfs /dev/nvme1n1p2",
      # 挂载分区到chroot目录
      "mkdir -p /mnt/chroot/root /mnt/chroot/data",
      "mount /dev/nvme1n1p1 /mnt/chroot/root",
      "mount /dev/nvme1n1p2 /mnt/chroot/data",
      # 复制源系统内容到自定义分区
      "rsync -aAXv /mnt/source/ /mnt/chroot/root/",
      # 更新fstab匹配新分区
      "echo '/dev/nvme1n1p1 / xfs defaults 0 0' >> /mnt/chroot/root/etc/fstab",
      "echo '/dev/nvme1n1p2 /data xfs defaults 0 0' >> /mnt/chroot/root/etc/fstab"
    ]
  }
}

4. 验证IAM权限

确保Packer使用的IAM角色包含以下权限:

  • ec2:DescribeSnapshots
  • ec2:CreateVolume
  • ec2:AttachVolume
  • ec2:DescribeVolumes

内容的提问来源于stack exchange,提问作者adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:45:24