我尝试使用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
它会关闭所有涉及的实例。
问题:
是否可以在实例运行时创建快照。我看到了对AWS CLI选项的引用--no-reboot,但我在boto3 API中没有看到任何内容来访问它。
如果在创建快照期间实例正在运行,那么期望有意义的快照是否合理?我看到很多警告,应该总是关闭实例来创建一个干净的快照。同样,这在生产环境中似乎并不合理。
感谢您的任何提示, 克里斯。
答案 0 :(得分:1)
您似乎混合了两个概念:创建AMI并创建EBS快照。
创建 AMI (包括所有附加卷的快照)时,除非选择 no reboot 选项,否则将重新启动实例。
创建 EBS快照时,实例不会受到影响。
您提供的代码示例带有EBS快照。这就是 no reboot 选项不存在的原因(它仅适用于AMI)。
根据CreateSnapshot documentation:
您可以拍摄正在使用的附加卷的快照。但是,快照仅捕获在发出快照命令时已写入EBS卷的数据;这可能会排除任何应用程序或操作系统缓存的任何数据。
将其视为从计算机中拔出电源 - 数据可能无法正确保存,但系统通常可以恢复。这对于很少(如果有的话)使用的备份来说就足够了。