【小ネタ】 AWS Backup で S3 をバックアップすると復旧ポイントのサイズが 0 になっている

【小ネタ】 AWS Backup で S3 をバックアップすると復旧ポイントのサイズが 0 になっている

AWS Backup の S3 バックアップの復旧ポイントは BackupSizeInBytes が 0 で返されるようです
2026.04.02

はじめに

猫とアポロチョコが好きな m.hayakawa です。

AWS Backup で S3 をバックアップ対象にすることがあると思います。その際に、復旧ポイントのサイズが 0 になっていたので、再現をしてみました。

やってみた

まずは S3 に適当なファイルを入れる

S3 や AWS Backup にアクセスできる IAM エンティティでマネジメントコンソールにログインし、CloudShell 環境にて下記を行います。

  • S3 バケットを作成
  • 100 MiB のダミーファイルを作成
  • S3 にコピー
  • S3 のバージョニングを有効化
# バケット名(バケット名をユニークにするために適宜変更してください)
BUCKET_NAME="backup-test-$(date +%Y%m%d%H%M%S)"

# S3 バケットを作成
aws s3 mb "s3://${BUCKET_NAME}"

# 100 MiB のダミーファイルを作成
dd if=/dev/urandom of=dummy-100m.bin bs=1M count=100

# S3 にコピー
aws s3 cp dummy-100m.bin "s3://${BUCKET_NAME}/dummy-100m.bin"

# AWS Backup 対象の S3 はバージョニングが有効である必要がある
aws s3api put-bucket-versioning \
  --bucket "${BUCKET_NAME}" \
  --versioning-configuration Status=Enabled

作成したバケットを AWS Backup でオンデマンドコピーする

  • AWS Backup を実行する IAM ロールに S3 バックアップ用のポリシーを追加
  • オンデマンドバックアップを実行
# アカウント ID を取得
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)

# AWS Backup のデフォルトサービスロール
BACKUP_ROLE_ARN="arn:aws:iam::${ACCOUNT_ID}:role/service-role/AWSBackupDefaultServiceRole"

# AWSBackupDefaultServiceRole には S3 へのアクセス権限が含まれていないため
# S3 バックアップ用のポリシーを追加でアタッチする
aws iam attach-role-policy \
  --role-name AWSBackupDefaultServiceRole \
  --policy-arn arn:aws:iam::aws:policy/AWSBackupServiceRolePolicyForS3Backup

# バックアップボールト名(デフォルトボールトを使用)
VAULT_NAME="Default"

# オンデマンドバックアップを開始
aws backup start-backup-job \
  --backup-vault-name "${VAULT_NAME}" \
  --resource-arn "arn:aws:s3:::${BUCKET_NAME}" \
  --iam-role-arn "${BACKUP_ROLE_ARN}" \
  --start-window-minutes 60 \
  --complete-window-minutes 120

結果を確認

しばらくするとバックアップジョブが完了するので、結果を確認します。

# バックアップジョブから復旧ポイント ARN を取得
RECOVERY_POINT_ARN=$(aws backup describe-backup-job \
  --backup-job-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --query RecoveryPointArn --output text)

# 復旧ポイントの詳細を確認
aws backup describe-recovery-point \
  --backup-vault-name "${VAULT_NAME}" \
  --recovery-point-arn "${RECOVERY_POINT_ARN}"
出力結果
{
    "RecoveryPointArn": "arn:aws:backup:ap-northeast-1:123456789012:recovery-point:backup-test-20260401062014-20260401064617-xxxxxxxx",
    "BackupVaultName": "Default",
    "BackupVaultArn": "arn:aws:backup:ap-northeast-1:123456789012:backup-vault:Default",
    "ResourceArn": "arn:aws:s3:::backup-test-20260401062014",
    "ResourceType": "S3",
    "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/AWSBackupDefaultServiceRole",
    "Status": "COMPLETED",
    "CreationDate": "2026-04-01T06:46:16.474000+00:00",
    "InitiationDate": "2026-04-01T06:46:16.742000+00:00",
    "CompletionDate": "2026-04-01T07:12:18.355000+00:00",
    "BackupSizeInBytes": 0,
    "CalculatedLifecycle": {},
    "Lifecycle": {},
    "EncryptionKeyArn": "arn:aws:kms:ap-northeast-1:123456789012:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "IsEncrypted": true,
    "IsParent": false,
    "ResourceName": "backup-test-20260401062014",
    "VaultType": "BACKUP_VAULT"
}

