はじめに
S3 バージョニングで誤った画像を観察し、以前の内容を新しい現行バージョンに戻します。
先に前段のポートフォリオラボを完了してください。この環境は必要な前段機能と独自のリソースを提供します。以前のインスタンス、ファイル、認証情報ではなく知識を引き継ぎます。
認定試験との関連
| 認定 | タスク | 練習内容 |
|---|---|---|
| AWS Certified Cloud Practitioner (CLF-C02) | Task 3.6 | S3 のバージョンを使って復旧する。 |
ラボの概要

バージョン履歴を有効にする
このステップでは、 バージョニングは同じ Key への書込ごとに別の VersionId を保持します。最初の画像は有効化前の null バージョンです。 AURA のスキンケア包装画像を確認します。初期の 4 バージョンは null で、新しい版を作るのは images/aura-brand.webp だけです。
フォルダーへ移動します。
cd /home/labex/project
識別子を読みます。
source website.env
echo "$PORTFOLIO_BUCKET"
バージョニングを有効にします。
aws s3api put-bucket-versioning --bucket "$PORTFOLIO_BUCKET" --versioning-configuration Status=Enabled
設定を読み返します。
aws s3api get-bucket-versioning --bucket "$PORTFOLIO_BUCKET"
正しい画像を書き込み、戻った VersionId を ORIGINAL_VERSION に保存して表示します。 行末のバックスラッシュは同じコマンドを次の行へ続けます。
ORIGINAL_VERSION=$(aws s3api put-object \
--bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp \
--body portfolio-assets/images/aura-brand.webp --content-type image/webp \
--query VersionId --output text)
echo "$ORIGINAL_VERSION"
AURA のスキンケア包装画像を確認します。初期の 4 バージョンは null で、新しい版を作るのは images/aura-brand.webp だけです。
誤った画像を上書きする
このステップでは、 提供された赤い下書きを同じ Key に送ります。
下書きを書き込み、DRAFT_VERSION を保存・表示します。
DRAFT_VERSION=$(aws s3api put-object \
--bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp \
--body aura-draft.webp --content-type image/webp \
--query VersionId --output text)
echo "$DRAFT_VERSION"
aura-draft.webp は ECHO のレコード画像です。AURA の Key に送ったあと、AURA カードが包装ではなくレコードを表示します。FORMA と ECHO の画像は変わらず、以前の正しい版は S3 に残ります。 一覧はバケット内のバージョンです。Key が images/aura-brand.webp の行を確認し、他の 3 Key の null を保持します。
aws s3api list-object-versions --bucket "$PORTFOLIO_BUCKET"
aura-draft.webp は ECHO のレコード画像です。AURA の Key に送ったあと、AURA カードが包装ではなくレコードを表示します。FORMA と ECHO の画像は変わらず、以前の正しい版は S3 に残ります。

以前の内容を復元する
このステップでは、 元の VersionId を指定して正しい内容を取得し、新しい現行版として公開します。
get-object の version-id で以前の画像を取得します。
aws s3api get-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$ORIGINAL_VERSION" recovered-aura.webp
cmp は元画像と取得したバイトを比較し、一致なら出力しません。
cmp portfolio-assets/images/aura-brand.webp recovered-aura.webp
取得した画像を再アップロードし、RESTORED_VERSION を保存します。
RESTORED_VERSION=$(aws s3api put-object \
--bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp \
--body recovered-aura.webp --content-type image/webp \
--query VersionId --output text)
echo "$RESTORED_VERSION"
再読み込みすると AURA の包装画像が戻ります。ダウンロードだけでは現行版は変わらず、復元バイトの公開が RESTORED_VERSION を作ります。FORMA、ECHO と projects.json を保持します。

自分のバージョンを削除する
このステップでは、 各保存 ID を指定して、このラボで作った 3 版だけを削除します。VersionId なしの削除は削除マーカーを作り、履歴を消す操作とは異なります。
復元した RESTORED_VERSION だけを削除します。
aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$RESTORED_VERSION"
下書きの版を削除します。
aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$DRAFT_VERSION"
最初のステップで作った ORIGINAL_VERSION だけを削除します。
aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$ORIGINAL_VERSION"
履歴で準備済み null だけが残ることを確認します。 一覧はバケット内のバージョンです。Key が images/aura-brand.webp の行を確認し、他の 3 Key の null を保持します。
aws s3api list-object-versions --bucket "$PORTFOLIO_BUCKET"
インスタンスを終了します。
aws ec2 terminate-instances --instance-ids "$INSTANCE_ID"
終了を待ちます。
aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID"
バケット、初期 null 版、ロールと参照データを残します。
まとめ
以前のバイトを取得して再公開し、現行版の復旧と履歴を確認して自分の 3 バージョンだけを削除しました。
公式ドキュメント: S3 Versioning, retrieving object versions.



