gitkadoの気まぐれ日記

島根在住エンジニアが何かに興味を持ったらブログを更新します

( Where && What ) is S3 ?

概要

Rails開発でファイルアップロード機能を実装しました。
CarrierWave(gem)を使用していたのですが、ストレージ指定で
ドキュメントに「S3」と書いてあり、どこ!? となった過去が‥

そんな謎ワード「S3」がAWSのサービスであると知った今日この頃。
忘れないうちに得た知識を備忘録として残します。

S3(SimpleStrageService)とは

  • オブジェクトストレージサービス
  • 非常に安価
    • 月額3円/GB(120円/ドル換算)
  • 耐久性が優れている
    • 99.999999999%(イレブンナイン)
    • データが吹っ飛ぶ心配はしなくていいレベル
  • バケット
    • トップ階層のフォルダ(イメージ)
    • バケット内にファイルやフォルダを保存する
    • バケット名は全世界で重複できない
  • アクセス管理
    • 利用ユーザやFromIp制御等をバケット単位で設定可能
  • Webサイトホスティング機能
    • S3以外のサービスを使用せずに静的サイトを公開可能

利用ケース

  • 静的コンテンス配信
    • HTMLのIMG参照先をサーバ内ではなくS3配置ファイルで指定
    • サーバで管理するよりローコストで管理が容易
  • ログ等のエクスポート先
    • サーバで作られるログ等のファイルをS3に転送
    • AutoScaling等でサーバが消失する場合もログを残せる
  • バッチ連携用一時ファイル置き場
    • 別サービスと自サービスのデータ受け渡し場所
  • 静的Webホスティング
    • LPのような検索等が発生しないページをサーバレスで公開

サーバからS3を操作する準備

誰の権限で操作するのか設定する必要があります。

以下の手順でアクセスキーを生成して使用することで、
該当ユーザと同様の権限で操作できるようにできます。

  1. IAM>ユーザー 対象のユーザをクリック
  2. 認証情報>アクセスキー作成
    • アクセスキーとシークレットアクセスキーを取得
  3. 以下のコマンドをサーバで実行してアクセスキーを登録
[ec2-user@aws-web-1a ~]$ aws configure
AWS Access Key ID [None]: **アクセスキー**
AWS Secret Access Key [None]: **シークレットアクセスキー**
Default region name [None]: ap-northeast-1
Default output format [None]: json

ap-northeast-1 ‥ 東京リージョン

実際に触ってみた

静的ホスティングサイト作成

  1. 静的ホスティング用のバケットを作成
  2. 作成したバケットにindex.htmlをアップロードする(デフォルト設定でOK)
  3. プロパティ>StaticWebsiteHosting クリック
    1. このバケットを使用してウェブサイトをホストする 選択
    2. インデックスドキュメントにindex.htmlを入力
    3. エンドポイントURLを取得(これでサイトに接続)
  4. アクセス権限>バケットポリシー クリック
    1. バケットポリシーエディターに以下を入力
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*"
        }
    ]
}

"Version": "2012-10-17" ‥ 固定でこの値を使用しましょう
Jsonポリシー要素:Versionについて

まとめ

「S3」はスーパー優秀なファイル置き場。
様々なシステムを陰ながら支える縁の下の力持ちのような存在。

個人的には静的ホスティングに感動した1日でした。

参考

Udemy:手を動かしながら2週間で学ぶAWSの基基本から応用まで