【问题标题】:How to create snapshot without shutting down instance with boto3如何在不使用 boto3 关闭实例的情况下创建快照
【发布时间】:2026-02-04 16:20:02
【问题描述】:

我正在尝试使用 boto3 创建 aws 快照。这个想法是创建快照,以便我们可以恢复损坏的实例卷。目前,它会比重新启动、重新操纵和重新配置更快。

我正在尝试使用 boto3 自动执行此操作,但脚本始终会关闭实例。这在我们的生产环境中是不行的。

当我在 AWS Web 控制台中手动创建快照时,它并没有关闭实例。

这是我为所有实例创建快照的非常基本的代码(过滤):

timestr = time.strftime("%Y%m%d-%H%M%S")
for instance in instances:
    blockCount = 0
    for blockDevice in instance.block_device_mappings:
        newSnapName = thisName + "_" + snapshotTag + "_" + timestr + "_" + str(blockCount)
        thisNewSnapshot = ec2.create_snapshot(VolumeId=blockDevice.get('Ebs').get('VolumeId'),Description="Created by create_track_snaps.py from Instance: " + instance.id)
        blockCount += 1

它会关闭所有涉及的实例。

问题:

  1. 是否可以在实例运行时创建快照。我看到了对 AWS CLI 选项 --no-reboot 的引用,但我在 boto3 API 中看不到任何可以访问它的内容。

  2. 如果在创建快照期间实例正在运行,那么期待有意义的快照是否合理?我看到很多警告,应该总是关闭实例以创建干净的快照。同样,这在生产环境中似乎不合理。

感谢您的任何提示, 克里斯。

【问题讨论】:

    标签: amazon-web-services amazon-ec2 boto3 snapshot


    【解决方案1】:

    您似乎混合了两个概念:创建 AMI 和创建 EBS 快照。

    在创建 AMI(包括所有附加卷的快照)时,实例会重新启动,除非选择了 no reboot 选项。

    创建EBS 快照时,实例不受影响。

    您提供的代码示例采用 EBS 快照。这就是不存在 no reboot 选项的原因(它仅适用于 AMI)。

    根据CreateSnapshot documentation

    您可以拍摄正在使用的附加卷的快照。但是,快照仅捕获在发出快照命令时已写入 EBS 卷的数据;这可能会排除任何应用程序或操作系统缓存的任何数据。

    可以将其想象为关闭计算机的电源 - 数据可能无法正确保存,但系统可以正常恢复。对于很少使用(如果有的话)的备份来说,这可能就足够了。

    【讨论】:

    • “把它想象成切断计算机的电源。” 这是对所创建快照中包含的内容的正确类比,但它为潜在的混淆留下了空间。 ..我相信你同意,问题中显示的代码实际上不应该关闭任何东西。像这样拍摄快照应该对正在运行的实例没有任何有意义的影响。
    最近更新 更多