如何安排AWS EC2 Windows实例的自动(每日)快照?


12

我在Amazon EC2上托管了一些Windows服务器。一些运行Windows Server 2003,其他运行Windows Server2008。这些是EBS支持的实例。大多数实例还附加了一些附加的EBS卷。

我们希望将Windows机器(以及随附的EBS卷)的每日快照计划到S3,以便我们有每日备份可用。

有人会认为这是一个非常普遍的要求,可以通过AWS管理控制台使用,但是事实并非如此。有哪些方法可用?如何在Windows服务器上安排每日快照?

对于Linux,在线有几个脚本示例,但对于Windows,则不是很多。我看过http://sehmer.blogspot.com/2011/04/amazon-ec2-daily-snapshot-script-for.html以及https://github.com/ronmichael/aws-snapshot-调度程序。有没有人使用这些方法中的一种,并且有效吗?

我还考虑过像Skeddly这样的服务,乍看之下似乎并不便宜,但是当您考虑将其用于多台服务器时,价格很快就会升至如此之高,这似乎是创建自己的解决方案的更好选择,您可以将其应用于新的服务器。使用Skeddly,我们将为每台服务器付费。

我们如何安排Windows实例的每日快照?

Answers:


9

Amazon Web Services最近宣布了适用于Windows的PowerShell命令行工具,并将其与适用于.NET SDKAWS工具打包在一起。

AWS Powershell工具使创建快照非常容易:

New-EC2Snapshot "vol-371acd04" -Description "My Snapshot"

您可以这样查询快照:

PS C:\Program Files (x86)\AWS Tools\PowerShell> Get-EC2Snapshot | more


SnapshotId  : snap-18be2b28
VolumeId    : vol-371acd04
Status      : completed
StartTime   : 2012-12-28T08:17:00.000Z
Progress    : 100%
OwnerId     : 383816850479
VolumeSize  : 30
Description : My Snapshot
OwnerAlias  :
Tag         : {}

确保您已安装AWS Powershell工具,并仅创建一个计划任务,该任务使用与上面的代码段类似的powershell脚本来计划快照,因此您应该一切都很好。

更新以查询附加的EBS卷:

要查询附加到您的实例的EBS卷,然后对其快照,您可以执行以下操作:

# Find my instance ID from the EC2 metadata
$myInstanceID = (New-Object System.Net.WebClient).DownloadString("http://169.254.169.254/latest/meta-data/instance-id")

# Query for volumes that are attached to my Instance Id
$volumes = (Get-EC2Volume).Attachment | where {$_.InstanceId -eq $myInstanceID } | Select VolumeId

# Iterate through these volumes and snapshot each of them
foreach ($volume in $volumes)
{
    New-EC2Snapshot $volume.VolumeId -Description "My Snapshot"
}

非常感谢你。这似乎是我要寻找的。请澄清一下:似乎New-EC2Snapshot命令只会获取特定卷的快照。就我而言,我有实例,并且它还附加了一些EBS卷。如何拍摄整个实例的完整快照,包括根设备和连接的EBS卷?
斯坦利

@Stanley已更新为查询附加到您的实例的EBS卷并分别快照
Ameer Deen 2013年

谢谢你 这意味着每个卷将有单独的快照。我只想了解其中的含义:万一发生故障,我将如何提出替换实例?EBS根卷的快照和单个已安装的EBS卷的快照将完全分开。如何使用来自不同快照的已装入驱动器启动替换实例?
斯坦利

为什么不能通过EC2仪表板进行设置?对于那些对脚本不太自信的人?
leen3o

5

2018年更新 截至2018年末,还有两种其他方式可以自动执行EBS快照。我仍然使用CloudWatch事件的原始方法,因为它已经运行了好几年,并且我认为没有任何改变的意义。

Ops Automator(OA)

Ops Automator是AWS提供的一组非常灵活的lambda脚本。它使用上面页面上的CloudWatch模板进行部署。

它的设置步骤是

  1. AWS CloudFormation模板启动了核心框架,该框架包括一套微服务(AWS Lambda函数),用于管理触发事件,资源选择,任务执行,并发控制和完成。
  2. 任务配置数据存储在Amazon DynamoDB表中,该数据定义了触发事件,应如何执行任务,操作将选择哪些资源以及这些资源的位置。
  3. 解决方案生成的AWS CloudFormation模板根据您定义的参数以及跨账户执行操作所需的角色来配置任务。
  4. 该解决方案在DynamoDB表中跟踪流程中的所有步骤,选定的资源以及操作的结果,包括可能的错误。
  5. 该解决方案还利用Amazon CloudWatch Logs进行日志记录。警告和错误消息将发布到解决方案创建的Amazon Simple Notification Service(Amazon SNS)主题,该主题将消息发送到订阅的电子邮件地址。

数据生命周期管理器(DLM)

DLM文档。这是一种更简单但不太灵活的解决方案,可以每12或24小时备份一次卷。我感到困惑的是,为什么AWS会很容易实施每周,每月或可变频率的DLM限制。

DLM已集成到AWS控制台中。我不会复制和粘贴文档,因为AWS会保持更新的状态,并且链接很少中断。

