AWSのS3とは何か知りたい方へ
この記事では、その疑問について回答します。
- S3が「お手軽で最強のストレージサービス」だと分かる4つの特徴
- S3バケットの作成方法
- S3バケットにファイル(Dockerイメージ)をアップロードする方法
S3の特徴については以下の書籍の情報をシンプルにまとめています。
S3バケットの作成、Dockerイメージのアップロードは、以下の記事のプログラム実装のために私が実施した実際の手順を引用しました。

Contents
S3とは超お手軽に使える最強のストレージサービス

S3は、AWSが提供するシンプルで信頼性の高いインターネットストレージサービスです。
S3内に保存したコンテンツを「インターネット上に」配信する際に真の効果を発揮します。
S3にはストレージの構築と運用のスキル&コストが不要です
Webサーバーやアプリケーションサーバーがコンテンツを保存・取得するための共有ストレージとしてS3を利用することには以下のメリットが存在します。
- RAID構成などの専門知識が無くても共有ストレージを構築可能
- $0.025/GBとコストが圧倒的に低い(2018/11/29時点|東京リージョン|標準ストレージの価格)
- ストレージ障害に強い
- 保存可能なデータ総量は無制限
これまで、堅牢な共有ストレージを構築・運用するには専門知識を持つエンジニアが不可欠でした。しかしS3を使えば専門エンジニアがいなくとも信頼性の高いストレージ構築・運用が可能なので、従来のストレージに比べて上記のメリットが得られます。
S3には主に2つの使い方があります。
- フロントエンドとして直接コンテンツ配信
- バックエンドとしてサーバーの構成情報やログファイルを保管
S3の基本用語
- オブジェクト:S3へのアップロードするデータ(写真、動画、ドキュメントなど)とほぼ同義
- バケット:オブジェクトの入れ物
S3の持つ4つの特徴
S3が「超お手軽で最強のストレージサービスである」という評価は、これから述べる4つの特徴によって担保されています。
- 高耐久性
- ライフサイクル管理機能
- 高セキュリティ
- 柔軟なアクセス制限
99.999999999%の高耐久性
S3は1つのリージョンにつき3ヶ所以上のデータセンターに複製を持つように設計されています。なので例えば、東京のデータセンターで障害が発生しても、残りの2拠点のデータセンターに保存されているデータによって、障害を全く気にせずに継続利用が可能です。
オブジェクトの保存時に少しレイテンシが発生するのは、3ヶ所のデータセンターに複製しているからです。
ファイルメンテナンスの手間を無くすライフサイクル管理機能
S3をログファイルやバックアップファイルのアーカイブ先として利用する場合、ライフサイクル管理機能によって一定期間を過ぎたファイルを自動削除できます。
旧式のログローテーションバッチは不要です。エンジニアはよりクリエイティブな仕事に集中できますね。
細かな権限設定による高セキュリティ
デフォルトではバケットやオブジェクトの所有者にだけアクセス権限が与えられます。なので「所有者以外はアクセスできない」状態が基本となります。
後述するACLの設定によって、「誰にアクセスを許可するか」を設定します。
3つの方法で設定する柔軟なアクセス制限
次の3つの方法でバケットやオブジェクトへのアクセス制限を設定可能です。
- ACL:Read/Write/FullControlなど従来のアクセス制限に似ており、馴染みのある設定方法。規定ACLも利用可能。
- パケットポリシー:Get/Put/Delete/ListのようにAPIのアクションベースで細かな制限が可能。JSON形式で記述。
- IAMポリシー:IAMユーザー/グループ/ロールに対してのポリシーを設定可能。JSON形式で記述。
IAMポリシーについては以下の記事で解説しています。私はIAMポリシーによるアクセス制限を行なっています。

S3バケット作成とファイルアップロードの方法

S3の仕組みが分かったところで、早速バケットを作ってファイルをアップロードしてみましょう。あなたの初めての「S3オブジェクト」になります。
S3バケット作成方法
AWSコンソールにログインして[サービス]からS3を選択します。[バケットを作成する]をクリックします。

バケット名とリージョンを選択します。リージョンはこだわりが無ければアジアパシフィック(東京)でOKです。

オプションを設定します。今回は特にオプションを設定しませんが、簡単に解説をします。
- バージョニング:オブジェクトに変更を加えたり、同名ファイルをアップロードして上書いても、以前のデータを保持してくれます。
- サーバーアクセスのログ記録:バケットへのアクセスをログに記録します。
- オブジェクトレベルのログ記録:オブジェクトに加えられた変更のログを記録します。
- デフォルト暗号化:オブジェクトを自動で暗号化することでセキュリティをより強化します。

アクセス許可の設定をします。デフォルトの推奨設定でOKです。

最後に設定内容を確認して作成完了です。
S3バケットへのファイルアップロード方法
それではS3バケットにファイルをアップロードします。本記事ではAWS CLI(ターミナルからコマンドでAWSリソースの操作が可能な機能)を使った方法を説明します。
AWS CLIをインストールしていない方は、サクッとpipします。
pip install aws-cli
以下コマンドで、カレントディレクトリ内にある任意のファイルをS3バケットにアップロードできます。
aws s3 cp YOUR_UPLOADING_FILE_NAME s3://YOUR_BUCKET_NAME
YOUR_UPLOADING_FILE_NAME:あなたがアップロードしたいファイル名に変更
YOUR_BUCKET_NAME:先ほど作成したバケット名に変更
AWSコンソールからS3バケットの中身をのぞいてみましょう。私はdeploy_packages.zipという名前で作成したDockerイメージをS3バケットにアップロードしました。
Lambda関数でDockerイメージをS3バケットから呼び出すことで、Lambdaでは利用できないライブラリを使うことができるからです。

以上!
- S3は従来のストレージに比べて「タダ同然で熟練のストレージエンジニアを雇うこと」と同じ価値がある
- S3バケットにアップロードしたファイル(オブジェクト)は他のAWSサービスから簡単に呼び出して利用することができる。