勉強用メモ。
Amazon S3まとめ
概要
安価かつ高い耐久性を持つオンラインストレージサービス
ピーク時は秒間150万アクセス。
- 容量無制限
- インフラ、電源気にしないでOK
- 保存するデータは自動で暗号化することも可能
- 高い耐久性(99.999999999%)
- 安価な従課金(例:1GB/月)
データ転送
全てのデータ転送(IN)は課金されない
データ転送(OUT)に課金される。使う容量が増えれば増えるだけ価格はディスカウントされる。
AWSリージョン間データ転送またはCloudFrontでのデータ転送は$0.090/GB
特徴
- 高いスケーラビリティ
- 高い信頼性、堅牢性
- セキュア
- 高速
- 低価格
主な用途
- コンテンツの保存と配信
- 大規模データ分析のストレージ・データオリジナル
- バックアップ、ディザスタリカバリ
用語
- バケット
オブジェクトの保存場所。各アカウントで最大100個まで。名前がユニークな必要有り。 - オブジェクト
AmazonS3 に置くファイルでURLが付与される。バケット内には、無制限にオブジェクトを置くことが可能。1オブジェクトのサイズは5TBまで。 - キー
オブジェクト毎に付与されるユニークなキー - ACL(アクセスコントロールリスト)
バケットとオブジェクトへのアクセスを管理できる。
使い方
- ファイルのPUT/GET/DELETE/LIST
- サードパーティツールでFTPライクに利用
- SDKで様々な言語から利用可能
Amazon S3の機能
-
マルチパートアップロード
巨大なオブジェクトを複数のチャンク(ある程度のまとまり)に分割してアップロード
各チャンクは5GB以下
チャンクがアップロードされたら単一オブジェクトに結合 -
Webサイト機能
静的なWebサイトのホスティングをS3で実現。ファイルをアップロードしてWebサイト機能を有効にするだけ。
データが消える心配なし
スケールするWebサーバが構築の必要なくすぐ使える
可用性も非常に高くWebサーバのマネージなど必要ない -
バージョニング
ユーザーによる誤操作による削除防止に有効
オブジェクトをバージョン管理下に置く
保存、検索、リストアが可能。バージョニング中はオブジェクトは削除されない
課金はバージョニング分かかる -
サーバアクセスログ
AmazonS3バケットへのアクセスログを保存。デフォルトでは出力しない
API/SDKで設定可能
アクセスログのデリバリでは課金なし。アクセスログの保存で課金。ただしいつでも削除可能。
アクセスログへのアクセスについては若干の課金あり。 -
S3セキュリティ機能
AmazonS3の認証機構
認証のないアクセスからはデータは確実に保護
オブジェクトは全てフルコントロール可能
特定ユーザーに対して権限を与えることももちろん可能
AWS Identity and Access Management (IAM)
アカウント内で複数ユーザーを作成し、セキュリティクレデンシャルや権限を付与することが可能
IAMはIAMユーザーレベルでのコントロールが可能
アクセスポリシー言語を記述可能
AmazonS3バケットポリシー
AmazonS3バケットレベルのポリシーベースコントロール
バケットオーナーだけが適用可能
バケットレベルでのAllow/Deny
バケット内のオブジェクトの権限のDeny
バケットオーナーがオブジェクトオーナーだった場合のみオブジェクトに適切な権限を与える
アクセスポリシー言語を記述可能
JSON Format
AmazonS3 Access Control List
バケットからオブジェクトへのコントロール
バケットのACLをオブジェクトは継承しない
ACLは100個作成可能
Owner
Email
Any AWS account
Anyone
パーミッション
READ
WRITE
READ_ACP
WRITE_ACP
FULL_CONTROL
- データの暗号化
サーバサイド暗号化
マネージメントコンソールから実行する
GUIツールで実施する
コードで実施する
クライアントサイド暗号化
GUIツールで実施する
コードで実施する
-
オブジェクトの期限付き保存
バケット単位でオブジェクトの生存期間を指定可能
Prefix単位
期間・日付で指定可能 -
CORS対応
CORS(Cross Origin Resource Sharing)
クロスドメインでリソースの取得が可能
より簡単にリソースの共有が可能 -
Webページリダイレクト
リダイレクトルールを渡して条件を満たす場合のみリダイレクト -
S3-Glacier連携機能
Amazon Glacier ・・・ きわめて低コストのストレージサービス。ストレージのセキュリティ、耐久性、柔軟性を特徴としており、
データのバックアップやアーカイブに最適。Amazon Glacier では、1か月あたり 0.01 USD/GBという低額で安心してデータを保管可能。
Amazon Glacier を利用すると、ストレージの運用と規模拡大/縮小に伴う管理作業を AWS に任せることができるので、
容量計画、ハードウェア準備、データレプリケーション、ハードウェア障害の検出と修復、時間のかかるハードウェア移行を解決。
S3に格納されたファイルを自動的にGlacierに退避
AWSで安価な階層化ストレージを実現
ルールベースで一定期間経過したS3上のファイルを自動的にGlacier退避
インデックス情報はS3で管理
簡単な操作でGlacierに退避されたファイルをS3上に取り出し可能(3-5時間)
Glacierに退避されると格納コストが1/10
上手く利用するポイント
- パフォーマンス
ネーミングルールが大事
先頭部分にランダム文字列を入れる
オブジェクトをハッシュ名にする
エポック秒のリバースを追加する
ランダム文字列はLISTと相性が悪い
LISTしたい=グルーピングしたい形で保存
大量のPUTをする場合は、エラーコードに注意
503が帰ってきたらクライアント側でも送信側でも少し軽減する(エクスポネンシャルバックオフ)
できるだけマルチパートアップロード推奨
AWSCLIなど最近のツールでは自動的にマルチパートアップロードに切り替わります
各SDKにもマルチパートアップロード機能ついております
マルチパートアップロードでのサイズ設定はバランスの見極めが大事
小さいチャンクサイズでの大量アップロードはコネクションオーバーヘッドで利点が損なわれる
巨大すぎるファイルサイズでもマルチパートアップロードの利点とならない
帯域が太い場合は25-50MBチャンクくらいを最初の設定値とする
モバイルやより帯域に懸念がある場合、10MB程度を最初の設定値とする
レンジGETによるGETの高速化
レンジGETを利用すれば、マルチスレッド環境ではより高速にダウンロード可能
CloudFrontはレンジGETをサポート
マルチパートでのアップロード時と同じチャンクサイズを利用する
マルチパートアップロードでのHTTPS利用時
ファイルの暗号化はCPUに負荷がかかるためCPUインテンシブ
AmazonS3では、AES-256を推奨。デフォルトも同じ値
Intel AES-NIハードウェアを利用すれば暗号化パフォーマンス向上が見込める
AmazonS3を通じて実現したいこと
- お客様がデータを安心して預けられるサービスの提供
AmazonS3上のデータは常に安全に保管
AmazonS3内データはいつでも取得可能
AmazonS3内データを常に保存可能
AmazonS3内へのデータアクセスは完璧にコントロールできる
データ保存が低価格で実現できる
参考資料:
http://aws.amazon.com/jp/documentation/
http://adsj-contents.s3.amazonaws.com/meister-blackbelt/AWS_BlackBeltTechWebinar2014-S3-public.pdf