「AWS Backup for Amazon S3」 の一般提供が公開されました

AWS

2022.3.11

Topics

はじめに

こんにちは。CloudLead チームの Cold-Airflow です。

2022/2/18 に AWS Backup で Amazon S3 のサポートが一般公開されました。

本日、AWS は AWS Backup for Amazon S3 を一般提供し、AWS Backup でサポートされる一連のサービスに Amazon S3 を追加することを発表します。コンピューティング、ストレージ、データベースに関する AWS のその他のサービスとともに、Amazon S3 に保存されているアプリケーションデータのバックアップと復元を集中的に自動化することが簡単になります。AWS Backup は AWS Organizations とシームレスに統合されているため、すべてのアカウントにわたって S3 データのイミュータブルなバックアップの作成と管理を集中的に行い、不注意なアクションや悪意のあるアクションからデータを保護し、数回クリックするだけで指定時点にデータを復元することができます。
AWS Backup for AmazonS3 の一般提供を発表

AWS Backup for Amazon S3 のメリットは?

  • AWS Backup でバックアップを一元管理
  • より簡単にデータを復元
  • バックアップコンプライアンスが向上

フルマネージドサービスである AWS Backup にバックアップ作業や復元作業を任せられるのでかなり便利なアップデート内容です。

実際にやってみた

保護対象リソース S3 構築

保護作業となる S3 を作成します。

ここで一つ注意点です。

AWS Backup で保護対象に選択できるのはバージョニングが有効になっている S3 バケットのみです。

ちなみに、バージョニングが有効化されていない S3 を選択するとエラーとして表示されます。

バージョニングが無効バケットエラー

バージョニングが有効化されているバケットが作成できたら、復元した際にわかりやすいようにファイルを作成しておきます。

C:\Users>aws s3 ls s3://cold-airflow-backup-s3-bucket
2022-03-09 16:00:13        373 index.html
2022-03-09 16:00:13        367 test.html

AWS Backup 設定

まずは、保護するリソースタイプ S3 の有効化を行います。

AWS Backup > 設定 > リソースを設定

保護するリソースタイプ S3 の有効化

今回は、バックアッププランを作成してバックアップを取得します。
検証のため即時にバックアップ開始されるようにカスタム cron 式で10分後に設定しています。
他の設定についてはデフォルトです。

なお、バックアップボールトは「Default」 を使用します。

バックアッププラン

次にバックアップを取得したいS3バケットを指定します。
バックアッププラン2

ここでは、デフォルトロールではなく新規作成したロールを使用します。
後ほど説明を行います。

バックアッププラン1

これで、cron 式で設定した時間が来るのを待ちます。

AWS Backup デフォルトロールについて

先程、新規作成したロールを使用した理由としては、現在(22年3月10日)のバックアップ・デフォルトロールでは、S3 の操作ポリシーが追加されていません。

  • arn:aws:iam::[AWSアカウントID]:role/service-role/AWSBackupDefaultServiceRole

ですが、S3 用の IAM ポリシーは用意されています。

  • arn:aws:iam::aws:policy/AWSBackupServiceRolePolicyForS3Backup
  • arn:aws:iam::aws:policy/AWSBackupServiceRolePolicyForS3Restore

そのため、ロールを新規作成して上記ポリシーをアタッチして検証を行います。

C:\Users>aws iam list-attached-role-policies --role-name cold-airflow-backup-s3-example
{
    "AttachedPolicies": [
        {
            "PolicyName": "AWSBackupServiceRolePolicyForS3Backup",
            "PolicyArn": "arn:aws:iam::aws:policy/AWSBackupServiceRolePolicyForS3Backup"
        },
        {
            "PolicyName": "AWSBackupServiceRolePolicyForS3Restore",
            "PolicyArn": "arn:aws:iam::aws:policy/AWSBackupServiceRolePolicyForS3Restore"
        }
    ]
}

バックアップ取得

cron 式で設定した時刻になるとバックアップジョブが実行されます。

