AWS BackupのイベントとメトリクスがCloudWatchで利用可能になったので検証してみた

2021.02.20

どーもsutoです。

2021年2月3日にCloudWatchにAWS Backupメトリクスとイベントが使えるようになったとのことで実際に確認してみました。

これまではAWS BackupのSNSトピックを使って通知を行うには、下記リンクのように

  • AWS CLI を使用してBackupイベントの通知をVaultに設定
  • バックアップJobのstateで通知の有無をフィルタリングする場合は、SNSのサブスクリプションフィルターポリシーの設定

が必要でした。

今後はAWSコンソールでもCloudWatchイベントやアラーム作成ができるので通知設定の手間が解消されそうですね。

参考

AWS Backupで利用できるイベント、メトリクスの種類はこちらでご確認ください。

実際にやってみた

今回は、検証として以下の設定を行い、メトリクスと通知の確認をしてみます。

  • AWS Backup設定を作成(Cfnテンプレートを使用)、EC2のバックアップ取得
  • CloudWatchイベントでJobのstate変化時にSNSトピックに通知

Backup設定の作成

以下のテンプレートを用いてAWS BackupのVault、Plan、Rule、Resource、必要なIAMロールを設定します。

AWSTemplateFormatVersion: '2010-09-09'
Description: AWS Backup Setting
Parameters:
  MyBackupName:
    Description: Backup plan name
    Type: String
    Default: 'backup'
  Cron:
    Description: type the cron.
    Type: String
    Default: cron(0 19 * * ? *)
  TagKey:
    Description: TagKey for backup
    Type: String
    Default: 'backup'
  TagValue:
    Description: TagValue for backup
    Type: String
    Default: 'True'
Resources:
  BackupVault:
    Type: "AWS::Backup::BackupVault"
    Properties:
      BackupVaultName: !Sub ${MyBackupName}-vault

  BackupPlan:
    Type: AWS::Backup::BackupPlan
    Properties: 
      BackupPlan: 
        BackupPlanName: !Ref MyBackupName
        BackupPlanRule: 
          - RuleName: !Sub ${MyBackupName}-rule
            TargetBackupVault: !Ref BackupVault
            ScheduleExpression: !Ref Cron
            CompletionWindowMinutes: 720
            StartWindowMinutes: 60
            Lifecycle:
              DeleteAfterDays: 14
  BackupSelection:
    Type: AWS::Backup::BackupSelection
    Properties:
      BackupPlanId: !Ref BackupPlan
      BackupSelection:
        SelectionName: !Ref MyBackupName
        IamRoleArn: !GetAtt BackupIAMrole.Arn
        ListOfTags:
         - ConditionType: "STRINGEQUALS"
           ConditionKey: !Ref TagKey
           ConditionValue: !Ref TagValue
  BackupIAMrole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: AWSBackupDefaultServiceRole
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
        - Effect: Allow
          Action: sts:AssumeRole
          Principal:
            Service: backup.amazonaws.com
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup
      - arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForRestores
      Path: "/service-role/"

あとはバックアップ対象のEC2に上記のタグ(backup : True)を付与します。

CloudWatchイベントの作成

コンソールでCloudWatch→イベント→ルールの画面を開き、以下のようにルールを作成してみます。ターゲットにはあらかじめ自分のメールをサブスクリプションに設定したSNSトピックを指定しています。

これで設定完了です。ではメールの内容を見てみましょう。

ジョブのstate「CREATED」「RUNNING」「COMPLETED」の計3通がメールで受信されていました。

次にCloudWatchメトリクスを確認してみます。

通知された3つのstate変化がメトリクスでも取得されています。

特定のジョブstateのみを通知させるために

運用業務の場面では、「Failedのときのみ通知させたい」というような需要があるかと思いますので、今回はジョブが”COMPLETED”のイベントのみを通知させるようにCloudWatchイベントルールを変更してみようと思います。

先ほど作成したルールを選択し、カスタムイベントパターンとして以下のように編集を行い保存します。

このように”detail”のstateに条件を加えることで、COMPLETEDのときのみ通知がくるようになりました。

他の条件についても、メール本文内のjsonにある「"Key":"Value"」で複数のフィルタリングができます。

まとめ

バックアップ設定が正常に動作しているか監視するのにCloudWatchのメトリクスやイベントを使えるようになったのはありがたいですね。 監視や運用保守の業務の方々に参考になれば幸いです。