はじめに
あるチームは、一つの S3 バケットに財務部門と人事部門の文書を保存しています。意味のある名前とプロパティを付けてレポートを取得し、最終的な削除まで人事部門の文書を保持しながら、財務部門のグループを削除します。
最初に S3 でファイルを保存して取得する を完了してください。この新しい VM には CLI 接続とローカルの文書が提供され、以前のリソースや個人の認証情報は必要ありません。コマンドには Terminal を使い、隣の AWS View タブで保存されたキー、プロパティ、内容を比較します。
認定試験との関連
このラボでは、次の試験トピックに関連する実践的な演習を行います。
- Cloud Practitioner (CLF-C02) · タスク 3.6: S3 のキー、プレフィックス、オブジェクトメタデータ。
- Solutions Architect – Associate (SAA-C03) · タスク 3.1: S3 のキー、プレフィックス、オブジェクトメタデータ。
- Developer – Associate (DVA-C02) · タスク 1.3: S3 のキー、プレフィックス、オブジェクトメタデータ。
キーを選び、チームの文書をアップロードする
このステップでは、意味のあるオブジェクトキーを使い、一つのバケットで二つの部門の文書を分けます。
ローカルディレクトリは自分のコンピューターにファイルを保存し、バケットは 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 の応答と比較してください。
この例は、ストレージから読み取ったプロパティと内容を表示する、展開された財務部門のオブジェクトです。

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 でプロパティを確認して、ダウンロードしたバイト列と元ファイルを比較しました。また、プレフィックスに範囲を限定した削除をプレビューし、無関係な文書を保持してから、残った実験用リソースを削除しました。
予測しやすい名前に基づくグループ化にはプレフィックスを使い、オブジェクトの説明にはメタデータを使ってください。削除範囲を慎重に選び、残すべきリソースを確認してください。



