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

无需手动配置BlockDeviceMappings,通过实例创建AMI的方法

无需手动配置BlockDeviceMappings生成包含全部存储的AMI

当然可以不用手动配置所有BlockDeviceMappings参数,你应该使用Boto3的create_image方法,而非register_image。这个方法和AWS控制台的操作逻辑完全一致——只需指定目标实例,就能自动生成包含该实例所有挂载存储的AMI,无需手动处理快照、卷参数等细节。

核心区别

  • register_image:需要手动组合快照、定义块设备映射,适合从零构建AMI的场景;
  • create_image:直接基于运行中(或已停止)的实例创建AMI,AWS会自动为实例上的每个卷创建快照,并生成对应的BlockDeviceMappings,完全复刻实例的存储配置。

示例代码

import boto3

ec2 = boto3.client('ec2')

# 直接基于实例创建AMI,自动包含所有挂载的存储
response = ec2.create_image(
    InstanceId='i-1234567890abcdef0',  # 替换为你的目标实例ID
    Name='Auto-Generated AMI from Instance',
    Description='AMI created automatically including all attached volumes',
    NoReboot=True  # 可选:创建AMI时是否重启实例,按需设置
)

print(f"AMI创建成功,ID: {response['ImageId']}")

自定义部分参数(可选)

如果需要修改个别卷的配置(比如调整卷类型、大小),只需在BlockDeviceMappings中指定对应的设备即可,未指定的设备会自动沿用实例的原始配置:

response = ec2.create_image(
    InstanceId='i-1234567890abcdef0',
    Name='Customized AMI from Instance',
    Description='AMI with modified root volume type',
    BlockDeviceMappings=[
        {
            'DeviceName': '/dev/sda1',
            'Ebs': {
                'VolumeType': 'gp3',  # 仅修改根卷类型,其他参数自动沿用
                'DeleteOnTermination': True
            }
        }
    ],
    NoReboot=True
)

这样既满足了自动包含所有存储的需求,也保留了灵活调整个别参数的能力,比手动构建BlockDeviceMappings高效得多。

内容的提问来源于stack exchange,提问作者Tommy B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:06:24