Amazon S3

ブログでAWSを勉強してみようという試みで、記念すべき第1回のお題目は、「Amazon S3」です!

Amazon S3とは?

安価かつ高い耐久性を持つオンラインストレージサービス

後日更新するつもりですが、安価で耐久性を持つGlacierと違う点はオンラインストレージであるという点ですね。Glacierと比較して早くデータを取り出すことが出来ます。

特徴

EC2にマウントできて、安価かつほぼ無制限に使用できます。すばらしい。

  • 容量無制限 ※1ファイル最大5TBまで
  • 高い堅牢性 ※3箇所以上で自動複製
  • 安価なストレージ ※月額1GB/約4円
  • スケーラブルで安定した性能

利用用途

ある程度リアルタイム性が要求される、大容量のデータを保管することに向くみたい。

用語

  • バケット
    オブジェクトの保管場所。最大100個まで。名前はユニークにする必要あり。
  • オブジェクト
    S3に格納されるファイル。URLが付与される。
  • キー
    オブジェクトの格納URLパス。
  • アクセスコントロールリスト(ACL)
    バケットやオブジェクトのアクセス管理。

Amazon S3 データストレージの種類

  1. スタンダード
    3箇所以上にデータを複製。デフォルト。
  2. 冗長化ストレージ
    複製箇所を減らして低価格にしたもの。オブジェクト毎に指定可能。
  3. アーカイブ (Glacier)
    最も低価格だが、データの取り出しに時間がかかる。
    Lifecycle Managementで指定。取り出しはオブジェクト単位。

Multipart Upload機能

大容量オブジェクトの高速伝送機能
S3にアップロードする際に、ファイルを複数のチャンクに分割して並列アップロードを実施。ファイルが100MBを超える場合は、利用することが推奨される。

アクセス管理

さまざまな単位でアクセス制御ができるらしい。

  • ユーザーポリシー
    IAMユーザ(AWSのユーザ)に対して任意のバケットへのアクセス権限を付与
  • バケットポリシー
    全てのユーザに対して、任意のバケットへのGETリクエストを許可
  • ACL(アクセスコントロールリスト)
    バケット単位のACLとオブジェクト単位のACLが存在。
    優先度は下記の通り。
    ユーザー/バケットポリシー > オブジェクトACL > オブジェクトACL

 Webサイトホスティング機能

静的なWebサイトをS3のみでホスティング可能。

  • バケット単位で指定
    パブリックアクセスを許可するため、バケットポリシーで全ユーザにGET権限を付与
  • 独自ドメインの指定
    ドメイン名をバケット名として指定(www.example.com)
    ※通常はhttp://バケット名.s3-website-ap-northeast-1.amazon.com
  • リダイレクト機能
    任意のドメインにリダイレクト設定が可能
  • CORS(Cross-origin Resource Sharing)の設定
    異なるドメインからのS3アクセス時に利用
  • CloudFrontとの連携
    バケットポリシーを利用してCloudFrontからのHTTP/HTTPSリクエストのみを許可することも可能

その他の機能

  • バージョン管理機能
    オブジェクト更新時に前世代オブジェクトを自動的に保管
  • Lifecycle管理
    バケット内のオブジェクトに対して削除orアーカイブの自動設定が可能f:id:amipee210:20150821165748g:plain
  • アーカイブおよびリストア
    - アーカイブ
    オブジェクトのデータはGlacierに移動
    S3上のデータを削除することで、Glacier側のデータも削除される
    - リストア
    オブジェクト毎にリストア
  •  Notification機能
    バケットにてイベントが発生した際に、Amazon SNS, SQS, Lambdaに対して通知することでシームレスなシステム連携が可能
  • クロスリージョンレプリケーション
    設定のみで、異なるリージョン間のS3バケットオブジェクトのレプリケーションを実施
  • Logging
    バケット単位でバケットに対するアクセスログの出力設定が可能
  • Tag管理
    バケットに対してタグの指定が可能
  • メタデータ
    オブジェクト毎にメタデータが設定される

Amazon S3のTips

パフォーマンスの最適化

Amazon S3において、オブジェクトキーはアルファベット順に格納しています。すなわち、キー名によってそのキーが格納されるパーティションが決まります。よって、タイムスタンプやアルファベット順などの連続する名前を使用すると、特定のパーティションへのI/O能力がひっ迫してしまう可能性が増大します。

【解決策】 キー名の先頭をランダム値にすることでI/Oを分散する

・マルチパートアップロードの活用によるアップロードオペレーション(PUT)の高速化

・GETリクエストもRANGE GETを活用することで、マルチスレッド環境では高速にダウンロード可能

 

AWS Direct Connect経由でのS3アクセス

【課題】Direct Connectを利用してAWSに接続する場合、多くはPrivate ASを利用しVPCへ接続となるため、オンプレミス環境からS3への通信は、VPC内のEC2で構築したProxyサーバを経由するパターンが多い。

→ EC2の運用負荷と経由することでのオーバヘッドによるDirect Connectの回線スピードの有効活用に課題

Private AS(プライベートAS) とは?

AS番号とは、インターネットなどの大規模IPネットワーク内にある、各組織が保有・運用する自立したネットワーク(AS)を識別する番号。各国のNICによって管理・発行される番号で、日本ではJPNICが管理・発行を行っている。

 

AS番号は全世界で一意の番号である。2オクテット(16ビット)で表され、0~65535までの番号空間を持つ。このうち0と65535はICANNによって予約されており、64512~65534はプライベートAS番号とされている。プライベートAS番号は全世界で一意ではなく、ASの内部やインターネットに接続されていないネットワークでのみ使用できるAS番号である。

f:id:amipee210:20150821182117g:plain

【解決策】AWSからパブリックIPの割り当てを受け、オンプレミスルータ側のIPアドレスでNATさせることで、VPCを経由せずオンプレミス環境からDirect Connect回線を利用して直接S3と通信が可能

f:id:amipee210:20150902101202g:plain

 

Amazon S3の使いどころ

 

f:id:amipee210:20150902101848g:plain

f:id:amipee210:20150902101945g:plain

f:id:amipee210:20150902101849g:plain