はじめに
レポート作成チームは日次売上レポートを保存し、現在のコピーを取得する必要があります。S3 バケットを作成してレポートをアップロード、更新し、ダウンロードを確認して、練習用リソースを削除します。
最初に LabEx で AWS を使い始める を完了してください。この新しい VM には CLI 接続と report.txt が準備済みで、個人の AWS へのログインや以前のリソースは必要ありません。コマンドには 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 オブジェクトストレージ、アップロード、更新、ダウンロード。
- Data Engineer – Associate (DEA-C01) · タスク 1.1: 基礎演習:S3 オブジェクトストレージ、アップロード、更新、ダウンロード。
ストレージバケットを作成する
このステップでは、日次売上レポート用のバケットを作成し、AWS View で観察します。
作業ディレクトリに移動します。cd はターミナルの現在のディレクトリを変更します。この実験のローカルファイルはすべて、このディレクトリを使います。
cd /home/labex/project
準備済みの公式 CLI のバージョンを確認します。
aws --version
出力は aws-cli/2.37.6 で始まります。イメージがツールを既に提供しているため、ストレージの操作に集中できます。
Amazon S3 はファイルの内容をオブジェクトとして保存します。バケットはそれらのオブジェクトを格納し、キーはその中の一つのオブジェクトの名前です。まず格納先を作成し、次にレポートをアップロードします。
labex-backups を作成します。aws s3 mb の s3 はオブジェクトストレージを選び、mb は make bucket(バケットを作成する)を意味します。s3:// プレフィックスはストレージの場所を表し、ローカルフォルダーではありません。
aws s3 mb s3://labex-backups
予想される出力:
make_bucket: labex-backups
list(一覧表示)を意味する ls でバケットを一覧表示します。
aws s3 ls
末尾が labex-backups の行が表示されるはずです。日時は異なります。AWS View のプレビューには、オブジェクトがない labex-backups カードが表示されます。矢印は CLI とストレージのつながりを示し、バケットのノードは実際のリソースへの問い合わせを反映します。
レポートをアップロードして確認する
このステップでは、レポートを S3 オブジェクトとして保存し、プレビューで実際に保存された内容を読み取ります。
ローカルファイルと保存されたコピーは別のものです。アップロードとダウンロードがそれらをつなぎます。

準備済みのローカルファイルを確認します。cat はテキストファイルの内容を表示します。
cat report.txt
予想される出力:
Daily sales: 120 orders
cp は copy(コピーする)を意味します。次の最初のパスはローカルのコピー元、二つ目はコピー先です。バケット名の後の report.txt がオブジェクトのキーです。
aws s3 cp report.txt s3://labex-backups/report.txt
出力は、report.txt から s3://labex-backups/report.txt へのアップロードを示します。
バケットのオブジェクトを一覧表示します。
aws s3 ls s3://labex-backups/
report.txt の行には更新日時、サイズ、キーが表示されます。アップロードは独立した保存済みコピーを作成します。ローカルファイルを編集するだけでは、それは変わりません。
AWS View のバケットカードには 1 個のオブジェクトが表示されます。カードの report.txt をクリックし、内容を展開します。プレビューには Daily sales: 120 orders と表示されるはずです。これはローカルの元ファイルではなく、保存されたオブジェクトを読み取っています。
次の例は、バケットカード内でアップロード済みのレポートを展開した状態です。内容はストレージから読み取られています。

保存されたコピーを更新して取得する
このステップでは、レポートを置き換え、現在保存されているバージョンをダウンロードして、往復しても内容が保持されたことを証明します。
更新したレポートには 145 件の注文が含まれます。printf はテキストを書き込み、\n は改行を追加します。シェルの > 演算子は、指定した名前のローカルファイルの内容を置き換えます。
printf 'Daily sales: 145 orders\n' > report.txt
もう一度アップロードする前に、レポートのプレビューを見てください。保存されたコピーは変わっていないため、引き続き 120 orders と表示されます。
同じキーにアップロードし、現在の内容を置き換えます。
aws s3 cp report.txt s3://labex-backups/report.txt
プレビューは 145 orders になり、オブジェクト数は 1 のままです。キーを再利用すると、そのオブジェクトが更新されます。この実験では、二つ目の名前付きオブジェクトが作成されるわけではありません。
cp の方向を逆にしてダウンロードします。今度は S3 のパスがコピー元で、downloaded.txt は新しいローカルのコピー先です。
aws s3 cp s3://labex-backups/report.txt downloaded.txt
ダウンロードしたファイルを確認します。
cat downloaded.txt
予想される出力:
Daily sales: 145 orders
cmp は二つのファイルをバイト単位で比較します。同じ場合は何も表示せず、正常に終了します。&& は、その比較が成功した場合だけ後続のコマンドを実行します。
cmp report.txt downloaded.txt && echo 'Round trip verified'
予想される出力:
Round trip verified
この比較は、取得した内容が更新後の元ファイルと一致することを証明します。このステップの検証は、S3 を独立して読み取り、保存された内容とダウンロードした内容を比較します。
ストレージを削除する
このステップでは、空でないバケットを削除できない理由を学び、この実験のオブジェクトとバケットを削除します。
rb は remove bucket(バケットを削除する)を意味します。まず、レポートがまだ存在する状態で削除を試します。
aws s3 rb s3://labex-backups
このコマンドは BucketNotEmpty で失敗することが想定されています。この失敗から、リソースの依存関係を学べます。バケットはオブジェクトを格納するため、格納先を削除する前にオブジェクトを削除します。バケットとオブジェクトはプレビューに残るはずです。
rm は正確な S3 パスにあるオブジェクトを削除します。
aws s3 rm s3://labex-backups/report.txt
出力で delete: s3://labex-backups/report.txt を確認できます。オブジェクトはプレビューからなくなり、空のバケットが残ります。
次に、空のバケットを削除します。
aws s3 rb s3://labex-backups
予想される出力:
remove_bucket: labex-backups
サービスが引き続き応答し、残っているバケットがないことを確認します。
aws s3 ls
コマンドはバケットの行を表示せずに完了します。AWS View はリソースカードなしで No buckets を表示します。この状態は正常なサービスへの問い合わせから得られます。接続が切れたページでは削除を証明できません。ストレージのリソースは削除されましたが、ローカルのレポートファイルは引き続き利用できます。
次の削除後の表示では、状態の問い合わせが成功した後、バケットカードが残っていません。

まとめ
公式 AWS CLI を使って、バケットの作成、オブジェクトのアップロードと置き換え、ダウンロード、ファイル内容の比較、ストレージリソースの削除を行いました。AWS View はコマンドと観察可能なリソースの変化を結びつけ、プレビューは実際に保存された内容を表示しました。
レポートの保存の一連の流れを練習しました。バケットでファイルを整理し、ローカルのコピーと保存されたコピーを区別し、ダウンロードを確認して、バケットを削除する前にオブジェクトを削除しました。



