キーとメタデータで文書を整理する

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

はじめに

あるチームは、一つの S3 バケットに財務部門と人事部門の文書を保存しています。意味のある名前とプロパティを付けてレポートを取得し、最終的な削除まで人事部門の文書を保持しながら、財務部門のグループを削除します。

最初に S3 でファイルを保存して取得する を完了してください。この新しい VM には CLI 接続とローカルの文書が提供され、以前のリソースや個人の認証情報は必要ありません。コマンドには Terminal を使い、隣の AWS View タブで保存されたキー、プロパティ、内容を比較します。

認定試験との関連

このラボでは、次の試験トピックに関連する実践的な演習を行います。

キーを選び、チームの文書をアップロードする

このステップでは、意味のあるオブジェクトキーを使い、一つのバケットで二つの部門の文書を分けます。

ローカルディレクトリは自分のコンピューターにファイルを保存し、バケットは S3 にオブジェクトを保存します。cd(ディレクトリを変更する)で準備済みの作業ディレクトリに移動します。

cd /home/labex/project

提供された documents ディレクトリには、小さなテキストファイルが二つあります。保存する内容を把握できるよう、cat で内容を表示します。

cat documents/revenue.csv
month,revenue
2026-09,42000

CSV ファイルはカンマで列を区切ります。ここでの二つの列は月と売上で、それ以降の各行は一つのレコードです。

cat documents/welcome.txt
Welcome to the reporting team.

aws s3 mb(make bucket)でバケットを作成します。s3:// はローカルのパスではなく、ストレージの場所を示します。

aws s3 mb s3://labex-team-documents

コマンドは make_bucket: labex-team-documents と表示します。

財務部門のキーは finance/2026-09/revenue.csv にします。スラッシュによって名前をグループ化しやすくなりますが、S3 はファイルシステムのディレクトリを作成しません。文字列全体が一つのオブジェクトキーです。プレフィックス finance/ は財務部門の文書をまとめ、より長いプレフィックス finance/2026-09/ はグループを一か月に絞り込みます。

Content-Type は、ファイルのメディア形式を説明する標準メタデータです。text/csv はカンマ区切りのテキストを示します。カスタムメタデータには、自分で定義した説明用のキーと値の組が含まれます。ここでは department=finance と period=2026-09 がレポートを説明します。権限を付与したり、内容を変更したりするものではありません。

この例は、キーのプレフィックスと残りの名前を分けて示しています。メタデータはオブジェクトに属します。

キー、プレフィックス、メタデータ

aws s3 cp は最初のパスから二つ目のパスへコピーします。--content-type は形式を明示的に設定します。--metadata はカンマ区切りの name=value の組を受け取ります。引用符はメタデータの引数を一つにまとめます。行末のバックスラッシュは、同じコマンドを次の行に続けます。

aws s3 cp documents/revenue.csv s3://labex-team-documents/finance/2026-09/revenue.csv \
  --content-type text/csv \
  --metadata 'department=finance,period=2026-09'

アップロードのメッセージには、コピー先のキーが表示されます。歓迎文書も、それぞれのキーとプロパティでアップロードします。text/plain は、特別な文書形式を持たない通常のテキストを意味します。

aws s3 cp documents/welcome.txt s3://labex-team-documents/hr/welcome.txt \
  --content-type text/plain \
  --metadata 'department=hr'

ls(一覧表示)と --recursive を使い、フォルダーのようなプレフィックスでまとめる代わりに、バケット全体の完全なキーを表示します。

aws s3 ls s3://labex-team-documents/ --recursive

二つの行の末尾は finance/2026-09/revenue.csv と hr/welcome.txt です。タイムスタンプは異なります。AWS View は同じバケットに両方のキーを表示します。部門ごとに別のバケットを作らず、名前でオブジェクトを整理できました。

プロパティを確認し、レポートを取得する

このステップでは、一つの部門のオブジェクトを選び、メタデータを確認して、ダウンロードしたレポートが元ファイルと一致することを証明します。

aws s3api は、個々の S3 API 操作を提供します。より高水準の aws s3 コマンドは、一般的なファイル操作の流れを扱います。どちらも同じオブジェクトを操作します。list-objects-v2 はオブジェクトのレコードを一覧表示します。--bucket は格納先の名前を指定し、--prefix は S3 が返すキーを、その文字列で始まるものに限定します。

aws s3api list-objects-v2 --bucket labex-team-documents --prefix finance/

Contents で finance/2026-09/revenue.csv を見つけてください。hr/welcome.txt は finance/ で始まらないため、この応答に人事部門のオブジェクトはありません。プレフィックスがフィルターするのは名前であり、カスタムメタデータではありません。department=finance だけでは、異なる名前のキーがこの結果に含まれることはありません。