100MiB のオブジェクトが存在する S3 バケットに対してバックアップジョブを実行していますが、BackupSizeInBytes が 0 になっていますね。

それでは、再度 300 MiB のオブジェクトを入れて、再度バックアップジョブを実行してみます。

# 300 MiB のダミーファイルを作成
dd if=/dev/urandom of=dummy-300m.bin bs=1M count=300

# S3 にコピー
aws s3 cp dummy-300m.bin "s3://${BUCKET_NAME}/dummy-300m.bin"

# オンデマンドバックアップを開始
aws backup start-backup-job \
  --backup-vault-name "${VAULT_NAME}" \
  --resource-arn "arn:aws:s3:::${BUCKET_NAME}" \
  --iam-role-arn "${BACKUP_ROLE_ARN}" \
  --start-window-minutes 60 \
  --complete-window-minutes 120

# バックアップジョブから復旧ポイント ARN を取得
RECOVERY_POINT_ARN=$(aws backup describe-backup-job \
  --backup-job-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --query RecoveryPointArn --output text)

# 復旧ポイントの詳細を確認
aws backup describe-recovery-point \
  --backup-vault-name "${VAULT_NAME}" \
  --recovery-point-arn "${RECOVERY_POINT_ARN}"
出力結果2回目
{
    "RecoveryPointArn": "arn:aws:backup:ap-northeast-1:123456789012:recovery-point:backup-test-20260401062014-20260401083830-xxxxxxxx",
    "BackupVaultName": "Default",
    "BackupVaultArn": "arn:aws:backup:ap-northeast-1:123456789012:backup-vault:Default",
    "ResourceArn": "arn:aws:s3:::backup-test-20260401062014",
    "ResourceType": "S3",
    "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/AWSBackupDefaultServiceRole",
    "Status": "COMPLETED",
    "CreationDate": "2026-04-01T08:38:29.731000+00:00",
    "InitiationDate": "2026-04-01T08:38:29.921000+00:00",
    "CompletionDate": "2026-04-01T09:04:31.173000+00:00",
    "BackupSizeInBytes": 0,
    "CalculatedLifecycle": {},
    "Lifecycle": {},
    "EncryptionKeyArn": "arn:aws:kms:ap-northeast-1:123456789012:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "IsEncrypted": true,
    "IsParent": false,
    "ResourceName": "backup-test-20260401062014",
    "VaultType": "BACKUP_VAULT"
}

やはり、BackupSizeInBytes が 0 になっています。

以上のことから、AWS Backup の S3 バックアップの復旧ポイントは、BackupSizeInBytes が 0 で返されることが確認できました。

今後の機能追加で、S3 のバックアップも差分容量が記録されるといいですね!今後のサービス拡張に期待しましょう!

おまけ

料金がかかるので後片付けもしましょう。

# S3バケットを空にして削除する
# すべてのオブジェクトバージョンと削除マーカーを削除
aws s3api list-object-versions \
  --bucket "${BUCKET_NAME}" \
  --query '{Objects: Versions[].{Key:Key,VersionId:VersionId}}' \
  --output json | \
  aws s3api delete-objects --bucket "${BUCKET_NAME}" --delete file:///dev/stdin

aws s3api list-object-versions \
  --bucket "${BUCKET_NAME}" \
  --query '{Objects: DeleteMarkers[].{Key:Key,VersionId:VersionId}}' \
  --output json | \
  aws s3api delete-objects --bucket "${BUCKET_NAME}" --delete file:///dev/stdin

# バケットを削除
aws s3 rb "s3://${BUCKET_NAME}"

# 復旧ポイントをすべて削除する(本番環境での実行をする際はお気を付けください)
for arn in $(aws backup list-recovery-points-by-backup-vault \
  --backup-vault-name "${VAULT_NAME}" \
  --by-resource-arn "arn:aws:s3:::${BUCKET_NAME}" \
  --query "RecoveryPoints[].RecoveryPointArn" --output text); do
  aws backup delete-recovery-point \
    --backup-vault-name "${VAULT_NAME}" \
    --recovery-point-arn "${arn}"
done

参考資料

describe-recovery-point — AWS CLI 2.34.21 Command Reference

AWSBackupDefaultServiceRole はデフォルトでは存在しないことがあるため、IAM ロールの指定に問題が発生した場合は、下記のブログを参照してください。

https://dev.classmethod.jp/articles/aws-backup-service-role/

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。

運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AI をフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。

当社は様々な職種でメンバーを募集しています。

「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026 年 1 月 アノテーション㈱から社名変更しました

この記事をシェアする

関連記事