今回はEBS snapshotの自動バックアップとバックアップ完了通知をGmailに飛ばす設定をCloudFormationを使って一撃で終わらせる手順を説明します。
今回使用するAWSサービスはDLM・SNS・CloudWatch Event・CloudFormationです。
#前提条件
- Windows10を使用。
- PCはDELLを使用。
- ファイルの拡張子は.ymlを使用。
- 東京リージョンを使用。
#料金
テンプレート自体に料金は発生しないが、作成後のリソースは料金が発生する為、ご注意ください。
#事前準備
- AWSアカウントを所持していること。
- EC2インスタンスを作成していること。
- DLM・SNS・CloudWatch Event・CloudFormationへのアクセス権限(書き込み・読み取り)を許可していること。
- バックアップ完了通知用のEメールアドレスを用意すること。
#構築内容
DLM・CloudWatch Events・SNSを使って各種設定する。
###1. DLM
- 東京リージョンにライフサイクルマネージャーを作成
- クロスリージョンのコピー先をバージニア北部に設定
- 詳細の各ポリシーの値については以下の通りです
####①スケジュール設定
項目 | 値 |
---|---|
スナップショットの取得時刻 | 15:00 (UT) |
スナップショットの取得間隔 | 24時間 |
スナップショットの保持期間 | 30日 |
ポリシーステータス | 有効 |
####②クロスリージョンの設定 | |
項目 | 値 |
:------------ | :------------ |
スナップショットの保持期間 | 30日 |
暗号化 | 無効 |
ソースからタグをコピー | 有効 |
###2. SNS | |
事前に用意したEメールをSubscriptionのエンドポイントに設定する。 |
###3. CloudWatch Events
- EBSボリュームのスナップショット取得をCloudWatch Eventsで監視
- 作成時にCloudWatchイベントのステータスを有効化
- スナップショットを取得した場合の通知先をテンプレート内で作成したSNSトピックに指定
#テンプレート
スタックは以下の通りです。
AWSTemplateFormatVersion: "2010-09-09"
Description:
DLM & EBS-Snapshot Notification settings
Parameters:
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
# ターゲットリソースタグを指定
EBSNameTag:
Type: String
# CloudWatchEvent名を指定
CloudWatchEventName:
Type: String
# SNSTopic名を指定
TopicName:
Type: String
# EBS Snapshotの完了通知を受信するEメールアドレスを指定
Endpoint:
Type: String
Resources:
# ------------------------------------------------------------#
# LifecyclePolicy Create
# ------------------------------------------------------------#
LifecyclePolicy:
Type: AWS::DLM::LifecyclePolicy
Properties:
Description: "EBS-Snapshot Buckup Cross-Region"
ExecutionRoleArn: !Sub "arn:aws:iam::${AWS::AccountId}:role/AWSDataLifecycleManagerDefaultRole"
PolicyDetails:
ResourceTypes:
- "VOLUME"
Schedules:
-
Name: !Sub "${EBSNameTag}-daily-snapshot"
CreateRule:
Interval: 24
IntervalUnit: HOURS
Times:
- "15:00"
RetainRule:
Interval: 30
IntervalUnit: DAYS
CrossRegionCopyRules:
-
Encrypted: false
RetainRule:
Interval: 30
IntervalUnit: DAYS
Target: us-east-1
TargetTags:
-
Key: "Name"
Value: !Ref EBSNameTag
State: "ENABLED"
Tags:
-
Key: Name
Value: !Sub "${EBSNameTag}-daily-snapshot"
# ------------------------------------------------------------#
# CloudWatch Events Create
# ------------------------------------------------------------#
ConfigEventsRule:
Type: AWS::Events::Rule
Properties:
Description: CloudWatch Ebents EBS Snapshot Configuration
EventBusName: default
EventPattern:
source:
- aws.ec2
detail-type:
- 'EBS Snapshot Notification'
Name: !Ref CloudWatchEventName
State: ENABLED
Targets:
-
Arn: !Sub "arn:aws:sns:ap-northeast-1:${AWS::AccountId}:${ConfigSNSTopic.TopicName}"
Id: !Ref TopicName
# ------------------------------------------------------------#
# SNS Topic & Subscription Create
# ------------------------------------------------------------#
ConfigSNSTopic:
Type: AWS::SNS::Topic
Properties:
Subscription:
-
Endpoint: !Ref Endpoint
Protocol: email
Tags:
-
Key: Name
Value: !Ref TopicName
TopicName: !Ref TopicName
#構築手順
1、cloudformationのコンソールからスタックを作成し、テンプレートファイルを読み込む。
2、各種パラメータを入力する。
パラメータ | 入力内容 |
---|---|
EBSNameTag | ターゲットリソースタグを指定 |
CloudWatchEventName | CloudWatch Event名を指定 |
TopicName | SNSトピック名を指定 |
Endpoint | バックアップ完了通知を受信するEメールアドレスを指定 |
3、作成したスタックが「CREATE_COMPLEATE」と表示さえていることを確認する。 | |
#設定確認
###1. DLM
1、ライフサイクルマネージャーへ移動し、ライフポリシーが作成されていることを確認する。
2、詳細タブへ移動し、テンプレート通りに設定されていることを確認する。
3、スケジュールタブへ移動し、テンプレート通りに設定されていることを確認する。
###2. SNS
1、SNSコンソールからトピックへ移動し、テンプレートで指定したSNSトピックが作成されていることを確認する。
2、サブスクリプションへ移動し、保留中のサブスクリプションが作成されていることを確認する。
3、エンドポイントで指定したEメールへアクセスし「AWS Notification - Subscription Confirmation
」の件名のメールを開いて「Confirm subscription」をクリックする。
4、「Subscription confirmed!」が表示されていることを確認する。
5、「保留中の確認」から「確認済み」に変更されていることを確認する。
###3. CloudWatch Events
1、作成したCloudWatchイベントをクリックする。
2、イベントパターンがスナップショット通知であること、ターゲットが作成したSNSトピック名となっていることを確認する。
#終わりに
今回はCloudFormaitonを使って自動バックアップとバックアップ完了通知をGmailに飛ばす設定を紹介しました。
今回で一気にコード化出来る幅が広がりました!
他のAWSリソースでコード化が実現出来たら随時Qiitaに投稿します♪