C:\Users>aws backup list-backup-jobs
{
    "BackupJobs": [
        {
            "AccountId": "[AWSアカウントID]",
            "BackupJobId": "4055526C-C8E2-9195-E67E-4AB92D343EB5",
            "BackupVaultName": "Default",
            "BackupVaultArn": "arn:aws:backup:us-east-1:[AWSアカウントID]:backup-vault:Default",
            "RecoveryPointArn": "arn:aws:backup:us-east-1:[AWSアカウントID]:recovery-point:cold-airflow-backup-s3-bucket-20220309074958-01318629",
            "ResourceArn": "arn:aws:s3:::cold-airflow-backup-s3-bucket",
            "CreationDate": "2022-03-09T16:35:00+09:00",
            "CompletionDate": "2022-03-09T16:58:59.241000+09:00",
            "State": "COMPLETED",
            "PercentDone": "100.0",
            "IamRoleArn": "arn:aws:iam::[AWSアカウントID]:role/cold-airflow-backup-s3-example",
            "CreatedBy": {
                "BackupPlanId": "34900518-c541-4929-b18b-953c96019b59",
                "BackupPlanArn": "arn:aws:backup:us-east-1:[AWSアカウントID]:backup-plan:34900518-c541-4929-b18b-953c96019b59",
                "BackupPlanVersion": "MWM2NmZlMDQtZjFjNiZDQ0LWFkNjktNjY1NGU4ZTIwMWE4",
                "BackupRuleId": "3377ef57-6dea-4c0e-822c-9afe53f740"
            },
            "StartBy": "2022-03-09T17:35:00+09:00",
            "ResourceType": "S3"
        }
    ]
}

"State": "COMPLETED"

バックアップが作成されたことを確認できました。

また、Default バックアップボールトに復旧ポイントが作成されています。

C:\Users>aws backup  list-recovery-points-by-backup-vault --backup-vault-name  Default
{
    "RecoveryPoints": [
        {
            "RecoveryPointArn": "arn:aws:backup:us-east-1:[AWSアカウントID]:recovery-point:cold-airflow-backup-s3-bucket-20220309074958-01318629",
            "BackupVaultName": "Default",
            "BackupVaultArn": "arn:aws:backup:us-east-1:[AWSアカウントID]:backup-vault:Default",
            "ResourceArn": "arn:aws:s3:::cold-airflow-backup-s3-bucket",
            "ResourceType": "S3",
            "CreatedBy": {
                "BackupPlanId": "34900518-c541-4929-b18b-953c96019b59",
                "BackupPlanArn": "arn:aws:backup:us-east-1:[AWSアカウントID]:backup-plan:34900518-c541-4929-b18b-953c96019b59",
                "BackupPlanVersion": "MWM2NmZlMDQtZjFjNi00ZDQ0LWFkNjktNjY1NGU4ZTIwMWE4",
                "BackupRuleId": "3377ef57-6dea-4c0e-822c-9a3bfe53f740"
            },
            "IamRoleArn": "arn:aws:iam::[AWSアカウントID]:role/cold-airflow-backup-s3-example",
            "Status": "COMPLETED",
            "CreationDate": "2022-03-09T16:35:00+09:00",
            "CompletionDate": "2022-03-09T16:58:59.241000+09:00",
            "EncryptionKeyArn": "arn:aws:kms:us-east-1:[AWSアカウントID]:key/bfe50f2c-c94b-4ebb-8d1a-4c93050c5b14",
            "IsEncrypted": true
        }
    ]
}

バックアップ復元

バックアップが取得できたので、バックアップの復元も検証を行います。

まずは、保護対象の S3 バケットを空にします。

C:\Users>aws s3 rm s3://cold-airflow-backup-s3-bucket --recursive
delete: s3://cold-airflow-backup-s3-bucket/index.html
delete: s3://cold-airflow-backup-s3-bucket/test.html

では、復元します。

復元するにはメタデータが必要なので、先に取得しておきます。

