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

Sta*_*ley 12 windows amazon-s3 amazon-ec2 amazon-web-services

我在 Amazon EC2 上托管了一些 Windows 服务器。有些运行 Windows Server 2003,其他运行 Windows Server 2008。这些是 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 实例的每日快照?

Ame*_*een 9

Amazon Web Services 最近宣布了适用于 Windows 的 PowerShell 命令行工具,并且它与他们的AWS Tools for .NET SDK一起打包。

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

New-EC2Snapshot "vol-371acd04" -Description "My Snapshot"
Run Code Online (Sandbox Code Playgroud)

您可以像这样查询快照:

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         : {}
Run Code Online (Sandbox Code Playgroud)

确保您安装了 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"
}
Run Code Online (Sandbox Code Playgroud)


Tim*_*Tim 5

2018 年更新 截至2018年末,还有两种自动 EBS 快照的方法。我仍然使用 CloudWatch 事件的原始方法,因为它多年来一直运行良好,我认为没有任何改变的意义。

运维自动化 (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 允许您指定短至两小时的更短时间间隔,但仍然不允许您指定超过 24 小时的时间间隔。

2017年更新

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

这让您可以安排快照,但它并不能解决正在使用的卷的问题,因此它只是部分解决方案。可能有一种方法可以使用 CloudWatch Events 来触发使卷停顿的内容。

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

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

  3. 选择创建规则。

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

    -> 选择时间表。

    -> 选择 Fixed rate of 并指定计划间隔(例如,5 分钟)。或者,选择 Cron 表达式并指定一个 Cron 表达式(例如,从当前时间开始,从周一到周五每 15 分钟一次)。

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

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

  7. 选择配置详细信息。

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

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

  10. 选择创建规则。


Nat*_*n V 0

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

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

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