8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS-GUILDAdvent Calendar 2023

Day 18

Redshift Serverlessのスケジュールスナップショット機能を試す

Last updated at Posted at 2023-12-17

先日のre:InventにてRedshift Serverlessに関する管理機能のアップデートがありました。
地味に嬉しい機能がいくつかありますが、ここではスケジュールスナップショット機能を試してみます。
2023/12現在、スケジュールスナップショット機能の設定はマネジメントコンソール非対応のため、AWS CLIで設定を進めます。

AWS CLIのバージョン

最新版のAWS CLIを使用します。

コマンド
aws --version

結果(例):

  aws-cli/2.14.5 Python/3.11.6 Darwin/23.1.0 exe/x86_64 prompt/off

IAMポリシーとロールの作成

スケジュールの管理に必要なIAMポリシーとIAMロールを作成します。

redshiftschedulerpolicy(例):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "redshift-serverless:GetScheduledAction",
                "redshift-serverless:CreateScheduledAction",
                "redshift-serverless:DeleteScheduledAction",
                "redshift-serverless:UpdateScheduledAction",
                "redshift-serverless:ListScheduledActions",
                "redshift-serverless:CreateSnapshot"
            ],
            "Resource": "*"
        }
    ]
}

続いてIAMロールを作成します。
信頼ポリシーは下記の内容で設定します。

redshiftschedulerrole(例):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "scheduler.redshift.amazonaws.com",
                    "redshift-serverless.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

最後に作成したIAMポリシーをIAMロールに紐づけます。
作成したIAMロールはスケジュール作成時に使用しますので、IAMロールのrolearnを控えておきましょう。

スナップショットスケジュール作成

スナップショットスケジュールはcron式で設定します。
ここでは毎日17:00(JST)取得するスケジュールとします。cron式はUTC基準のためJSTから-9hで設定します。
作成したIAMロールのrolearnに置き換えてください。

コマンド
aws redshift-serverless create-scheduled-action --enabled \
  --namespace-name namespace \
  --role-arn arn:aws:iam::xxxx:role/redshiftschedulerrole \
  --scheduled-action-name everyday1700 \
  --schedule "cron=(0 8 * * ? *)" \
  --target-action '{"createSnapshot": {"namespaceName": "namespace","snapshotNamePrefix": "samplesnapshot", "retentionPeriod": 7}}'

結果(例):

{
    "scheduledAction": {
        "namespaceName": "namespace",
        "roleArn": "arn:aws:iam::xxxxxx1:role/redshiftschedulerrole",
        "schedule": {
            "cron": "0 8 * * ? *"
        },
        "scheduledActionName": "everyday1700",
        "scheduledActionUuid": "xxxxxxx",
        "state": "ACTIVE",
        "targetAction": {
            "createSnapshot": {
                "namespaceName": "namespace",
                "retentionPeriod": 7,
                "tags": []
            }
        }
    }
}

これでスケジュールの設定は完了です。

マネジメントコンソールで確認

指定した時刻でスナップショットを取得できていることが確認できました。

スクリーンショット 2023-12-08 18.13.33.png

おそうじ

最後に作成したスナップショットスケジュールを削除します。

コマンド
aws redshift-serverless delete-scheduled-action --scheduled-action-name everyday1700

結果(例):

{
    "scheduledAction": {
        "namespaceName": "namespace",
        "roleArn": "arn:aws:iam::xxxxxx:role/redshiftschedulerrole",
        "schedule": {
            "cron": "0 8 * * ? *"
        },
        "scheduledActionName": "everyday1700",
        "scheduledActionUuid": "xxxxx",
        "state": "ACTIVE",
        "targetAction": {
            "createSnapshot": {
                "namespaceName": "namespace",
                "retentionPeriod": 7,
                "tags": []
            }
        }
    }
}

スナップショット自体の削除も忘れないようにしておきましょう。

まとめ

今まではEventBridge等を活用してスナップショットスケジュールを個別に作り込む必要がありましたが、Redshift Serverlessの機能だけで簡単にスケジュール管理ができるようになったのは嬉しいですね。
同時にリリースされたクロスリージョンコピーとの併用も可能で、スケジュールで別リージョンにスナップショットを作成できることも可能です。
マネジメントコンソール非対応な点だけ少し不便なため、Redshiftと同様にマネジメントコンソールでのスケジュール設定機能に期待です。

8
2
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
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?