作品素材を S3 に保存する

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

はじめに

非公開バケットを作り、画像と作品一覧を保存・取得し、同一の内容を確認して片付けます。

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

認定試験との関連

認定 タスク 練習内容
AWS Certified Cloud Practitioner (CLF-C02) Task 3.6 EC2 の計算と分けて S3 オブジェクトストレージを使う。

ラボの概要

非公開バケットを作り、画像と作品一覧を保存・取得し、同一の内容を確認して片付けます。

非公開ストレージを作る

このステップでは、 保護されたバケットを作ります。EC2 はコードを実行し、S3 はファイルをバケット内のオブジェクトとして保存します。サーバー上だけの 1 コピーに依存しません。

プロジェクトへ移動します。

cd /home/labex/project

PORTFOLIO_BUCKET は用意された一意の名前ですが、バケットはまだありません。名前は AWS パーティション内でグローバルに一意である必要があります。

source website.env
echo "$PORTFOLIO_BUCKET"

s3 mb が作成し、s3:// は S3 の場所です。接続は us-east-1 を使います。

aws s3 mb "s3://$PORTFOLIO_BUCKET"

private-access.json の 4 つの true は Block Public Access を有効にし、意図しない公開を防ぎます。

cat private-access.json

s3api で設定ファイルを適用します。

aws s3api put-public-access-block --bucket "$PORTFOLIO_BUCKET" --public-access-block-configuration file://private-access.json

読み返して 4 項目の true を確認します。

aws s3api get-public-access-block --bucket "$PORTFOLIO_BUCKET"

AWS View に空バケットが出ます。reference バケットと keep.txt は残します。新しいストレージはデフォルトで非公開で、この設定は公開 ACL やポリシーに追加の保護を与えます。

素材を保存して取得する

このステップでは、 用意された 4 ファイル images/aura-brand.webp、images/forma-chair.webp、images/echo-record.webp、projects.json を保存します。WebP は画像形式です。JSON は詳細パネルの文章と画像参照を提供します。コード、フォントとコンパイル済み Tailwind CSS は提供済みです。

cp と --recursive が portfolio-assets/ 内の全ファイルをコピーします。相対パスは Key となり、images/ は名前のプレフィックスで、実際の S3 フォルダーではありません。4 行の upload を確認します。

aws s3 cp portfolio-assets/ "s3://$PORTFOLIO_BUCKET/" --recursive

Contents と AWS View で正確な 4 Key を確認します。

aws s3api list-objects-v2 --bucket "$PORTFOLIO_BUCKET"

転送方向を逆にして AURA の画像を別のローカル名で取得します。

aws s3 cp "s3://$PORTFOLIO_BUCKET/images/aura-brand.webp" downloaded-aura.webp

cmp はバイトを比較し、一致すれば出力しません。

cmp portfolio-assets/images/aura-brand.webp downloaded-aura.webp

非公開保存は完成です。サイトはまだローカル素材を使います。次のラボで 3 画像と JSON の S3 読取を認可し、バケットは非公開を維持します。

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

自分のリソースだけを削除する

このステップでは、 オブジェクト、空バケットとサーバーを片付けます。

rm と --recursive が確認済みの自分のバケット内の 4 オブジェクトを削除します。参照バケットを選ばないでください。

aws s3 rm "s3://$PORTFOLIO_BUCKET/" --recursive

rb が空になった自分のバケットを削除します。

aws s3 rb "s3://$PORTFOLIO_BUCKET"

サーバー ID を表示します。

echo "$INSTANCE_ID"

このインスタンスだけを終了します。

aws ec2 terminate-instances --instance-ids "$INSTANCE_ID"

terminated を待ちます。

aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID"

自分のバケットは消え、keep.txt は残ります。ネットワークを保持します。次のラボは別環境です。

まとめ

素材を非公開保存し、同じバイトを取り出して自分のリソースだけを削除しました。

公式ドキュメント: S3 objects, AWS CLI S3 file commands, Block Public Access.