S3とは?
Webサーバーとしても使うことができるストレージサービスのことです。汎用的なファイル置き場として様々な場面で使われます。AWSのサービス分類ではマネージドサービスに当たります。実務では画像置き場としての用途として広く使われていることが多いです。
特徴
- 月に3円/1GBと安価
- ほぼ稼働率100%と高い耐久性
- 容量が無制限(1ファイル5TBまで)
- バケットやオブジェクトに対してアクセス制限できる。
- どのオブジェクトに対してもほぼ同速でアクセス可能
耐久性
複数AZ(データセンター)に配置しているので耐久性が高い。
どのオブジェクトにも同速でアクセス可能
普通のファイルシステムのようにフォルダ分けはせずにフラットにデータが配置されるので同速で高速にアクセスができます。
概念
バケット
- オブジェクト(ファイル)の保存場所で、名前はグローバルでユニークにします。
オブジェクト
- データの本体(ファイル)でURLが付与されます。
- バケット内に存在し、オブジェクト数に制限はありません。
キー
- オブジェクトの格納URLパスです。
用途
静的コンテンツ(画像)の配信
メリット
- Webサーバのストレージがいっぱいになるのを防げる。
- HTMLアクセスと画像アクセスを分けて負荷分散出来る。
- Webサーバの台数を増やしやすい。(画像をWebサーバに保存しているとWebサーバ間で画像の同期が必要になり難しくなる。)
- CloudFront(コンテンツ配信サービス)から配信する形式にすることで画像配信を高速化出来る。
バッチ連携用のファイル置き場
S3にCSV等のバッチ連携用ファイルを配置して、そのファイルをバッチファイルから参照して処理を行います。
ログ出力先
定期的にS3にログファイルを送信します。
ログの例
- AWSのマネジメントコンソールの操作ログ
- サーバーのアクセスログ
静的ウェブホスティング
これも非常にポピュラーなユースケースです。ランディングページ等の静的なウェブサイトをS3から直接公開します。(Webサーバがなくても静的ページなら直接公開できます。)
容量が多くなりがちなデータ(写真や動画など)はEC2のEBSに配置するのではなくS3にオフロードして配信負荷を分散させます。
CloudFrontと相性がよくS3のデータをキャッシュしてくれます。
バックアップ/DRストレージ用途
オンプレからでもクラウド上で動かしているサービスだとしてもどちらの用途としても活用できます。海外のリージョンを活用してマルチリージョン間のバックアップを行うこともできます。
ライフサイクルルール
配置されて使用頻度が低くなったものを自動で移動する設定をします。日付が経過するごとに「標準クラス→STANDARD-IA→Glacier」に移動させる設定にするのが通常でしょう。
STANDARD-IAクラス
普通のクラスよりも安いです。使用頻度が低いものを移動する。
Glacier
アーカイブとして保存する。
互換ストレージminioとは?
AWSのs3の互換ストレージです。開発時にs3をそのまま使用してしまうとアップロードのテストをする際にお金がかかってしまうので、開発環境だけはminio環境を作り、本番環境はs3を使うというようなシステム設計がされている場合が多いです。
開発設計
dockerにminioコンテナというコンテナを作ってそこにminioをインストールしてコンテナで運用するケースが多いでしょう。minioにアクセスするためには下記のアクセスキー とシークレットキーの情報が必要になりますが、どちらもコンテナの環境変数に設定(docker-compose.ymlに設定)しておく運用になるでしょう。
- MINIO_ACCESS_KEY
- MINIO_SECRET_KEY
バケットの作成
名前とリージョン
バケット名
他のユーザーと被らない一意の名前を付ける必要があります。
リージョン
アプリケーションと同じリージョンにするのが望ましいです。日本で利用するのであれば「アジアパシフィック(東京)」を選択するのが良いでしょう。
既存のバケットから設定をコピー
もし既存に何かしらバケットを作成していた場合は設定作業を楽できます。
オプションの設定
バージョニング
同じファイル名を保存した場合に別バージョンとして記録するかを指定できます。そこまで厳密でなければ設定しなくても良いでしょう。ユーザーやアプリケーションの誤操作による削除対策に有効です。
サーバーアクセスのログ記録
バケット(S3)に対するアクセスログ詳細を記録する設定です。監査対策にもなるので本番環境であれば設定しておきたいです。学習用であれば余計に費用がかかってしまうので大丈夫でしょう。
Tags
オブジェクトレベルのログ記録
さらに詳細なログ記録ができます。
デフォルト暗号化
S3に保存されるオブジェクトを自動的に暗号化するかどうかの設定を行えます。
詳細設定:オブジェクトのログ
管理:CloudWatch リクエストメトリクス
バケットのリクエストやデータ転送を詳細にモニタリングできます。
アクセス許可の設定
ブロックパブリックアクセス(バケット設定)
バケットとオブジェクトに外からのアクセスを禁止するかどうかの設定になります。外からアクセスされたくないファイルを配置する場合はこちらをチェックするようにすると良いでしょう。インターネット上で利用する画像とかの用途でS3を使用するのであればチェックを外します。
システムのアクセス許可の管理
バケットに対するリクエストの詳細ログを記録する設定になります。
確認
問題ないかチェックします。
IAMユーザーの作成
S3にアクセス用のIAMユーザーを作成します。
アクセスの種類
「プログラムによるアクセス」を選択します。
アクセス許可の設定
「既存のポリシーを直接アタッチ」を選択して、「AmazonS3FullAccess」を選択します。
AmazonS3FullAccess
S3に対する操作に関してはなんでもできるという権限です。
この記事へのコメントはありません。