head-object は、本文をダウンロードせずにオブジェクトのプロパティを取得します。プレフィックスを含む完全なキーを指定します。

aws s3api head-object --bucket labex-team-documents --key finance/2026-09/revenue.csv

応答には、text/csv に設定された ContentType、保存されたバイト数を示す ContentLength、department と period を含む Metadata オブジェクトがあります。タイムスタンプや ETag などの他のフィールドも、保存されたオブジェクトを説明します。メタデータは元のローカルファイルではなく、保存されたコピーに関連付けられています。

AWS View で finance/2026-09/revenue.csv をクリックします。展開されたカードは、Content-Type、カスタムメタデータ、実際に保存された CSV の内容を表示します。CLI の応答と比較してください。

この例は、ストレージから読み取ったプロパティと内容を表示する、展開された財務部門のオブジェクトです。

財務部門のキー、メタデータ、CSV の内容

S3 URI をコピー元、新しいローカルファイル名をコピー先にしてダウンロードします。ファイル名はキーと同じである必要はありません。

aws s3 cp s3://labex-team-documents/finance/2026-09/revenue.csv retrieved-revenue.csv

取得した内容を確認します。

cat retrieved-revenue.csv

先ほど確認したものと同じ CSV の二行が表示されるはずです。cmp は二つのローカルファイルをバイト単位で比較し、一致した場合は何も表示しません。シェルの && は、比較が成功した場合だけメッセージを表示します。

cmp documents/revenue.csv retrieved-revenue.csv && echo 'Report content matches'
Report content matches

これにより、取得時にレポートのバイト列が保持されたことを証明できます。ローカルファイルには内容が保存されています。S3 に保存されたプロパティを確認したい場合は、head-object を使ってください。

財務部門のプレフィックスだけを削除する

このステップでは、人事部門の文書を保持しながら、財務部門の文書を削除します。

共有バケットには、無関係な作業が含まれる場合があります。バケット全体を削除したり、ルートを再帰的な削除の対象にしたりすると、両方の部門に影響します。代わりに、特定の finance/ プレフィックスを選びます。末尾のスラッシュはプレフィックスの一部であり、finance-archive.csv のような名前を対象範囲から除外します。

aws s3 rm はオブジェクトを削除します。--recursive は一致するすべてのキーに操作を適用し、--dryrun は実行せずに予定される操作を一覧表示します。まず正確な範囲をプレビューします。

aws s3 rm s3://labex-team-documents/finance/ --recursive --dryrun

ドライランの出力に表示される名前は finance/2026-09/revenue.csv だけです。hr/welcome.txt が表示されてはいけません。この時点ではオブジェクトはまだ存在しています。

確認した操作を実行するには、--dryrun を外します。

aws s3 rm s3://labex-team-documents/finance/ --recursive

出力は財務部門のキーの削除を示します。バケットをもう一度問い合わせます。

aws s3 ls s3://labex-team-documents/ --recursive

hr/welcome.txt だけが残ります。AWS View で残ったオブジェクトを展開してください。歓迎メッセージと department=hr のメタデータは変わっていません。正常な一覧表示と読み取りによって、別の部門の文書を保持しながら、意図した範囲を削除したことを確認できます。

残った実験用リソースを削除する

このステップでは、残った実験用文書と空のバケットを削除します。

財務部門の操作中は、人事部門のオブジェクトを保護しました。両部門のリソースはこの演習のものであるため、今は残ったオブジェクトを正確なキーで削除できます。広い再帰的な対象は使いません。

aws s3 rm s3://labex-team-documents/hr/welcome.txt

出力は人事部門のキーの削除を示します。格納先を削除する前に、バケットの内容を確認します。

aws s3 ls s3://labex-team-documents/ --recursive

成功したコマンドは、オブジェクトの行を表示しません。rb(remove bucket)で削除する前に、バケットは空である必要があります。

aws s3 rb s3://labex-team-documents

出力は remove_bucket: labex-team-documents です。ストレージが引き続き応答することを確認します。

aws s3 ls

この新しい作業環境には、バケットの行がありません。AWS View は No buckets を表示します。Unavailable というメッセージであれば、ページは状態を確認できていません。ローカルの元文書とダウンロードした文書は、引き続き確認できます。

まとめ

完全なオブジェクトキーとプレフィックスで二つの部門の文書を整理し、標準メタデータとカスタムメタデータを付け、S3 API でプロパティを確認して、ダウンロードしたバイト列と元ファイルを比較しました。また、プレフィックスに範囲を限定した削除をプレビューし、無関係な文書を保持してから、残った実験用リソースを削除しました。

予測しやすい名前に基づくグループ化にはプレフィックスを使い、オブジェクトの説明にはメタデータを使ってください。削除範囲を慎重に選び、残すべきリソースを確認してください。