作品素材を S3 に保存する

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

はじめに

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

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

認定試験との関連

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

ラボの概要

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

非公開ストレージを作る

このステップでは、作品素材の非公開 S3 バケットを作り、公開アクセスの保護設定を適用します。

EC2 はサイトを実行します。Amazon S3 はファイルをオブジェクトとして、名前付きの保存先であるバケットに保存します。素材をサーバーから分けて管理できます。このラボは新しいサイトとローカルファイルを用意し、バケットは自分で作ります。

用意されたプロジェクトへ移動します。

cd /home/labex/project

このラボの識別子を読み込み、バケット名を表示します。

source website.env
echo "$PORTFOLIO_BUCKET"

PORTFOLIO_BUCKET は用意された一意の名前で、バケットはまだありません。S3 は一意の名前を必要とするので、portfolio のような一般的な名前ではなく指定値を使います。

CLI の s3 はファイル操作に便利です。mb はバケットの作成、s3:// は S3 の場所を示します。

aws s3 mb "s3://$PORTFOLIO_BUCKET"

make_bucket の確認が表示されます。接続は us-east-1 を使い、バケットもその Region にあります。AWS View で名前を探します。

新しいストレージは初期状態で非公開です。Block Public Access は誤った公開許可を防ぐ保護です。用意された JSON の四つの設定が true であることを確認します。

cat private-access.json

各 true が保護を有効にします。s3api はアクセス設定などの個別操作を提供します。launch.json と同じように、file:// でローカルの設定を読み込み、値を一つずつ入力せずに済みます。

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

更新に成功すると、出力なしでプロンプトに戻ります。保存された設定を S3 から読み返します。

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

四つの値が true で、AWS View のバケットに No objects と表示されることを確認します。reference バケットの keep.txt は別のデータなので変更しません。素材を保存する準備ができました。

素材を保存して取得する

このステップでは、三つの作品画像と一覧を保存し、AURA を取得して元のファイルとバイトを比較します。

portfolio-assets/ には四つのファイルがあります。WebP は画像形式で、projects.json は作品のタイトル、説明、画像参照です。サイトと画像は提供済みなので、保存に集中できます。

ファイル サイトでの用途
images/aura-brand.webp AURA
images/forma-chair.webp FORMA
images/echo-record.webp ECHO
projects.json 作品のタイトル、説明、画像参照

キーはバケット内のオブジェクト名です。images/aura-brand.webp は images/ プレフィックスを持ちますが、S3 の実際のフォルダーではありません。cp はコピー、--recursive はフォルダー内の全ファイルを相対パスのキーでコピーします。

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

四行の upload を確認します。続いて s3 ls で保存されたオブジェクトを一覧表示します。--recursive は images/ 以下のキーも含めます。

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

四行には更新時刻、サイズ、キーが表示されます。三つの画像と projects.json を確認し、順番や具体的な時刻は気にしなくて構いません。AWS View にも同じ名前が表示されます。

バケットに三つの画像と projects.json があります。識別子は異なります。

コピー方向を逆にして、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

出力なしでプロンプトに戻れば一致しています。実際の画像を保存し、そのまま取得できました。違う場合はキーを確認し、元の画像を再送信します。

非公開保存は完了です。サイトはまだローカルファイルを読むため、S3 への送信だけではページは変わりません。次のラボは同じ素材を保存済みの新環境から始め、アプリへの読取許可を学びます。

まとめ

非公開の S3 を作り、公開保護を設定して、三つの画像と一覧を保存し、一致するコピーを取得しました。保存されたオブジェクトと、それを使うサイトのアプリを区別しました。

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