web-dev-qa-db-ja.com

AWS EC2 Windowsインスタンスの自動(毎日)スナップショットをスケジュールする方法は?

Amazon EC2でホストされているWindowsサーバーがいくつかあります。一部はWindows Server 2003を実行し、他はWindows Server 2008を実行します。これらはEBS-backedインスタンスです。ほとんどのインスタンスには、追加の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-scheduler 。誰かがこれらのアプローチのいずれかを使用しましたか、それはうまくいきますか?

私は Skeddly のようなサービスも検討しましたが、一見すると安価に見えますが、いくつかのサーバーで使用すると、価格はすぐに高くなり、独自のソリューションを作成するためのより良いオプションと思われます。その後、新しいサーバーに適用できます。 Skeddlyでは、サーバーごとに支払います。

Windowsインスタンスの毎日のスナップショットをどのようにスケジュールしますか?

12
Stanley

アマゾンウェブサービスは最近 発表済み Windows用のPowerShellコマンドラインツールであり、 AWS Tools for .NET SDK とともにパッケージ化されています。

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"
}
9
Ameer Deen

2018の更新2018年後半に、EBSスナップショットを自動化する方法が2つ追加されました。 CloudWatchイベントの元のメソッドは何年もの間正常に機能しており、変更しても意味がないため、今でも使用しています。

Ops Automator(OA)

Ops Automator は、AWSが提供する非常に柔軟なラムダスクリプトのセットです。上のページにあるCloudWatchテンプレートを使用してデプロイされます。

セットアップ手順は

  1. AWS CloudFormationテンプレートは、トリガーイベント、リソース選択、タスク実行、同時実行制御、および完了を管理する一連のマイクロサービス(AWS Lambda関数)を含むコアフレームワークを起動します。
  2. トリガーイベント、タスクの実行方法、アクションによって選択されるリソース、およびこれらのリソースの場所を定義するタスク構成データは、Amazon DynamoDBテーブルに保存されます。
  3. ソリューションによって生成されたAWS CloudFormationテンプレートは、定義したパラメーターと、アカウント全体でアクションを実行するために必要なロールに基づいてタスクを構成します。
  4. ソリューションは、プロセスのすべてのステップ、選択されたリソース、および可能性のあるエラーを含むアクションの結果をDynamoDBテーブルで追跡します。
  5. このソリューションでは、ロギングにAmazon CloudWatch Logsも利用します。警告およびエラーメッセージは、サブスクライブされたEメールアドレスにメッセージを送信するソリューション作成のAmazon Simple Notification Service(Amazon SNS)トピックに公開されます。

Data Lifecycle Manager(DLM)

DLMドキュメント 。これは、12時間または24時間ごとにボリュームをバックアップできる、シンプルですが柔軟性に欠けるソリューションです。 AWSがDLMにこの制限を課している理由に戸惑っています。毎週、毎月、または可変頻度で実装するのは簡単だったでしょう。

DLMはAWSコンソールに統合されています。 AWSは常に最新の状態を保ち、リンクが壊れることはほとんどないので、ドキュメントをコピーして貼り付けるつもりはありません。

2019年の時点で、DLMでは 短い間隔を指定 2時間まで指定できますが、24時間を超える間隔を指定することはできません。

2017年の更新

2017以降、定期的なスナップショットを作成する別の方法があります- Cloudwatch Events を使用します。

