どうも、白帯かっぱ@inokara)です。うっす。

はじめに

前回に続き…AWS Black Belt Techシリーズ Amazon Simple Storage Service (Amazon S3) を読んで自分なりに要点を纏めてみます。(これまった、結果として写経になりました…)


参考

以下、「Agenda」に従って纏めていきます。


Agenda

  • Amazon が持つストレージサービス
  • Amazon Simple Storage Service(S3) とは
  • Amazon S3 の機能
  • Amazon S3 のアドバンス Tips
  • まとめ

AWS ストレージサービスのゴール(目指すもの)

お客様がデータを暗視して預けられるサービスの提供。

  • データが安全に保管されている
  • データが取りたい時に常に取得可能
  • データを保存したい時に常に保存可能
  • データが誰がいつアクセス出来るを完璧にコントロール出来る
  • データ保存が低価格で実現出来る

Amazon が持つストレージサービス

サービス 一言
S3(えすすりー) 安価かつ高い耐久性を持つオンラインストレージサービス
Glacier(ぐれいしあ) 超安価かつ高い耐久性を持つコールドストレージサービス
Storage Gateway(すとれーじ・げーとうぇい) オンプレミ環境と連携したバックアップ&ストレージサービス
EBS(いーびーえす) 仮想サーバ(Amazon EC2) にマウント出来るディスクサービス

Amazon S3 とは?

  • Amazon S3 とは Web 時代のストレージ
  • ユーザーはデータを安全にどこからでも保存
  • AWS の主力サービスの一つ。2006 年から開始
  • 開発者が Web スケール なコンピューティングを可能にするように設計された
    • 高いスケーラビリティ
    • 高い信頼性・堅牢性
    • セキュア
    • 高速
    • 低価格
  • 最近の値下げでクラウドストレージの新たな時代へ
  • 一兆(Trillions)オブジェクト!!(なんか凄い)
  • 1500 万トランザクション/sec !!(これまった凄い)

S3 の概要

  • データを置くだけ!(インフラ、電源、気にしない、容量無制限)
  • 世界中の 8 拠点(リージョン)から選択
  • 保存するデータは自動で暗号化することも可能
  • 高い耐久性でデータを失わない:99.999999999%(イレブン・ナイン(※イレブンピー◯ムではない))
  • 安価な従量課金(例:1GB/つき – 約 3 円)

S3 の価格(東京リージョン)

  • ストレージ価格、大幅値下げ!(価格表は資料の 10 ページ)
  • しかも自動的用
  • 低冗長ストレージ(RRS)は二拠点への複製により堅牢性が 99.99%(2014 年 4 月から…)
  • データ転送量 IN は無料
  • データ転送量 OUT は有料(最初の 1GB/月 は無料、以降は 10TB/月 までが $0.201/GB 等)
  • AWS リージョン間データ転送又は CloudFront でのデータ転送は $0.090/GB

リクエスト料金は以下の通り。

リクエストタイプ 価格
PUT/COPY/POST/LIST リクエスト $0.0047/1000 リクエスト
削除リクエスト 無料
GET 及びその他リクエスト $0.0037/10,000 リクエスト

Amazon S3 のよくある利用例

  • コンテンツの保存と廃止
    • メディア・エンターテイメントのコンテンツ
    • ソフトウェアの配信
  • 大規模データ分析のストレージ・データオリジナル
    • オンラインストレージ
    • アプリケーションそのもののストレージ
  • バックアップやディザスタリカバリ
    • 各サーバのバックアップ
    • データベースのバックアップ
    • 個人的なバックアップ

AWS の各サービス自体もユーザー

  • AWS サービスの中心に S3 がある
  • AWS の中心で S3 と叫ぶ
  • 代表的なユーザーは EC2 / EBS / EMR / DynamoDB

Amazon S3 の用語

  • バケット
    • オブジェクトの保存場所
    • 各アカウントで最大 100 個まで
    • 名前はユニークであること
  • オブジェクト
    • Amazon S3 に置くファイルで URL が与えられる
    • バケット内には無制限にオブジェクトを置くことが可能
    • 最大サイズは 5TB/オブジェクト→デカイ!
  • キー
    • オブジェクト毎に付与されるユニークなキー
  • ACL
    • アクセスコントロールリスト

S3 の構成

  • バケットにオブジェクトがぶら下がっている
  • 詳細は資料の 15 と 16 ページ

Amazon S3 の機能

