継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

AWS Backup で Aurora のバックアップの取得と別リージョンにコピーする

タダです.

AWS Backup でリストアテストがサポートされました.これはシステムを動かすメインリージョンではなく DR の目的で別リージョンにコピーしたバックアップからリストアをやりたいと思ったため,この記事ではまず バックアップの取得とそのコピーを AWS CLI で行ったのでその内容をまとめていきます.なお AWS CLI のバージョンは aws-cli/2.13.29 Python/3.11.6 Darwin/21.6.0 source/arm64 prompt/off になります.

aws.amazon.com

バックアップとコピーを AWS CLI で行なう

まず別リージョンに複製するバックアップを取っていきます.この記事では東京リージョンの Aurora のバックアップを取ることにします.バックアップジョブ実行のコマンドは下記で実行しました.

$ aws backup start-backup-job --backup-vault-name hoge-test --resource-arn arn:aws:rds:ap-northeast-1:123456789191011:cluster:hoge --iam-role-arn arn:aws:iam::123456789191011:role/test-backup-role --lifecycle DeleteAfterDays=3
{
    "BackupJobId": "26d81d3c-cc99-456e-a9e6-a9cdd0fec86c",
    "CreationDate": "2023-12-08T22:09:40.039000+09:00",
    "IsParent": false
}

awscli.amazonaws.com

バックアップジョブの実行時にレスポンスで返ってきた BackupJobId を使ってバックアップ完了状況を確認します.完了したら COMPLETED になるので,このステータスになったら RecoveryPointArn をコピーしておきます.

aws backup describe-backup-job --backup-job-id 26d81d3c-cc99-456e-a9e6-a9cdd0fec86c
{
~中略~
  "RecoveryPointArn": "arn:aws:rds:ap-northeast-1:1234567891011:cluster-snapshot:awsbackup:job-26d81d3c-cc99-456e-a9e6-a9cdd0fec86c",
~中略~
    "State": "COMPLETED",
    "PercentDone": "100.0",
~中略~
}

awscli.amazonaws.com

取得したバックアップを別リージョンにコピーしていきます.コピージョブ実行のコマンドは下記で実行し,大阪リージョンに複製しました.

$ aws backup start-copy-job --recovery-point-arn arn:aws:rds:ap-northeast-1:1234567891011:cluster-snapshot:awsbackup:job-26d81d3c-cc99-456e-a9e6-a9cdd0fec86c --source-backup-vault-name hoge-test --destination-backup-vault-arn arn:aws:backup:ap-northeast-3:1234567891011:backup-vault:hoge-test --iam-role-arn arn:aws:iam::1234567891011:role/test-backup-role --lifecycle DeleteAfterDays=3
{
    "CopyJobId": "1E8D42FF-7469-2442-1BEB-F1E7A8CCCED4",
    "CreationDate": "2023-12-08T22:35:42.782000+09:00",
    "IsParent": false
}

awscli.amazonaws.com

コピージョブの実行時にレスポンスで返ってきた CopyJobId を使ってバックアップ完了状況を確認します.完了したら COMPLETED になります.

$ aws backup describe-copy-job --copy-job-id 1E8D42FF-7469-2442-1BEB-F1E7A8CCCED4
{
    "CopyJob": {
~中略~
        "CopyJobId": "1E8D42FF-7469-2442-1BEB-F1E7A8CCCED4",
~中略~
        "State": "COMPLETED",
~中略~
    }
}

バックアップのコピーで躓いたこと

バックアップのコピーで躓いたこととして KMS キーの権限追加付与が必要だったことがあります.まず,大阪リージョンの KMS キーの権限が必要で下記の権限をコピージョブ実行用の IAM に付与しました.

{
    "Sid": "",
    "Effect": "Allow",
    "Action": [
        "kms:Describe*",
        "kms:Get*",
        "kms:List*",
        "kms:Decrypt"
    ],
    "Resource": [
        "必要なKMSキーのARN"
    ]
}

次にバックアップ対象の Aurora でも KMS を使った暗号化を使っていたため,この KMS に対して追加の権限付与を行いました.

{
    "Sid": "",
    "Effect": "Allow",
    "Action": [
           "kms:List*",
           "kms:Get*",
           "kms:GenerateDataKey*",
           "kms:Encrypt",
           "kms:ReEncrypt*",
           "kms:Decrypt",
           "kms:Describe*",
           "kms:CreateGrant",
           "kms:RevokeGrant"
    ],
    "Resource": [
        "必要なKMSキーのARN"
    ]
}

検証のためこれらの権限を広く与えているため絞ったほうが良いのは前提ですが,権限が不足していると The source snapshot KMS key does not exist, is not enabled or you do not have permissions to access it といったエラーがでてコピーができませんでした.

まとめ

AWS Backup のリストアテストを行う準備として東京リージョンから大阪リージョンへの Aurora バックアップの複製を AWS CLI でやってみました.次回はリストアテストをやっていきます.