C:\Users>aws backup get-recovery-point-restore-metadata --backup-vault-name Default --recovery-point-arn arn:aws:backup:us-east-1:[AWSアカウントID]:recovery-point:cold-airflow-backup-s3-bucket-20220309074958-01318629
{
    "BackupVaultArn": "arn:aws:backup:us-east-1:[AWSアカウントID]:backup-vault:Default",    "RecoveryPointArn": "arn:aws:backup:us-east-1:[AWSアカウントID]:recovery-point:cold-airflow-backup-s3-bucket-20220309074958-01318629",
    "RestoreMetadata": {
        "InitialRestoreTime": "2022-03-09T07:50:03Z",
        "LatestRestoreTime": "2022-03-09T07:50:03Z",
        "aws:backup:request-id": "5e89def9-74fb-4b78-9ef0-1f97cd82a175"
    }
}

保護対象リソースによって必要なメタデータは変わるのですが、S3ではaws:backup:request-idを使用するのでメモっておいてください。

プレビュー版ですが、サンプルのメタデータがあるのでそれを参考にして復元します。

S3 データの復元 (プレビュー) – AWS Backup

aws backup start-restore-job --recovery-point-arn arn:aws:backup:us-east-1:[AWSアカウントID]:recovery-point:cold-airflow-backup-s3-bucket-20220309074958-01318629  ^
--metadata Encrypted=\"true\",newbucket=\"false\",destinationbucketname=\"cold-airflow-backup-s3-bucket\",creationtoken=\"5e89def9-74fb-4b78-9ef0-1f97cd82a175\" ^
--iam-role-arn arn:aws:iam::[AWSアカウントID]:role/cold-airflow-backup-s3-example --resource-type S3
  • destinationbucketname:復元対象のリソースバケット名
  • newbucket:true の場合は新規 S3 バケットを指定する
  • Encrypted: true の場合はファイルシステムの暗号化を指定する
  • creationtoken:get-recovery-point-restore-metadataで取得したaws:backup:request-idの値

少しわかりづらいためコンソール画面の画像も載せておきます。
コンソール画面で選択している項目をstart-restore-job--metadataオプションでは指定しています。

S3バックアップの復元

復元ジョブを実行します。

C:\Users>aws backup start-restore-job --recovery-point-arn arn:aws:backup:us-east-1:[AWSアカウントID]:recovery-point:cold-airflow-backup-s3-bucket-20220309074958-01318629  ^
More? --metadata Encrypted=\"true\",newbucket=\"false\",destinationbucketname=\"cold-airflow-backup-s3-bucket\",creationtoken=\"5e89def9-74fb-4b78-9ef0-1f97cd82a175\" ^
More? --iam-role-arn arn:aws:iam::[AWSアカウントID]:role/cold-airflow-backup-s3-example
--resource-type S3
{
    "RestoreJobId": "71B75683-00F0-F548-4BD7-9D688335B965"
}

コンソール画面で復元ジョブが完了していることを確認します。

ジョブを復元

復元ジョブが完了したので、再度 S3 バケットのオブジェクトを確認します。

C:\Users>aws s3 ls s3://cold-airflow-backup-s3-bucket
2022-03-09 19:18:34        373 index.html
2022-03-09 19:18:34        367 test.html

まとめ

新しく AWS Backup の保護対象に追加された S3 のバックアップと復元の検証を行いました。

AWS Backup で管理することによってバックアップの手間などが簡略化されます。
さらに、他のバックアップと同様に管理を行うことで一元管理が実現できます。

参考記事

AWS Backup for AmazonS3 の一般提供を発表
AWS Backup の開始方法 – AWS Backup
S3 バックアップの作成 (プレビュー) – AWS Backup
AWS Backup のドキュメント履歴 – AWS Backup
サポート対象の AWS サービスで、AWS Backup を動作させる方法について – AWS Backup
AWS CLI での高レベル (S3) コマンドの使用 – AWS Command Line Interface
AWS CLI を使用して AWS Backup プランを作成、またはオンデマンドジョブを実行する
S3 データの復元 (プレビュー) – AWS Backup
Amazon EFS ファイルシステムの作成 – Amazon Elastic File System
プレビュー – AWS Backup に Amazon S3 のサポートを追加 | Amazon Web Services ブログ

Cold-Airflow

2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら