先日の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": []
}
}
}
}
これでスケジュールの設定は完了です。
マネジメントコンソールで確認
指定した時刻でスナップショットを取得できていることが確認できました。
おそうじ
最後に作成したスナップショットスケジュールを削除します。
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と同様にマネジメントコンソールでのスケジュール設定機能に期待です。