これにより、スナップショットをスケジュールできますが、使用中のボリュームの問題は解決されないため、これは部分的なソリューションにすぎません。 CloudWatchイベントを使用して、ボリュームを静止させる何かをトリガーする方法があるかもしれません。

  1. https://console.aws.Amazon.com/cloudwatch/ でCloudWatchコンソールを開きます。

  2. ナビゲーションペインで、[イベント]を選択します。

  3. [Create rule]を選択します。

  4. イベントソースについては、次の操作を行います。

    ->スケジュールを選択します。

    -> [固定レート]を選択し、スケジュール間隔を指定します(たとえば、5分)。または、Cron式を選択し、Cron式を指定します(たとえば、月曜日から金曜日まで15分ごとに現在の時刻から開始)。

  5. (ターゲット)で、(ターゲットの追加)を選択してから、EC2 Create Snapshot API callを選択します。

  6. ボリュームIDには、EBSボリュームを選択します。

  7. 詳細の設定を選択します。

  8. 「ルール定義」で、ルールの名前と説明を入力します。

  9. AWS権限の場合、オプションを選択して新しいロールを作成します。これにより、IAMコンソールが新しいタブで開きます。新しい役割は、組み込みのターゲット権限をユーザーに代わってリソースにアクセスすることを許可します。許可を選択します。 IAMウィンドウのタブが閉じます。

  10. [Create rule]を選択します。

5
Tim

AutomatiCloudはまさにあなたが必要としていることをします。 EBSボリュームまたはRDSインスタンスのバックアップをスケジュールできる、使いやすいWindowsツールです。 www.automaticoud.net

あなたはできる

  • インスタンスIDまたはタグに基づいてスナップショットとAMIを作成する
  • マクロを使用してダイナミックタグを作成する
  • 3レベルの保持期間を定義する(GFSバックアップ)
  • メール通知を送信する
  • windowsインスタンスにVSSエージェントを追加する
  • バックアップの前/後にスクリプトを実行する
  • などなど...
3
Stephan Buhre

私の検索を始めた古い答えに飛びついた。上記のAmeer Deen氏のスクリプトへの称賛。

データ収集とEBSスナップショットプロセスを完全に自動化するためにPowerShellスクリプトをより深く掘り下げているこの投稿を見つけました。

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

そしてもちろん、これらはすべて現在廃止されたAWS SDKのv1.0用に作成されていることを発見したので、最終日を修正してすべてをv2.0で動作させました:

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

楽しい!

3
nlh

AWS Lambdaを使用してAMIを自動的に作成する を使用できるようになりました。全体のセットアップは、お好みのスケジュールと共に約10分で完了します。彼らのGithubリポジトリを見て、貢献することもできます。自分でスクリプトを実行し、サードパーティにアクセス許可を与えないようにします。

1
Romo P

EC2 APIと通信してそれらのスナップショットをスケジュールするスクリプトを作成できます。これは既存のインスタンスの1つで実行できます。または、Windowsホストのスナップショットを開始することを唯一の機能とするt1.microでこの目的のために小さなLinuxインスタンスを設定することもできます。スクリプトは、選択した時間に毎日実行するcronジョブとしてLinuxホストに配置できます。

最初のリンクは、Windowsホストからのスクリプトの例であり、Windowsのスケジュールされたタスクを使用して簡単に自動化できます。

2番目のリンクでリンクしたアプリケーションを使用していません。

0
Nathan V

これは古い質問だと思いますが、私たちの解決策を共有します。

Ylastic というサービスを使用します。彼らのProプラン($ 50 /月)には、サーバーまたはディスクの数を制限するのではなく、EBSスナップショットのスケジューリングが含まれています。必要に応じて、古いバックアップも削除されます。複数のスケジュール(毎日、毎週など)を作成し、それぞれに独自の保持ポリシーを設定できます。

このインターフェースでは、バックアップから新しいインスタンスを作成することもできます。

約20のインスタンスと40のEBSボリュームで、何年にもわたって信頼性の高い方法で動作しました。おそらくもっと安い方法があるでしょうが、価格は私たち自身が何かを構築して維持することに煩わされていないほど十分に低いです。

この機能の詳細については http://blog.ylastic.com/post/148519929496/multi-region-ebs-instance-backup-management を参照してください。

0
Martijn Heemels

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-a-script-software

システムブートボリュームのスナップショットを取得するには、インスタンスを停止する必要があります。

お役に立てば幸いです。

0
cloudyBlues