2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

EBS Snapshotの自動バックアップとバックアップ完了通知をGmailに飛ばす設定をCloudFormationを使って一撃で終わらせる

Last updated at Posted at 2021-08-28

今回は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トピックに指定

#テンプレート
スタックは以下の通りです。

DLM_&_EBS_Snapshot_Notification_settings.yml
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のコンソールからスタックを作成し、テンプレートファイルを読み込む。
1.png
2、各種パラメータを入力する。

パラメータ 入力内容
EBSNameTag ターゲットリソースタグを指定
CloudWatchEventName CloudWatch Event名を指定
TopicName SNSトピック名を指定
Endpoint バックアップ完了通知を受信するEメールアドレスを指定
2.png
3、作成したスタックが「CREATE_COMPLEATE」と表示さえていることを確認する。
3.png

#設定確認

###1. DLM
1、ライフサイクルマネージャーへ移動し、ライフポリシーが作成されていることを確認する。
1.png
2、詳細タブへ移動し、テンプレート通りに設定されていることを確認する。
2.png
3、スケジュールタブへ移動し、テンプレート通りに設定されていることを確認する。
3.png
###2. SNS
1、SNSコンソールからトピックへ移動し、テンプレートで指定したSNSトピックが作成されていることを確認する。
1.png
2、サブスクリプションへ移動し、保留中のサブスクリプションが作成されていることを確認する。
2.png
3、エンドポイントで指定したEメールへアクセスし「AWS Notification - Subscription Confirmation
」の件名のメールを開いて「Confirm subscription」をクリックする。
3.png
4、「Subscription confirmed!」が表示されていることを確認する。
4.png
5、「保留中の確認」から「確認済み」に変更されていることを確認する。
5.png

###3. CloudWatch Events
1、作成したCloudWatchイベントをクリックする。
1.png
2、イベントパターンがスナップショット通知であること、ターゲットが作成したSNSトピック名となっていることを確認する。
2.png

#終わりに
今回はCloudFormaitonを使って自動バックアップとバックアップ完了通知をGmailに飛ばす設定を紹介しました。
今回で一気にコード化出来る幅が広がりました!
他のAWSリソースでコード化が実現出来たら随時Qiitaに投稿します♪

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?