EventBridgeを使用して自動EBSスナップショットを作成してみた。

2022.07.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

概要

この記事では、EventBridgeを使用して自動EBSスナップショットを作成してみました。ここでは、既存のEBSボリュームのスナップショットを5分ごとに取得するEventBridgeスケジュールベースのルールを作成しました。

作成するリソース:

  • EBS Volume
  • IAM Role
  • EventBridge rule

 

やってみた

IAMロールの作成

  • EventBridgeがEBSボリュームのスナップショットを取得できるようにするIAMロールを作成しておきます。
  • 以下のポリシーを含むjson [policy.json] ファイルを作成しておきます。

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CloudWatchEventsBuiltInTargetExecutionAccess",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateSnapshot"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

 

  • 次のコマンドを使用して、上記のjsonファイルでIAMポリシーを作成しておきます。
//Create an IAM Policy
aws iam create-policy --policy-name EventBridge-Invoke-EBS-Volume --policy-document file://policy.json

//Output
{
    "Policy": {
        "PolicyName": "EventBridge-Invoke-EBS-Volume",
        "PolicyId": ".............",
        "Arn": "arn:aws:iam::xxxxxxxxxxxxx:policy/EventBridge-Invoke-EBS-Volume",
        "Path": "/",
        "DefaultVersionId": "v1",
        "AttachmentCount": 0,
        "PermissionsBoundaryUsageCount": 0,
        "IsAttachable": true,
        "CreateDate": "2022-07-23T13:50:18+00:00",
        "UpdateDate": "2022-07-23T13:50:18+00:00"
    }
}

 

  • 次のassumeRoleポリシーを含むjsonファイルを作成しておきます。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "events.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

 

  • 上記のポリシーでIAMロールを作成しておきます。
//create an IAM role
aws iam create-role --role-name "EventBridge-EBS-role" --assume-role-policy-document file://assumeRole.json

//Output
{
    "Role": {
        "Path": "/",
        "RoleName": "EventBridge-EBS-role",
        "RoleId": "..........",
        "Arn": "arn:aws:iam::xxxxxxxxxxxx:role/EventBridge-EBS-role",
        "CreateDate": "2022-07-23T13:53:40+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "events.amazonaws.com"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        }
    }
}

 

  • 上記で作成したIAMポリシーをIAMロールにアタッチしておきます。
//Attach IAM Policy to IAM role.
aws iam attach-role-policy \
     --role-name EventBridge-EBS-role \
     --policy-arn 'arn:aws:iam::xxxxxxxxxxxx:policy/EventBridge-Invoke-EBS-Volume'

 

EBSボリュームの作成

  • EC2 コンソールのナビゲーションペインで [Volumes]を選択しておきます。
  • [Create volume]をクリックしておきます。
  • 次の設定でEBSボリュームを作成しておきます。
    • Volume type : General Purpose SSD(gp2)
    • Size : 10GiB
    • 他の設定はデフォルトのままにします。

 

 

ルールの作成

  • EventBridge コンソールのナビゲーションペインで [Rules] を選択しておきます。
  • [Create rule]をクリックしておきます。
  • ルール名を入力し、[Schedule]としてルールタイプを選択しておきます。

 

 

  • 次の設定でスケジュールを定義しておきます。
    • Schedule pattern : A schedule that runs at a regular rate.
    • Rate expression:
      • Value :5
      • Unit : Minutes

 

 

  • ターゲットの詳細を入力しておきます。
    • Target types: AWS service
    • Target : EBS Create Snapshot
    • Volume ID: 以前に作成したEBSボリュームのボリュームIDを入力しておきます。
    • Execution role: 前の手順で作成したIAMロールを選択しておきます。

 

 

  • コンソールで、ルールが作成されていることをみることができます。

 

確認する

  • EC2 コンソールのナビゲーションペインで [Snapshots]を選択しておきます。
  • ここでは、スナップショットが5分ごとに取得されていることが確認できます。

 

 

まとめ

EventBridgeを使用して自動EBSスナップショットを作成してみました。cron式を使用してスケジュールベースのルールを作成することもできます。

Reference : 

Automated Amazon EBS snapshots using EventBridge