截至2019年,DLM允许您指定更短的间隔至2小时,但仍不允许您指定超过24小时的间隔。

2017更新

截至2017年,还有另一种创建常规快照的方法-使用Cloudwatch Events

这使您可以计划快照,但不能解决正在使用的卷的问题,因此它只是部分解决方案。可以使用CloudWatch Events触发某种方式来使音量静音。

  1. 通过https://console.aws.amazon.com/cloudwatch/打开CloudWatch控制台。

  2. 在导航窗格中,选择“事件”。

  3. 选择创建规则。

  4. 对于事件源,请执行以下操作:

    ->选择时间表。

    ->选择固定速率,然后指定计划间隔(例如5分钟)。或者,选择Cron表达式并指定一个Cron表达式(例如,从当前时间开始,从星期一到星期五每15分钟一次)。

  5. 对于目标,选择添加目标,然后选择EC2创建快照API调用。

  6. 对于卷ID,选择一个EBS卷。

  7. 选择配置详细信息。

  8. 对于规则定义,输入规则的名称和描述。

  9. 对于AWS权限,选择创建新角色的选项。这将在新选项卡中打开IAM控制台。新角色授予内置目标权限,代表您访问资源。选择允许。带有IAM窗口的选项卡关闭。

  10. 选择创建规则。


适用于AWS的免费,简单且本地化的解决方案。
VlastimilOvčáčík17年

1
现在,生命周期管理器允许2/3/4/6/8/12/24小时中的任何一个频率。
丹·普里兹

3

跳进一个古老的答案,这使我开始搜寻。上面的脚本对Ameer Deen表示敬意,顺便说一句。

找到了这篇文章,深入探讨了PowerShell脚本,以完全自动化数据收集和EBS快照过程:

http://messor.com/aws-disaster-recovery-automation-w-powershell/

然后,当然发现这些文件都是为现在已贬值的AWS开发工具包v1.0编写的,因此我花了最后一天的时间对其进行修复,并使其全部与v2.0一起使用:

https://github.com/noahlh/aws-automated-backup-powershell

请享用!


3

AutomatiCloud完全可以满足您的需求。这是一个易于使用的Windows工具,您可以在其中安排EBS卷或RDS实例的备份: www.automaticoud.net

您可以

  • 根据实例ID或标签创建快照和AMI
  • 使用宏创建动态标签
  • 定义3个保留期级别(GFS备份)
  • 发送电子邮件通知
  • 为Windows实例添加VSS代理
  • 备份之前/之后运行脚本
  • 以及更多...

这看起来真的很好!我将下载并在今天晚些时候试一试。
leen3o

1
自动大声免费吗?我使用一段时间后会问我要钱吗?
EricP

AutomatiCloud是免费的。高级功能需要注册。
Stephan Buhre 2015年

1

现在,您可以使用AWS Lambda自动创建AMI。整个设置以及所需的时间表应在10分钟左右完成。看看他们的Github回购也能有所作为。自己运行脚本,并避免将权限授予第三方。


0

您可以编写一个与EC2 API对话的脚本来安排这些快照。它可以在现有实例之一上运行,也可以为此目的在t1.micro上设置一个小型linux实例,其唯一功能是为Windows主机启动快照。该脚本可以作为cron作业放在Linux主机上,以在您选择的时间每天运行。

第一个链接是一个脚本示例,该脚本来自Windows主机,可以通过Windows中的“计划任务”轻松实现自动化。

我没有使用您在第二个链接上链接的应用程序。


您能否提供更多细节?我意识到解决方案可能是我编写某种脚本,但是不幸的是,仅凭这种知识不足以解决问题。您是否拥有所指脚本的链接或示例?
斯坦利

您从问题中链接的人实际上可以正常工作。您是否完全熟悉AWS API命令行工具?
内森五世

0

此处介绍了Windows实例的当前EBS快照功能:http : //docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-creating-snapshot.html

为了获得一致的快照,您必须暂停对卷的写入,直到写入足够长的时间才能完成快照。通常,这意味着您必须卸载该卷。AWS文档没有讨论如何通过Windows上的命令行来执行此操作,但是您可以在以下超级用户线程中找到有关此操作的信息:https : //superuser.com/questions/704870/mount-and-dismount-hard-drive-through -脚本软件

要获取系统启动卷的快照,您需要停止实例。

希望能有所帮助。


0

我意识到这是一个老问题,但是我将分享我们的解决方案。

我们使用名为Ylastic的服务。他们的Pro计划($ 50 /月)包括计划EBS快照,而不限制服务器或磁盘的数量。如果需要,它还将删除较早的备份。您可以创建多个日程表(例如每天,每周等),每个日程表都有自己的保留策略。

该界面还允许您从备份创建新实例。

多年来,它已经为我们可靠地工作了,大约有20个实例和40个EBS卷。可能有更便宜的方法,但价格却足够低,以至于我们无需费心自己构建和维护某些东西。

有关此功能的详细信息,请参见http://blog.ylastic.com/post/148519929496/multi-region-ebs-instance-backup-management

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.