【AWSサービス 基礎編】Amazon S3 でバケットを作成しオブジェクトを管理する

目次

概要

Amazon S3(Simple Storage Service)は、AWS が提供するオブジェクトストレージサービスです。インターネット経由でどこからでもデータを保存・取得でき、容量の制限を意識することなく利用できます。

クラウド上でアプリケーションを構築する際、画像・動画・ログ・バックアップデータなど、さまざまなファイルを保管する場所が必要になります。S3 はこうしたデータの保存先として最も広く使われるサービスであり、高い耐久性(99.999999999%)と可用性を備えています。この記事では、S3 バケットの作成からオブジェクトのアップロード・ダウンロード・削除までの基本操作を体験します。

この記事のメリット

  • Amazon S3 の基本概念(バケット、オブジェクト、キー、ストレージクラス)を理解できる
  • AWS マネジメントコンソールからバケットを作成する手順を習得できる
  • オブジェクトのアップロード・ダウンロード・削除の基本操作を体験できる
  • バケットポリシーとアクセス制御の基本的な考え方を把握できる
  • バージョニングの有効化と動作を確認できる

キャラクター紹介

クラウド資格実践ラボの基礎学習記事では、ルクシーちゃんと代表の土肥が対話形式で AWS 認定試験で必要な知識をハンズオンとともに解説していくブログです。これからこのブログを案内する2人を紹介します。

ルクシーちゃん

クラウド資格に挑戦中の好奇心旺盛なナビゲーター。初学者目線で「これってなんだろう?」と素朴な疑問を投げかけ、知識を引き出していく役どころ。難しい内容も、ルクシーちゃんと一緒なら一歩ずつ理解できると思います!

土肥(とひ)

株式会社Luxyの代表であり同社の元エンジニア。これまでオンプレとAWS環境のインフラを担当。AWS認定資格の学習で得た知識をハンズオンとともに解説するのが得意。直近では新人の教育なども行っており、これから技術を学ぼうという方が納得できるように解説できることに喜びを感じているとのこと。

技術解説

Luxyちゃん

とひさん、Amazon S3 ってよく聞くんですけど、どんなサービスなんですか?

土肥

S3 は「オブジェクトストレージ」と呼ばれる種類のストレージサービスだよ。普通のファイルシステムみたいなディレクトリ階層は持たず、データを「オブジェクト」として一意のキーで管理するんだ。容量制限が実質的に存在しなくて、保存したデータ量と転送量に応じて課金される従量課金モデルだね。

Luxyちゃん

ファイルシステムとは違うんですね。データの管理はどういう仕組みになってるんですか?

土肥

S3 のデータ管理は「バケット」と「オブジェクト」の2つの概念で構成されるよ。

要素説明
バケットオブジェクトを格納するコンテナ。グローバルに一意な名前が必要
オブジェクトS3 に保存されるデータの単位。ファイルの実体(データ)とメタデータで構成される
キーバケット内でオブジェクトを一意に識別する名前。パス区切り(/)を含めることでフォルダのように整理できる
土肥

例えば、バケット名が my-app-bucket、キーが images/photo.jpg の場合、このオブジェクトの S3 URI は s3://my-app-bucket/images/photo.jpg となるんだ。

Luxyちゃん

なるほど、バケットがフォルダみたいなもので、その中にオブジェクトが入ってるイメージですね!ところで、保存するデータの種類によってコストを最適化できたりするんですか?

土肥

いいところに気づいたね。S3 はデータのアクセス頻度や要件に応じて複数のストレージクラスを提供しているよ。

ストレージクラス特徴ユースケース
S3 Standard高頻度アクセス向け。高い可用性と耐久性頻繁にアクセスするデータ
S3 Standard-IA低頻度アクセス向け。Standard より保存コストが低いバックアップ、災害復旧データ
S3 One Zone-IA単一 AZ に保存。IA よりさらに低コスト再作成可能なデータの低頻度アクセス
S3 Glacier Instant Retrievalアーカイブ向け。ミリ秒単位の取り出し四半期に1回程度アクセスするアーカイブ
S3 Glacier Flexible Retrievalアーカイブ向け。取り出しに数分〜数時間年に1〜2回アクセスするアーカイブ
S3 Glacier Deep Archive最も低コスト。取り出しに12時間以内長期保存が必要なコンプライアンスデータ
S3 Intelligent-Tieringアクセスパターンに基づき自動でクラスを移動アクセスパターンが予測できないデータ
Luxyちゃん

こんなに種類があるんですね。アクセス頻度が低いデータほどコストを抑えられるってことですね。

Luxyちゃん

でも、間違えてファイルを上書きしちゃったらどうなるんですか?元に戻せるんでしょうか……。

土肥

そういう心配に対応できるのが「バージョニング」だよ。バージョニングを有効にすると、同じキーのオブジェクトを上書きアップロードしても、以前のバージョンが保持されるんだ。誤った上書きや削除からデータを保護する仕組みだね。バージョニングの状態は以下の3つがあるよ。

状態説明
無効(デフォルト)バージョニングが設定されていない
有効すべてのオブジェクトのバージョンが保持される
一時停止新しいバージョンの作成が停止されるが、既存のバージョンは保持される
Luxyちゃん

バージョニングがあれば安心ですね!あと、S3 に保存したデータのアクセス制御はどうやって管理するんですか?

土肥

S3 のアクセス制御にはいくつかの仕組みがあるんだ。