S3 の基本的な使い方

  • ファイルの PUT/GET/DELETE/LIST
    • これだけ
    • シンプル
    • データサイズ、数も気しなくて良い
  • サードパーティツールで FTP ライクに利用
  • SDK で様々な言語から直感的に利用可能

改めて Amazon S3 の機能

  • マルチパートアップロード
  • Web サイト機能
  • バージョニング
  • サーバアクセスログ
  • S3 セキュリティ機能
  • データの暗号化
  • オブジェクトの期限付き保存
  • CORS 対応
  • Web ページリダイレクト
  • S3-Glacier 連携機能

Amazon S3 マルチパートアップロード

  • 巨大なオブジェクトを複数のチャンクに分割してアップロード
    • 各チャンクは 5GB 以下
    • チャンクがアップロードされたら、単一オブジェクトに結合
  • 各 SDK にはマルチパートアップロード機能がついている為すぐに利用可能

Amazon S3 Web サイト機能

  • 静的な Web サイトのホスティングを S3 で!!
    • ファイルをアップロードして Web サイト機能を ON
    • 簡単
  • Web サイト機能の嬉しい点
    • データが消える心配が無い
    • スケールする Web サーバーが構築の必要なくすぐに使える
    • 可用性も非常に高く Web サーバーの管理が不要!

Amazon S3 バージョニング

  • ユーザーの誤操作によるオブジェクトの削除防止に有効
  • オブジェクトをバージョン管理下におく
    • 保存、検索、リストアが可能
    • バージョニング中はオブジェクトの削除は出来ない
    • 課金はバージョニングした数だけ発生する

Amazon S3 サーバアクセスロギング

  • Amazon S3 バケットへアクセスログを保存
    • デフォルトでは出力しない
  • API/SDK で設定可能
  • アクセスログのデリバリでは費用は発生しない
    • ログの保存では費用は発生する
    • いつでも削除可能
    • アクセスログへのアクセスでは若干費用が発生する

Amazon S3 の認証機能

  • Amazon S3 を含む全 AWS サービスではセキュリティは最優先事項
  • 認証の無いアクセスからはデータは完全に保護
  • オブジェクトは全てフルコントロール可能
  • 特定ユーザーに対して権限を与えることも可能
  • 方法
    • IAM ポリシー
    • バケットポリシー
    • ACL

AWS Indentity and Access Management(IAM)

  • アカウント内で複数ユーザーを作成してセキュリティクレデンシャルや権限を付与する事が可能
    • S3 のバケットにオブジェクトの PUT/LIST/GET 等
  • IAM で出来る事
    • IAM ユーザーレベルでのコントロール
  • アクセスポリシー言語を記述する

Amazon S3 バケットポリシー

  • Amazon S3 バケットレベルのポリシーベースのコントロール
  • バケットオーナーだけが適用可能
    • バケットレベルでの Allow/Deny
    • バケット内のオブジェクトへの権限を Deny
    • バケットオーナーがオブジェクトオーナーだった場合のみオブジェクトに適切な権限を与える
  • アクセスポリシー言語
    • JSON フォーマット
  • バケットポリシーの例は資料の 28 ページ

Amazon S3 Access Control List

  • バケットからオブジェクトへのコントロール
  • バケットの ACL をオブジェクトは継承しない
  • 作成と適用はいつでも可能
  • ACL は 100 個作成可能
    • Owner
    • Email
    • Any AWS account
    • Anyone
  • パーミッション
    • READ – Object or bucket
    • WRITE – Create,overwrite,delete objects in bucket
    • READ_ACP – Read ACL for bucket or objetc
    • WRITE_ACP – Overwrite ACL for bucket or object
    • FULL_CONTROL – ALL of the above
    • Self Control – 方舟に曳かれて

データの暗号化

  • サーバサイド暗号化
  • クライアントサイド暗号化

サーバサイド暗号化

  • マネジメントコンソールから実施する
  • GUI ツールで実施する
  • コードで実施する

クライアントサイド暗号化

  • GUI ツールで実施する
  • コードで実施する

オブジェクトの期限付き保存

  • バケット単位でオブジェクトの生存期間を指定可能
    • Prefix 単位
    • 期間・日付で指定可能

CORS サポート

  • CORS(Cross Origin Resource Sharing)
    • クロスドメインでリソース取得が可能
    • より簡単にリソースの共有が可能
  • 動作イメージは資料の 34 ページ

Web ページリダイレクト

  • Amazon S3 で Web ページのリダイレクトが可能
  • リダイレクトルールを渡して、条件を満たす場合のみリダイレクト
    • キーのプレフィックスを一部変更
    • 削除したディレクトリから別ページへ
    • HTTP エラーコードで

