1.はじめに
業務でAWS EC2インスタンスのバックアップ運用を検討及び設定をしたので、備忘録的にここに書き残します。
本記事はAWS初心者が試行錯誤な奮闘記となり、ベストプラクティスではないのでご注意ください。また、監視はAWSサービスを利用しなくても他のサードパーティサービス(もしくはプロダクト)でできると思います。
2.利用サービスとその概要
以下に今回のバックアップ自動化において利用したサービスとその簡単な概要を記載します。
Amazon Data Lifecycle Manager(通称DLM)
AWS EC2の管理コンソールより設定できるスナップショット/AMIの作成・削除・保持を自動化できる仕組み。
URL:https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/snapshot-lifecycle.html
Amazon CloudWatch
AWSリソースと、AWS上で実行されているアプリケーションをリアルタイムでモニタリングするサービス。
URL:https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html
Amazon Simple Notificaiton Service(通称SNS)
AWS環境に置けるメッセージ配信提供するマネージドサービス。
URL:https://docs.aws.amazon.com/ja_jp/sns/latest/dg/welcome.html
※SNSについては、CloudWatch上からも設定ができる為、専用コンソールを使用する必要はないです。
3.サービス利用料金について
Cloudwatch、及びSNSは一定の利用枠を超えると課金が発生するので、本番環境等に実装する前に料金体系を確認してください。DLM自体の利用料金はかかりませんがスナップショットを格納するストレージ領域の費用がかかります。以下に料金関連のリンクを記載しておきます。
Amazon Data Lifecycle Manager ※EBS関連の料金リンクとなりますのでご注意ください。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ebs-snapshot-billing/
https://aws.amazon.com/jp/ebs/pricing/
Amazon CloudWatch
https://aws.amazon.com/jp/cloudwatch/pricing/
Amazon Simple Notificaiton Service
https://aws.amazon.com/jp/sns/pricing/
4.DLMの設定
4-1 設定背景
定期的にEC2 インスタンスのスナップショットを取得していたが、作業及び管理に工数がかかっていたので運用負荷を低減したかった。
4-2 選定理由
以下の2つの理由でDLMとなりました。
・完全なバックアップ取得はできないものの、社内の要件(運用・管理の手軽さ)が合致した。
・サードパーティー製品等での追加コストや選定・導入に時間をかけたくなかった。
4-3 設定内容/手順
1.EC2の管理コンソールの左ペイン>Elastic Block Volume>ライフサイクルマネージャー を選択
2.新しいライフサイクルポリシーを作成 を選択
3.EBSスナップショットポリシー を選択し「次へ」をクリック
※初めてDLMポリシーを作成する場合は、DLMトップ画面で以下の様に表示されます。
4.以下スナップショット取得に関するパラメーターを指定し、「次へ」をクリック
項目 | 内容 | 備考 |
---|---|---|
ターゲットリソースタイプ | インスタンス | EBSボリュームを直接ターゲットにする場合は、「ボリューム」を選択してください。「インスタンス」を選択するとEC2インスタンスに紐づくEBSボリューム全てスナップショットを作成します。EBSボリューム毎にポリシー作成するのが面倒な為、今回はインスタンスでポリシー設定しました。 |
ターゲットリソースタグ | バックアップ対象を指定 | |
説明 | 任意で設定 | |
IAM ロール | デフォルトロール | *必要に応じて別ロールを設定してください。 |
タグ オプション | 任意で設定 | |
ポリシーのステータス | 有効 |
5.以下のスケジュールに関するパラメーターを指定し、「ポリシー」を確認を選択
項目 | 内容 | 備考 |
---|---|---|
スケジュール名 | 後でわかるようなスケジュール名を指定 | |
頻度 | 今回は日次で設定 | 頻度は「毎日(日次)」、「毎週(週次)」、「毎月(月次)」、「毎年(年次)」と「カスタム(cron式)」が選択可能 |
毎 | 24時間 | 頻度によって取得頻度単位が異なります。今回は日時を想定しているため、「24時間」で設定しました。 |
開始時間(UTC) | 取得したい時間帯を指定すること | 指定した時間は開始時間の目安となり、指定時間から1時間以内にジョブが開始されます。 |
保持タイプ | 今回は1カウントを指定 | 「カウント」は保持するスナップショット数により世代管理が可能、「保持期間」は日/週/月/年で保持期間を指定可能です。 |
詳細オプション | 今回は指定しません。 |
5.Cloud Watch設定
5-1 設定背景
DLM設定後に、定期的にDLM及びスナップショットコンソールを確認するのが面倒で自動化したかったから。
5-2 選定理由
AWSサービスの理解を深めたかった。
5-3 設定前提
AWS上でのスナップショット取得/削除を失敗することがない為、作成の失敗と削除の失敗の監視としました。
作成成功と削除成功を監視するとアラーム状態になり逆に面倒となるため、監視対象から外しました。
(※いい方法がないか、現在勉強中です。見つけたら追記します。)
5-4 設定内容/手順
1. CloudWatchの管理コンソールの左ペイン>アラーム状態 or すべてのアラーム を選択
2. 画面右の「アラームの作成」を選択
3.「メトリクスの選択」をクリック
4. 検索カラムに「SnapshotsCreateFailed」と入力し、「Enterキー」を押下
5.「EBS>データライフルサイクル 管理メトリクス」を選択
6. 監視したいDLMPolicyIdを選択し、画面右下「メトリクスの選択」をクリック
7.以下のメトリクス・条件パラメーターを入力し、「次へ」をクリック
項目 | 内容 |
---|---|
メトリクス名 | デフォルトのまま |
DLMPolicyid | デフォルトのまま |
統計 | 最大 |
期間 | 15分 |
しきい値の種類 | 静的 |
アラーム条件 | 以上 |
...よりも | 1 |
アラームを実行するデータポイント | 1/1 |
欠落データの処理 | 欠落データを無視 |
8.以下の通知パラメーターを入力し、「次へ」をクリック
項目 | 内容 | 備考 |
---|---|---|
アラーム状態トリガー | アラーム状態 | |
SNSトピックの選択 | 既存のSNSトピックの選択 | 次項のSNSについてをご参照ください |
通知の送信先 | トピックで作成した送信先を指定 | |
Auto Scalingアクション | 設定なし | |
EC2アクション | 設定なし | |
System Manager アクション | 設定なし |
9.以下のアラーム名・説明を入力し、「次へ」をクリック
項目 | 内容 |
---|---|
アラーム名 | 通知メールを受信した際にわかるようなアラーム名にすること |
説明 | 任意で設定 |
10. 2から9までの手順を「SnapshotsDeleteFailed」メトリクスに対しても行う。
11.2から9までの手順を監視対象DLMポリシーに対して行う。
補足~Amazon Simple Notificaiton Serviceについて~
補足1 5-4-8で適当なSNSトピック設定が無い場合
以下の操作でCloudWatch上からも設定可能です。
「新しいトピックの作成」を選択し、以下を入力し「トピックの作成」を選択
項目 | 内容 | 備考 |
---|---|---|
新規トピックの作成中 | 適当なトピック名を入力 | |
通知を受けるEメールアドレスエンドポイント | 通知を受信すべきEメールアドレス | グループメール/メーリングリスト可 |
※設定と同時に設定メールアドレスに以下の確認メールが送信されるので、サブスクリプションをアクティベーションを忘れずに実施してください。
アクティベーションしない場合は設定が有効にならない為、通知が来ないです。。。
##補足2 Amazon Simple Notificaiton Serviceからの設定する場合
私がそもそもSNSの設定をしたことがなかったため、念のため以下に記載します。
1.Amazon SNSの管理コンソール 左ペイン>トピック を選択
2.右ペインにある「トピックの作成」を選択
3.以下の詳細パラメーターを入力し、「トピックの作成」を選択
※以下は単純なトピックの作成となります。
項目 | 内容 |
---|---|
タイプ | スタンダード |
名前 | 管理名なので何用か理解できる名前を指定 |
表示名 | 管理名なので何用か理解できる名前を指定 |
暗号化 | 今回は指定しません |
アクセスポリシー | 今回は指定しません |
配信ステータスのログ記録 | 今回は指定しません |
タグ | 今回は指定しません |
4.左ペインよりサブスクリプションを選択し、右ペインに表示される「サブスクリプションの作成」を選択
5.以下のパラメータを入力し、「サブスクリプションの作成」を選択
項目 | 内容 | 備考 |
---|---|---|
トピックARN | 作製したトピックを作成 | |
プロトコル | Eメール | 今回はメール通知が欲しいため、「Eメール」を選択してます |
エンドポイント | 通知を受信したいEメールアドレスを指定 | |
サブスクリプションフィルターポリシー | 今回は指定しません | |
Redrive ポリシー (デッドレターキュー) | 今回は指定しません |
6.サブスクリプションの確認メールが送付される為、リンクをクリックし、アクティベートしてください。
以上を設定すればCloudWatch設定時に「既存のトピック」で作成したSNS設定を選択可能です。
6.最後に
もっと良い方法があるがあるのではないかもしれないので、何か発見したら適宜本記事アップデートします。
7. 参考文献
「【初心者向け】DLM (Data Lifecycle Manager)で周期的にEC2スナップショットを作成してみた」
https://dev.classmethod.jp/articles/ec2-snapshot-by-amazon-dlm/
「DLMのスナップショット作成・削除失敗時にをCloudWatch Alarmで通知を実装してみた」
https://cloud5.jp/dlm_error_alarm/