Redshift Serverlessでクロスリージョンバックアップを取得する

前回の記事で触れたスケジュールバックアップのリリースと同時期にクロスリージョンバックアップ機能がリリースされました。
せっかくなのでスケジュールバックアップと組み合わせてクロスリージョンバックアップ機能をCLIで試してみます。
東京リージョンのスナップショットをバージニアリージョンに取得する前提で進めます。

AWS CLIのバージョン
-------------------

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

```bash:コマンド:
aws --version
```

結果(例):

     aws-cli/2.18.15 Python/3.12.6 Darwin/23.6.0 exe/x86_64


スナップショットスケジュール作成
-----------------------
作成方法は[前回](URL "https://qiita.com/hoshiko/items/f48f787d849776480468")の記事を参照してください。
テスト用に毎時でスナップショットを取得するスケジュールを作成します。

hourly00(例):
```
{
    "scheduledAction": {
        "namespaceName": "testnamespace",
        "nextInvocations": [
            "2024-10-30T11:25:00+09:00",
            "2024-10-30T12:25:00+09:00",
            "2024-10-30T13:25:00+09:00",
            "2024-10-30T14:25:00+09:00",
            "2024-10-30T15:25:00+09:00"
        ],
        "roleArn": "arn:aws:iam::xxxxxx:role/redshiftschedulerrole",
        "schedule": {
            "cron": "25 * * * ? *"
        },
        "scheduledActionName": "hourly00",
        "scheduledActionUuid": "d9a1ac7c-b400-42d9-8ff2-b937617f92bf",
        "state": "ACTIVE",
        "targetAction": {
            "createSnapshot": {
                "namespaceName": "testnamespace",
                "retentionPeriod": 7,
                "tags": []
            }
        }
    }
}
```


クロスリージョンバックアップ機能を有効化
-----------------------
クロスリージョンバックアップを有効化するnamespaceとバックアップ先のリージョンを指定します。今回はus-east1(バージニア)を指定します。
オプションでスナップショットの保持期間とKMSキーを指定できます。今回は保持期間を1日、KMSキーはデフォルトのマネージドキーを使用します。

```bash:コマンド:
aws redshift-serverless create-snapshot-copy-configuration \
 --destination-region us-east-1 \
 --namespace-name hoshitest \
 --snapshot-retention-period 1
```

結果(例):
```
{
    "snapshotCopyConfiguration": {
        "destinationKmsKeyId": "AWS_OWNED_KMS_KEY",
        "destinationRegion": "us-east-1",
        "namespaceName": "testnamespace",
        "snapshotCopyConfigurationArn": "arn:aws:redshift-serverless:ap-northeast-1:xxxxxx",
        "snapshotCopyConfigurationId": "xxxxxx",
        "snapshotRetentionPeriod": 1
    }
}

```

これでクロスリージョンバックアップ機能の有効化ができました。


マネジメントコンソールで確認
-----------------------
指定したnamespaceでクロスリージョンバックアップが有効化されていることが確認できます。
![スクリーンショット 2024-10-30 11.09.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193020/dec344ef-7657-a8e3-1aae-4d3bcf6b5934.png)


マネジメントコンソールで確認
-----------------------
まずは東京リージョン側でスケジュールスナップショットが取得されていることを確認します。
![tokyo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193020/2cb539d4-6314-2d90-8490-e46e3640ada3.png)


取得できていますね。

続いてバージニアリージョンにスナップショットが取得されていることを確認します。
![useast1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193020/03317f07-0756-0936-b553-b81a7915f980.png)


同時刻/同サイズのスナップショットが保存されています。

おそうじ
-----------------------
最後にクロスリージョンバックアップの設定を削除します。

```bash:コマンド:
aws redshift-serverless delete-snapshot-copy-configuration --snapshot-copy-configuration-id "作成したクロスリージョンバックアップのsnapshotCopyConfigurationId"


```

結果(例):
```
{
    "snapshotCopyConfiguration": {
        "destinationKmsKeyId": "AWS_OWNED_KMS_KEY",
        "destinationRegion": "us-east-1",
        "namespaceName": "testnamespace",
        "snapshotCopyConfigurationArn": "arn:aws:redshift-serverless:ap-northeast-1:xxxxxx:snapshotcopyconfiguration/79f672a3-4ef1-4828-9bac-128932c2c717",
        "snapshotCopyConfigurationId": "79f672a3-4ef1-4828-9bac-128932c2c717",
        "snapshotRetentionPeriod": 1
    }
}
```

保持期間を設定していない場合はスナップショットが残り続けますので忘れず手動で削除しましょう。


まとめ
-----------------------
クロスリージョンバックアップ機能により別リージョンへのスナップショットバックアップが可能になりました。
スケジュールスナップショットと組み合わせることでバックアップ/リストアレベルのDRが容易になったのは嬉しいですね。