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:DescribeSnapshotsec2:CreateVolumeec2:AttachVolumeec2:DescribeVolumes
内容的提问来源于stack exchange,提问作者adam
相关产品推荐
相关产品推荐

