Amazon S3 / Glacier

Amazon S3 / S3 Glacier

https://d1.awsstatic.com/webinars/jp/pdf/services/20190220_AWS-BlackBelt_S3_Glacier.pdf

S3 の位置付け

S3はユーザがデータを安全に、容量制限なく、保存可能なオブジェクトストレージ Glacier は 安全性とコスト効率を重視したアーカイブ向けストレージ

S3 API ⇆ S3 -> (Standard-IA) -> Glacier

データストア

S3の概要

  • 容量無制限
  • 高い耐久性
  • 安価なストレージ
  • スケーラブルで安定した性能

  • 少なくとも3つのAZでファイルを保存

    • 1つのAZは最大8つのデータセンターで構成
  • イレブンナイン

S3の用語

  • バケット:グローバルでユニークな必要がある
  • オブジェクト:データ本体。S3に格納されるファイルでURLが付与される
  • キー:オブジェクト格納URLパス。バケット+キー+バージョンが必ず一意になる
  • メタデータ
  • リージョン

Data Consistency モデル

結果整合性が採用されている - PUT: 登録後、即時データが参照できる - PUT: 更新直後は以前のデータが参照される可能性がある。結果整合性 - DELETE: 更新直後は以前のデータが参照される可能性がある。結果整合性

ロック処理はなく、最新のタイムスタンプのリクエストが優先される

ストレージクラス

  • Standard
    • 頻繁に利用するデータ
  • Intelligent tiering: アクセス頻度が高いオブジェクトと低いオブジェクトを自動的に最適化するクラス
    • 変化するアクセスパターンのデータ
    • 最低保持期間30日以上
  • Standard IA: 標準低頻度アクセスストレージ
    • 取り出し料金
    • 最低保持期間30日以上
    • 最小オブジェクトサイズ128kb以上
  • ONEZONE IA: single AZのStandard IA
    • 1AZ
    • 最低保持期間30日以上
    • 最小オブジェクトサイズ128kb以上
  • S3 Glacier: アーカイブ。低コストだが取り出すのにコストと時間がかかる
    • 取り出し料金
    • 最低保持期間90日以上
  • S3 Glacier Deep Archive: Glacier より低コスト。取り出すのに半日から3日かかる
    • 最低保持期間90日以上
  • 冗長化ストレージ(RRS): Glacier から取り出したデータの置き場所

アクセス

  • アクセス管理

    • ユーザポリシー
      • IAMユーザに対しての権限管理(このユーザで何ができるのか)
    • バケットポリシー
      • S3バケットごとにアクセス権限を指定(このリソースに誰がアクセスできているのか)
      • クロスアカウントでのS3バケットアクセス権限の付与
      • クロスアカウントでアップロードをするときはオブジェクトの権限に注意
    • ACL
      • バケットおよびオブジェクトにアクセス権限を指定
      • 簡易的に権限を付与できる
      • ACLよりユーザポリシーやバケットポリシーが優先される
  • セキュリティ

    • GUIから一目でわかるようになっている
    • Amazon S3 Block Public Access
      • アカウントレベル、またはバケットレベルで意図せずバケットがパブリックになることを抑制する
    • VPC Endpoint
      • NAT Gateway を経由せずにS3と直接通信(同一リージョンのみ)
      • ルートテーブルでごにょごにょしている
      • PrivateLinkベースの通信ではない
      • アクセスポリシーの設定可
    • Pre-signed Object URL(署名つきURL)
      • 一定期間のアクセスを許可した署名つきURLの生成
      • GET とPUTで利用可能
      • 署名つきURLを知っていれば誰でも利用可能
  • Webサイトホスティング

