この記事は約7分で読めます。
目次
はじめに
本記事はAP Tech Blog Weekのものになります。
こんにちは。エーピーコミュニケーションズ クラウド事業部の髙野です。
本記事では Redshift Serverless のスナップショットを定期的に自動取得する方法を紹介します。
Redshift Serverless はデフォルトで30分ごとに復旧ポイントを作成しており、障害発生時などはこの復旧ポイントを使用してリストアを実施することができるのですが、復旧ポイントの保持期間は24時間であるため、バックアップを7日間保持する必要がある場合などは、定期的にスナップショットを取得する仕組みを実装する必要があります。
やり方はいくつかありますが、今回は EventBridgeスケジューラ から Systems Manager Automation を呼び出してスナップショットを取得する方法を紹介します。
どんなひとに読んで欲しい
- Redshift Serverless のスナップショットを定期的に自動取得する仕組みを構築したい人
- EventBridgeスケジューラ を使ってみたい人
- Systems Manager Automation を使ってみたい人
手順
1.IAMロールを作成
まずは、Systems Manager Automation の実行ロールを作成します。
- IAMロール名:create-redshiftserverless-snapshot-role
ポリシーは以下を設定してください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "redshift-serverless:CreateSnapshot", "ssm:StartAutomationExecution" ], "Resource": "*" } ] }
信頼されたエンティティは以下を設定してください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "scheduler.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
2.ランブックを作成
Systems Manager Automation に実行させるアクションをランブックとして定義します。
AWS Systems Manager コンソールで [オートメーション] をクリックします。
[Create runbook] をクリックします。
名前フォームにランブック名を入力します。
- ランブック名:automation-create-snapshot-redshiftserverless
[コード] を選択して、エディターに以下のコードを貼り付け、[ランブックを作成] をクリックします。
※コードの中身については後述するのでいったん何も考えずに貼り付けてください。
{ "schemaVersion": "0.3", "description": "Create a snapshot of Redshift Serverless", "parameters": { "NamespaceName": { "type": "String", "description": "Namespace name" }, "retentionPeriod": { "type": "Integer", "description": "Retention period in days" } }, "mainSteps": [ { "name": "CreateSnapshot", "action": "aws:executeAwsApi", "isEnd": true, "inputs": { "Service": "redshift-serverless", "Api": "CreateSnapshot", "namespaceName": "{{ NamespaceName }}", "snapshotName": "snapshot-{{ global:DATE }}", "retentionPeriod": "{{ retentionPeriod }}" } } ] }
ランブックに使用したコードの中身を簡単に説明します。
[mainSteps] に Systems Manager Automation で実行されるアクションが定義されており、[action] にはアクション名、[inputs] にはアクションへの入力データが記載されています。
[inputs] の各キーの説明は以下になります。
キー | 説明 |
---|---|
Service | 実行する API オペレーションの AWS サービスの名前空間 |
Api | 実行する API オペレーションの名前 |
namespaceName | スナップショットを取得する Redshift Serverless の名前空間の名前 |
snapshotName | 作成されるスナップショットの名前(snapshot-<スナップショット取得日>で作成される) |
retentionPeriod | 作成されるスナップショットの保持期間 |
※[namespaceName] と [retentionPeriod] については Systems Manager Automation の呼び出し元から渡される値が使用される。
より詳細な情報については、AWSの公式ドキュメント を参照してください。
[ランブックを作成] をクリックします。
3.スケジュールを作成
作成したランブックを定期的に実行させるためのスケジュールを作成します。
Amazon EventBridge コンソールで [スケジュール] をクリックします。
[スケジュールを作成] をクリックします。
以下のとおり、設定をします。
- スケジュール名:schedule-create-snapshot-redshiftserverless
今回は毎日 2:00 にスケジュールするようにcron式で設定します。
※任意の値を設定してください。
[Systems Manager] を検索して選択します。
[StartAutomationExecution] を検索して選択します。
エディターに以下のコードを貼り付けます。
- [NamespaceName] にはスナップショットを取得する Redshift Serverless の名前空間を入力。
- [retentionPeriod] にはスナップショットの保持期間を入力。
{ "DocumentName": "automation-create-snapshot-redshiftserverless", "Parameters": { "NamespaceName" : [ "<Redshift Serverless の名前空間>" ], "retentionPeriod" : [ "<スナップショットの保持期間>" ] } }
[既存の役割を選択] には 「1.IAMロールを作成」 で作成した以下の IAMロール を選択します。
- create-redshiftserverless-snapshot-role
設定した値に誤りがないことを確認して [スケジュールを作成] をクリックします。
4.スナップショットを確認
設定したスケジュールでスナップショットが作成されていることを確認します。
Amazon Redshift コンソールで Redshift Serverless をクリックします。
[データバックアップ] をクリックします。
スナップショットが作成されていることを確認します。
おわりに
これで Redshift Serverless のスナップショットを定期的に取得する仕組みを実装できました。
今回はじめて Systems Manager Automation を使ってみたのですが、いろいろできるようなので今後も活用して運用の負担を軽減する仕組みを積極的に作っていきたいです。
関連記事
お知らせ
APCはAWS Advanced Tier Services(アドバンストティアサービスパートナー)認定を受けております。
その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
www.ap-com.co.jp
https://www.ap-com.co.jp/service/utilize-aws/
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。