【小ネタ】 AWS Backup で S3 をバックアップすると復旧ポイントのサイズが 0 になっている
はじめに
猫とアポロチョコが好きな 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}"
{
"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 ロールの指定に問題が発生した場合は、下記のブログを参照してください。
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AI をフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026 年 1 月 アノテーション㈱から社名変更しました