データ保護

  • サーバサイド暗号化
    • AWSのサーバリソースを利用して格納データの暗号化処理
  • クライアントサイド暗号化
    • 暗号化プロセスはユーザ管理
  • バージョン管理
  • S3 Object Lock(WORM機能)
    • Write Once Read Many(WORM)モデルでのオブジェクト保存を提供する。そのオブジェクトに対する一定期間の上書き、削除ができないようにロックする
    • 新規バケットのみに設定できる
      • 保護モード
      • 保持期間
      • バケット単位
      • オブジェクト保存時に明示
    • リーガルホールドのON/OFFが可能
    • バージョニングを併用
    • モード
      • コンプライアンスモード
        • Rootアカウントですら削除できない。また無効化ができない
      • ガバナンスモード
        • ガバナンスが効いたデータ保護
        • 特別な権限でWORM保護されたオブジェクトの削除が可能
        • コンプライアンスモードに移行可能
  • クロスリージョンレプリケーション
  • ライフサイクル管理
    • ライフサイクル管理を自動化できる
    • バケット全体またはPrefixに対して、バケットの更新日をベースに日単位(毎日0:00にキューイングされる)で指定を可能
    • ライフサイクルを利用してIAに移動できるのは128KB以上(IAは128KB以上という制限)
  • S3 Glacier へのアーカイブと復元
    • アーカイブ
      • オブジェクトのデータはGlacierに移動し、マスターはGlacierになる
      • Glacier に直接PUT可能
      • S3のデータ削除でGlacier のデータも削除
      • S3には8KBのオブジェクト名とメタデータのみ保存
      • Glacier には32KBのインデックスと関連メタデータ
      • 90日以内に削除すると、90日分利用したのと同じ課金額
    • 復元
      • オブジェクトごとに復元
      • データはS3の低冗長化ストレージに数日間保存(Glacier の分と二重で課金)
      • 復元にかかる時間について3種類から指定可能
        • Expedited: 少ない数のファイルについて、緊急のアクセスを要する場合
        • Standard: 標準。3-5時間で取得
        • Bulk: 低価格、大量データの復元。5-12時間かかる
  • Analytics を利用した、IAの利用
    • どのデータがどの期間で読まれたかが見られる。これによってIAのライフサイクルを決める参考になる
    • QuickSightでもみられる
  • S3インベントリ
    • オブジェクトリストをCSV/ORCで出力
      • 初回の結果を得るまでに48時間かかる
      • 定期的に実行するようにできる
  • イベント通知
    • バケットにイベントが発生した際にAmazon SNS, SQS, Lambda に対して通知を行うことができる
      • オブジェクトが作成されたとき
      • オブジェクトが削除されたとき
      • Glacierから復元が開始・完了したとき
      • 冗長化ストレージでデータがロストしたとき
    • 通知にはPolicyの設定が必要
  • CloudWatch によるメトリクス管理
    • バケットに対するストレージメトリクス -> 日単位
    • オブジェクトに対するリクエストメトリクス -> 分単位
  • CloudTrail によるAPI管理
    • 100,000イベントごとに$0.1
    • 別のバケットにログを出力することを推奨
    • Logging、Tagによる管理も有効

パフォーマンス最適化

  • 大きなファイルのGETには RANGE GETを利用するとマルチスレッド環境で高速にダウンロード可能
    • 帯域と並列コネクション数のバランス
  • 100MB以上のファイルのアップロード
    • マルチパートアップロード
    • 全てのチャンクがアップロードされるとS3が結合
  • Transfer Acceleration
    • 利用者はエッジネットワークに対して通信し、エッジネットワークからS3とデータ通信することで高速に転送できる
      • S3 Bucket のAccelerationを有効化する
  • Direct Connect
  • S3 Select
    • S3に格納しているオブジェクトに対してSQL文を発行
    • Input: CSVJSON、 圧縮、暗号化
    • Output: CSVJSON
    • SDK
  • リクエストレート
    • 大量のGETリクエストが発生するものはCloudFront と組み合わせることを推奨
    • データ取得は最大5500リクエスト/秒
    • データ追加は最大3500リクエスト/秒
    • 定常的に最大リクエストレートを超える場合は、キー名の先頭部分の文字列をランダムにすることでレート向上が期待できるが、必要かを見極める必要がある(ほとんどの場合は必要ない)

料金

  • API のリクエス
  • 保存データ容量
  • データのOutしたときの転送料金
  • Transfer Acceleration

雑感

S3は今まで単なるオブジェクトストレージとしてしか認識していなかったが、その中でも色々なワークロードに対して合うようなストレージクラスや機能が実装されていて、サービスの種類によって選択が変わるだろうなと思った。 アプリケーションで恒常的に利用されるものはスタンダードクラスで良いが、監査ログやコンプライアンスの規定で数年保持しないといけないが実際に読まれることはほとんどないといった場合はGlacier を利用することができる。 結果整合性モデルを採用しているので更新時の取り扱いには注意が必要だと思った。WORM機能は面白い。