上書きした作品素材を復元する

AWSBeginner
オンラインで実践に進む

はじめに

S3 バージョニングで誤った画像を観察し、以前の内容を新しい現行バージョンに戻します。

先に前段のポートフォリオラボを完了してください。この環境は必要な前段機能と独自のリソースを提供します。以前のインスタンス、ファイル、認証情報ではなく知識を引き継ぎます。

認定試験との関連

認定 タスク 練習内容
AWS Certified Cloud Practitioner (CLF-C02) Task 3.6 S3 のバージョンを使って復旧する。

ラボの概要

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 に残ります。

実際のラボの確認例です。リソース ID は環境によって異なります。

以前の内容を復元する

このステップでは、 元の 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 は環境によって異なります。

自分のバージョンを削除する

このステップでは、 各保存 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.