S3-Glacier 連携機能

  • S3 に格納されたファイルを自動的に Glacier に退避
  • AWS で安価な階層化ストレージを実現
    • ルールベースで一定期間経過した S3 上のファイルを自動的に Glacier に退避
    • インデックス情報は S3 に管理
    • 簡単な操作で Glacier に退避されたファイルを S3 上に取り出し可能(3 〜 5 時間)
    • Glacier に退避すると格納コストが 1/10 に!

S3 アドバンスド Tips

Amazon S3 をうまく使うコツ(パフォーマンス)

  • 大前提:ほとんどのケースでは普通に使ってもらえばいいだけ
  • 定常的に 100RPS 以上出す場合にはコツが必要
    • ワークロードは 2 つ
    • GET/PUT/POST 等が混在している場合→ネーミング
    • GET のみ→CloudFront の利用を検討しましょう
  • ネーミングルールが大事
    • バケット名/ディレクトリ名/オブジェクト名でユニークなキー名
    • 先頭部分で差異があればあるほどパーティションが異なる
    • 先頭部分にランダム文字列を入れる(資料 40 ページ目を参照)

その他のテクニック

  • オブジェクトをハッシュ名にする
    • オリジナル名はメタデータとして DynamoDB 等に保管する
    • 短いハッシュでファイル名に追記する
  • エポック秒のリバースを追加する

LIST との相性

  • ランダム文字列は LIST と相性が悪い
  • LIST したい = グルーピングしたい形で保存
    • バケットで出来ればベスト
    • ディレクトリレベルでも問題無し
    • Prefix パラメータ指定で LIST する(aws s3api list-objects –bucket ${バケット名} –prefix ${指定 Prefix})

大量 PUT をする場合

  • 秒間数百以上の PUT する場合にはエラーコードに注意する
    • 503 が返ってきたらクライアント側でも送信側でも軽減する(エクスポネンシャルバックオフ)

マルチパートアップロードの推奨

  • 出来るだけマルチパートアップロードを利用しましょう
  • AWS CLI 等の最近のツールでは自動的にマルチアップロードに切り替わる
  • 各 SDK にもマルチパートアップロード機能が備わっている

マルチパートアップロードでの適切なサイズ設定

  • バランスの見極めが大事
    • 小さいチャンクサイズでの大量ファイルアップロードはコネクションオーバーヘッドで利点が損なわれる可能性あり
    • 巨大すぎるファイルサイズでもマルチパートアップロードの利点とはならない
  • 帯域が太い場合には 20 〜 25MB/1 チャンク程度を最初の設定値として推奨
  • モバイルやより帯域に懸念がある場合には 10MB 程度を最初の設定値として推奨

レンジ GET による GET の高速化

  • レンジ GET を利用すれば、マルチスレッド環境ではより高速にダウンロード可能
  • CloudFront はレンジ GET をサポートしている
  • マルチパートでのアップロード時と同じチャンクサイズを利用する

マルチパートアップロードでの HTTPS 利用

  • ファイルの暗号化は CPU に負荷が掛かる為、CPU インテンシブ
  • Amazon S3 では AES-256 を推奨
    • デフォルトでも AES-256
  • Intel AES-NI ハードウェアを利用すれば、暗号化のパフォーマンス向上が見込める
    • EC2 インスタンスでもサポートしている(特に m3/c3 等)

(もう一度言います的な)Amazon S3 を通じて実現したいこと

  • お客様がデータを安心して預けられるサービスの提供
    • Amazon S3 上のデータは常に安全に保管
    • Amazon S3 内データはいつでも取得可能
    • Amazon S3 内データを常に保存可能
    • Amazon S3 内へのデータアクセスは完璧にコントロール出来る
    • データ保存が低価格で実現出来る

〆(個人的な締め)

  • Amazon S3 は耐久性 99.999999999%(イレブン・ナイン)
  • 世界中に 8 箇所
  • 1G あたり 3 円(@東京リージョン)
  • 転送量 IN は無料、OUT は有料(価格に関してはこちらが解りやすい)
  • パフォーマンス向上を目的する場合にはバケット名はユニークに(ランダム文字列をかます)
  • ファイルのアップロードはマルチパートアップロードを推奨
  • CLI や SDK では基本的にはマルチパートアップロード機能を有する

ということで、Amazon S3 奥深いですな。

元記事はこちらです。
AWS 白帯シリーズ(17) AWS Black Belt Techシリーズ Amazon Simple Storage Service (Amazon S3) を写経する