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

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

我在 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.htmlhttps://github.com/ronmichael/aws-snapshot-scheduler。有人使用过这些方法吗?有效吗?

我也考虑过类似的服务斯凯德利乍一看似乎很便宜,但当你考虑将其用于多台服务器时,价格很快就会上涨到这样的地步,以至于创建自己的解决方案似乎是更好的选择,因为您可以在将来将其应用于新服务器。使用 Skeddly,我们将为每台服务器付费。

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

答案1

亚马逊网络服务最近宣布Windows 的 PowerShell 命令行工具,与其一起打包适用于 .NET SDK 的 AWS 工具

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"
}

答案2

2018 年更新 截至 2018 年底,还有另外两种方法可以自动化 EBS 快照。我仍然使用 CloudWatch 事件的原始方法,因为它多年来一直运行良好,我认为没有必要改变。

操作自动化 (OA)

操作自动化是 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 事件

这允许您安排快照,但它不能解决卷正在使用的问题,因此它只是一个部分解决方案。可能有一种方法可以使用 CloudWatch Events 来触发某些操作来使卷静止。

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

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

  3. 选择创建规则。

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

    -> 选择计划。

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

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

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

  7. 选择配置详细信息。

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

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

  10. 选择创建规则。

答案3

跳转到一个让我开始搜索的旧答案。顺便说一句,感谢上面的 Ameer Deen 提供的脚本。

发现这篇文章更深入地介绍了 PowerShell 脚本,以完全自动化数据收集和 EBS 快照过程:

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

然后当然发现这些都是为现已弃用的 AWS SDK v1.0 编写的,所以我花了一天时间修复它并让它们全部与 v2.0 一起工作:

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

享受!

答案4

您现在可以使用AWS Lambda 自动创建 AMI。整个设置应该在 10 分钟左右完成,并按照您喜欢的时间表进行。查看他们的 Github repo 以做出贡献。自己运行脚本并避免向第三方授予权限。

相关内容