已知EC2控制台可创建,如何用AWS CLI/API从EBS快照生成AMI?
从EBS快照通过CLI创建AMI的方法
别担心,完全可以实现!你找错命令啦——aws ec2 copy-image是用来复制已有的AMI的,而从EBS快照创建AMI得用aws ec2 register-image命令,这才是正确的姿势。
核心命令示例
你需要通过指定块设备映射来关联EBS快照,下面是一个基础的命令模板:
aws ec2 register-image \ --name "自定义AMI名称" \ --description "从EBS快照创建的CLI生成AMI" \ --architecture x86_64 \ # 或者arm64,和快照对应的实例架构一致 --root-device-name "/dev/sda1" \ # 根设备名,根据原实例调整,比如Amazon Linux常用/dev/xvda --block-device-mappings '[{"DeviceName": "/dev/sda1", "Ebs": {"SnapshotId": "snap-你的快照ID"}}]'
参数解释
--name:给你的AMI起个好记的名字,必填项--description:可选,添加一些描述信息方便后续识别--architecture:必须和快照对应的源实例架构匹配,否则会创建失败--root-device-name:根卷的设备名称,你可以通过aws ec2 describe-snapshots --snapshot-id snap-xxx查看快照关联的原实例设备信息,或者回忆原实例的根设备名--block-device-mappings:这是核心参数,用来指定每个EBS卷对应的快照。如果你的源实例有多个EBS卷,只需要在数组里添加更多条目即可,比如:'[{"DeviceName": "/dev/sda1", "Ebs": {"SnapshotId": "snap-xxxx"}}, {"DeviceName": "/dev/sdb", "Ebs": {"SnapshotId": "snap-yyyy"}}]'
注意事项
- 确保你的AWS CLI配置了正确的权限(至少需要
ec2:RegisterImage权限) - 快照必须和你要创建AMI的区域一致,如果需要跨区域,先使用
aws ec2 copy-snapshot把快照复制到目标区域,再执行注册命令 - 如果源实例使用了实例存储卷(非EBS),这种情况无法仅通过EBS快照创建完整AMI,因为实例存储的数据不会存在快照里
内容的提问来源于stack exchange,提问作者Sako
相关产品推荐
相关产品推荐