仕組み説明
バケットポリシーバケット単位で JSON 形式のポリシーを設定する。パブリックアクセスの許可・拒否など
IAM ポリシーIAM ユーザーやロールに対して S3 操作の権限を付与する
パブリックアクセスブロックバケットやアカウントレベルでパブリックアクセスを一括でブロックする
ACL(アクセス制御リスト)オブジェクト単位での制御。現在は無効化が推奨されている
Luxyちゃん

けっこういろいろあるんですね……。どれを使えばいいか迷いそうです。

土肥

基本的にはバケットポリシーと IAM ポリシーを使い分けるのが一般的だよ。パブリックアクセスブロックはデフォルトで有効になっているから、意図しない公開を防いでくれるんだ。ACL は今は無効化が推奨されているから、新規で使うことはほとんどないね。

Luxyちゃん

わかりました!それでは実際にバケットを作って触ってみましょう!

実践

ここでは、S3 バケットを作成し、オブジェクトのアップロード・ダウンロード・削除と、バージョニングの動作を体験します。

前提条件

  • リージョン: ap-northeast-1(東京)
  • AWS マネジメントコンソールにログイン済み
リソース種別リソース名用途
S3 バケットmy-first-s3-bucket-<アカウントID>ハンズオン用バケット

バケット名はグローバルに一意である必要があるため、AWS アカウント ID などを付与して重複を避けてください。

バケットを作成する

  • AWS マネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します
  • 上部の検索バーに S3 と入力し、表示された「S3」を選択します
  • 「バケットを作成」をクリックします
  • 以下を設定します
  • バケット名: my-first-s3-bucket-<アカウントID>(例: my-first-s3-bucket-123456789012
  • AWS リージョン: アジアパシフィック(東京)ap-northeast-1
  • 「パブリックアクセスをすべてブロック」がチェックされていることを確認します
  • その他の項目はデフォルトのままにします
  • 「バケットを作成」をクリックします
S3 バケット作成画面(バケット名とリージョンの入力)

バケット一覧画面に戻り、作成したバケットが表示されていることを確認します。

バケット一覧画面(作成したバケットが表示されている状態)

オブジェクトをアップロードする

  • バケット一覧から作成したバケット名をクリックして開きます
  • 「アップロード」をクリックします
  • 「ファイルを追加」をクリックし、任意のファイル(テキストファイルや画像など)を選択します
  • その他の設定はデフォルトのままにします
  • 「アップロード」をクリックします
オブジェクトのアップロード画面(ファイルが追加された状態)

アップロード完了画面が表示されたら「閉じる」をクリックします。バケット内にアップロードしたオブジェクトが表示されていることを確認します。

バケット内のオブジェクト一覧(アップロードしたファイルが表示されている状態)

オブジェクトをダウンロードする

  • バケット内のオブジェクト一覧から、ダウンロードしたいオブジェクトのチェックボックスを選択します
  • 「ダウンロード」をクリックします

ファイルがローカルにダウンロードされます。

フォルダを作成してオブジェクトを整理する

S3 には実際のフォルダ構造はありませんが、コンソール上ではフォルダのようにオブジェクトを整理できます。

  • バケット内で「フォルダの作成」をクリックします
  • フォルダ名に images と入力します
  • 「フォルダの作成」をクリックします

作成した images フォルダをクリックして中に入り、「アップロード」から任意のファイルをアップロードします。このオブジェクトのキーは images/<ファイル名> となります。

バージョニングを有効にする

  • バケットのトップ画面に戻り、「プロパティ」タブを選択します
  • 「バケットのバージョニング」セクションの「編集」をクリックします
  • 「有効にする」を選択します
  • 「変更の保存」をクリックします
バケットのバージョニング編集画面(「有効にする」を選択した状態)

バージョニングの動作を確認する

  • 「オブジェクト」タブに戻ります
  • 最初にアップロードしたファイルと同じファイル名で、内容を変更したファイルをアップロードします
  • アップロード完了後、オブジェクト一覧で「バージョンの表示」トグルをオンにします

同じキーのオブジェクトに対して複数のバージョンが保持されていることが確認できます。

バージョン表示をオンにした状態のオブジェクト一覧(同一キーに複数バージョンが表示されている)

オブジェクトを削除する

  • オブジェクト一覧で削除したいオブジェクトのチェックボックスを選択します
  • 「削除」をクリックします
  • 確認画面で「完全に削除」と入力し、「オブジェクトの削除」をクリックします

バージョニングが有効な場合、「バージョンの表示」がオフの状態で削除すると、削除マーカーが付与されるだけでデータ自体は残ります。「バージョンの表示」をオンにすると、削除マーカーと以前のバージョンが確認できます。

削除後のバージョン表示(削除マーカーと以前のバージョンが表示されている状態)

まとめ

  • Amazon S3 はオブジェクトストレージサービスであり、バケットとオブジェクト(キー)の2層構造でデータを管理する
  • バケット名はグローバルに一意である必要がある
  • ストレージクラスを使い分けることで、アクセス頻度に応じたコスト最適化が可能
  • バージョニングを有効にすると、オブジェクトの上書き・削除時に以前のバージョンが保持される
  • パブリックアクセスブロックはデフォルトで有効であり、意図しない公開を防止する
  • バージョニング有効時の削除は削除マーカーの付与であり、データ自体は残る

参照先

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社Luxy(https://luxy-inc.com)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した会社を引き継ぎ、代表に就任。

目次