S3 ベストプラクティス

パフォーマンス

複数の同時 PUT / GET

  • S3 は非常に高いリクエスト率をサポートするようにスケーリングします。リクエスト率が着実に増加すると、S3 は必要に応じてバケットを自動的にパーティション分割して、より高いリクエストレートをサポートします。
  • 通常のワークロードでは、1秒あたり 100 リクエストのバーストが時折 800 リクエスト未満の場合、AWS はそれをスケーリングして処理します。
  • 一般的なワークロードで、1秒あたりの300以上の PUT/LIST/DELETE 要求に対するバケットのリクエスト率が 800 GET リクエストを超える場合は、サポートケースを開いてワークロードの準備を行い、リクエストに対する一時的な制限を回避することをお勧めします率。
  • S3 ベストプラクティスガイドラインは、1秒間に100以上のリクエストを日常的に処理している場合にのみ適用できます。
  • リクエストの種類が混在するワークロード
    • 通常、リクエストのワークロードが GET、PUT、DELETE、または GET バケット (LIST オブジェクト) の組み合わせである場合、オブジェクトの適切なキー名を選択すると、S3 インデックスへの低レイテンシアクセスを提供することにより、パフォーマンスが向上します。
    • この動作は、S3 がキー名を格納する方法によって駆動されます。
      • S3 は、各 AWS リージョンのオブジェクトキー名のインデックスを保持します。
      • オブジェクトキーは、インデックス内の複数のパーティションにまたがって辞書 (UTF-8 バイナリ順序) で格納され、つまり S3 はキー名をアルファベット順に格納します。
      • オブジェクトキーは、インデックス内の複数のパーティションに格納され、キー名によってキーが格納されるパーティションが決まります。
      • タイムスタンプやアルファベット順などのシーケンシャルプレフィックスを使用すると、S3 が多数のキーに対して特定のパーティションを対象とする可能性が高まり、パーティションの I/O 容量が圧倒的に増加します。
    • キー名プレフィックス、キー名、および I/O 負荷にいくつかのランダム性を導入すると、複数のインデックスパーティションにまたがって分散されます。
    • また、1秒あたりに送信されるリクエストの数に関係なく、スケーラビリティを確保します。
  • 集中的に取得されるワークロード
    • Cloudfront はパフォーマンスの最適化に使用することができ
      • 低レイテンシと高いデータ転送速度でコンテンツを配信する。
      • コンテンツをキャッシュし、それによって S3 への直接リクエストの数を減らす。
      • データ可用性のための複数のエンドポイント (エッジ位置) の提供
      • Web ディストリビューションまたは RTMP ディストリビューションとして2つのフレーバーで利用可能

大きなオブジェクトの PUT / GET

  • AWS は、アップロードとダウンロードのパフォーマンスを向上させるために PUT / GET リクエストを並列化できるだけでなく、失敗した場合に回復する機能も備えています。
  • PUT では、マルチパートアップロードによるアップロードの改善に役立ちます。
    • 同時に複数のアップロードを実行し、ネットワーク帯域幅の使用率を最大化する。
    • アップロードに失敗した部分だけを再アップロードする必要があるため、障害からの迅速なリカバリ。
    • アップロードを一時停止および再開する機能。
    • オブジェクトのサイズがわかる前にアップロードを開始する。
  • GET では、レンジ HTTP ヘッダーは、ダウンロードを改善するのに役立ちます
    • オブジェクト全体ではなく、パーツ内でオブジェクトを取得できるようにする。
    • ダウンロードに失敗した部分だけを再試行する必要があるため、障害からの迅速なリカバリ。

リスト操作

  • オブジェクトキー名は Amazon S3 インデックスに辞書に格納され、リストの内容を並べ替えたり操作したりすることが困難になります。
  • S3 は、インデックスの1つの辞書ソートリストを保持します。
  • たとえば、DynamoDB または RDS のように、S3 以外のセカンダリインデックスを構築して維持し、オブジェクトのメタデータを格納、インデックス化、クエリすることで、S3 での操作を実行します。

セキュリティ

  • バージョン管理の使用
    • 意図しない上書きや削除から保護するために使用できます。
    • 削除されたオブジェクトの取得と復元、または以前のバージョンへのロールバックが可能。
  • MFA (多要素認証) の削除を有効にするようにバケットを構成して、追加のセキュリティを有効にする。
  • バージョン管理では、バケットの削除を妨げず、データを誤ってまたは故意に削除した場合と同様にバックアップする必要があります。
  • クロスリージョンレプリケーション機能を使用して、別のリージョンにデータをバックアップする。
  • VPC を S3 と共に使用する場合は、VPC S3 エンドポイントを
    • 水平スケーリング、冗長、高可用性の VPC コンポーネント
    • VPC と S3 の間のプライベート接続を確立し、トラフィックが Amazon ネットワークから離れることのないようにする。

コスト

  • オブジェクトの適切なストレージ・クラスを選択して、S3 ストレージ・コストを最適化します。
  • オブジェクトを異なるストレージクラスに移動し、有効期限が切れるように適切なライフサイクル管理ルールを構成します。

トラッキング

  • イベント通知を使用して、S3 オブジェクトに対する PUT または DELETE 要求を通知する。
  • CloudTrail を使用して、AWS アカウントから S3 に対して行われた特定の API 呼び出しをキャプチャし、ログファイルを S3 バケットに配信することができます。
  • CloudWatch を使用して Amazon S3 バケットを監視し、オブジェクト数や格納されたバイト数などのメトリックを追跡し、適切なアクションを構成します。

AWS認定試験の練習問題

  • 質問はインターネットから収集され、答えは自分の知識と理解に基づいてマークされます(これはあなたと異なる場合があります)。
  • AWSサービスは毎日更新され、回答と質問はすぐに時代遅れになる可能性がありますので、それに応じて調査してください。
  • AWSのアップデートのペースを追うためにAWS試験の質問は更新されないため、基礎となる機能が変更されても質問が更新されないことがあります。
  • さらなるフィードバック、ディスカッション、修正を可能にします。
  1. メディア会社は、圧縮後に100ギガバイト前後の合計サイズで、毎日、オンプレミスで新しいビデオファイルを生成します。すべてのファイルは、1-2 ギガバイトのサイズを持っており、午前三時と午前五時の間に固定時間のウィンドウで毎晩 Amazon S3 にアップロードする必要があります。現在のアップロードには、使用可能な帯域幅の半分以下が使用されますが、ほぼ3時間かかります。ファイルのアップロードが割り当てられた時間枠内で完了できるようにするにはどのような手順が必要ですか?
    1. ネットワーク帯域幅を増やして、S3 へのスループットを向上する。
    2. マルチパートアップロードを使用して、S3 に並行してファイルをアップロードする。
    3. すべてのファイルを1つのアーカイブにまとめて、S3 にアップロードし、AWS でファイルを解凍します。
    4. AWS インポート/エクスポートを使用してビデオファイルを転送する。
  2. Amazon シンプルストレージサービス (S3) バケットに静的アセットを格納する web アプリケーションを設計しています。このバケットは、1秒あたり 150 PUT リクエストをすぐに受け取ることを期待しています。最適なパフォーマンスを確保するにはどうすればよいですか。
    1. マルチパートアップロードを使用します。
    2. キー名にランダムなプレフィックスを追加します。
    3. Amazon S3 は、このスケールでのパフォーマンスを自動的に管理します。
    4. キー名には、連続番号や日付時刻シーケンスなどの予測可能な名前付けスキームを使用します。
  3. Amazon シンプルストレージサービス (S3) に 5 GB のビデオオブジェクトをアップロードするアプリケーションは、アマゾンのエラスティックコンピューティングクラウドインスタンス(EC2)で実行されています。ビデオのアップロードが予想よりも長くかかっているため、アプリケーションのパフォーマンスが低下します。どの方法でアプリケーションのパフォーマンスを向上させることができますか。
    1. 拡張ネットワーキングを有効にする。
    2. Amazon S3 マルチパートアップロードを使用する。
    3. Amazon CloudFront を活用するには、HTTP POST メソッドを使用して待ち時間を削減します。
    4. Amazon EBS プロビジョンド IOPs を使用し、Amazon EBS 最適化インスタンスを使用する。
  4. Amazon S3 に格納されたデータの偶発的な消失を防ぐ方法として、次のうちどれですか?(2 を選択)
    1. バケットポリシーを設定して削除を制限し、バージョン管理も有効にする
    2. 既定では、バージョン管理は新しいバケットで有効になっているため、心配する必要はありません (既定では有効になっていません)。
    3. データを保護するためにキーのセカンダリインデックスを構築する (パフォーマンスの向上のみ)
    4. 別の AWS アカウントが所有するバケットにバケットをバックアップして冗長性を確保する
  5. スタートアップ会社は、彼らが最終的に Amazon S3 で画像やビデオの数十億を格納するモバイルアプリケーションを構築するためにあなたを雇った。同社は、資金調達にリーンであり、運用コストを最小限に抑えるために望んでいる、しかし、彼らは積極的なマーケティングプランを持っており、6ヶ月ごとに現在のインストールベースを倍増することを期待しています。彼らのビジネスの性質のために、彼らは、S3 との間のトラフィックに突然、大規模な増加を期待している、それが彼らのアプリケーションのパフォーマンスのニーズを処理できることを確認する必要があります。S3 が適切なオプションであるかどうかを判断するために、この顧客から収集する必要のあるその他の情報は何ですか?
    1. 現在の顧客数は知っていなければなりません。なぜなら、これは2年後の顧客基盤を理解するうえで重要なことなのでです。(ない.お客様は関係ありません)
    2. ピーク使用時の1秒あたりの要求の総数を確認する必要があります。
    3. キーの名前空間を適切に設計するためには、S3 に書き込まれる個々のオブジェクトのサイズを知る必要があります。(サイズはキーの名前空間のデザインには関係ありませんが、カウントはありません)
    4. キーの名前空間を正しく構築するには、各 S3 バケットのストレージニーズの総量を把握しておく必要があります。(S3 は、キーの名前空間の設計は、数に依存する無制限のストレージを提供)
  6. ドキュメントストレージ会社は、アプリケーションを AWS にデプロイし、ビジネスモデルを変更して、フリー層およびプレミアム層の両方のユーザーをサポートします。プレミアム層のユーザーは、最大200GB のデータを格納するために許可され、無料の層の顧客は 5GB のみを格納することができます。お客様は、数十億のファイルが保存されることを期待しています。75% のクォータ使用率に近づいたときに、90% のクォータで再利用する場合は、すべてのユーザーに警告する必要があります。フリー層およびプレミアム層のユーザーをサポートするには、どのようにアプリケーションを設計する必要がありますか?
    1. 会社は、Amazon DynamoDB のユーザーデータカウンタを更新する Amazon シンプルワークフローサービス(SWF)アクティビティワーカーを利用する必要があります。 アクティビティワーカーは、カウンターが適切なしきい値を超えて増加すると、電子メールを送信するために簡単な電子メールサービスを使用します。
    2. 同社は、各オブジェクトのサイズと一緒に格納されたオブジェクトごとに行を持つストアオブジェクトテーブルと Amazon リレーショナルデータベースサービス(RDS)のリレーショナルデータベースを展開する必要があります。アップロードサーバーは、質問のユーザーの総消費量を照会します (最初にユーザーによってファイルストアを決定し、次に、それぞれのファイルサイズの格納されたオブジェクトのテーブルを照会して) と Amazon のシンプルな電子メールサービスを介して電子メールを送信する場合しきい値が破られる。(良い方法は、RDS を使用するが、非常に多くのオブジェクトが良いオプションではないかもしれません)
    3. 同社は、コンテンツの長さとオブジェクトの S3 のメタデータとして、ファイルの所有者のユーザー名の両方を記述する必要があります。その後、各オブジェクトに対して反復処理を行うファイルウォッチャーを作成し、各ユーザーのサイズを集計し、ストレージのしきい値を超えた場合に Amazon シンプルキューサービスを介してメールサービスに通知を送信する必要があります。(S3 のリスト操作は実行不可能)
    4. 同社は、無料の層のユーザーのためのデータストレージのための2つの分離された Amazon シンプルなストレージサービス(S3)のバケット1つを作成し、別のプレミアム層のユーザーのためのデータストレージです。Amazon simple ワークフローサービス(SWF)アクティビティワーカーは、データが格納されているバケットとストレージの集約に基づいて、特定のユーザーのすべてのオブジェクトを照会します。アクティビティ作業者は、必要に応じて Amazon 簡易通知サービス(SNS)を介してユーザーに通知します (S3 上のリスト操作は実行できないだけでなく、SNS はメール要件に対応していません)
  7. あなたの会社は、ドキュメントを保存し、共有するためのソーシャルメディアのウェブサイトをホストしている。Web アプリケーションを使用すると、ユーザーは必要に応じてアップロードを再開して一時停止しながら、大きなファイルをアップロードできます。現在、ファイルは、ファイルがアップロードされた後に受信したバイトの平均 (ネットワーク) にスケーリングされた Amazon エラスティックコンピューティングクラウド (EC2) インスタンスの、エラスティックロードバランシングとオートスケーリングフリートによってバックアップされた PHP フロントエンドにアップロードします。これは、Amazon シンプルストレージサービス (S3) にコピーされます。Amazon EC2 インスタンスは、Amazon S3 のアップロードを許可する AWS ID およびアクセス管理 (AMI) の役割を使用します。過去6か月間で、ユーザーベースとスケールが大幅に増加し、自動スケーリンググループ MAX パラメーターを数回増やす必要がありました。CFO はコストの上昇を懸念しており、コストを最適化するために必要なアーキテクチャを調整するよう求めています。コストを削減し、Web アプリケーションのセキュリティと拡張性を維持するために導入できるアーキテクチャの変更はどれですか。
    1. オートスケーリングの起動構成を、C3.8xlarge インスタンスを含むように置き換えます。これらのインスタンスは、10Gbps のネットワークスループットをもたらす可能性があります。(現在のサイズの情報はありませんし、コストが増加する可能性があります)
    2. 使用している取り込みパターンを再設計し、AWS セキュアトークンサービス (GetFederation トークン) から一時的な AWS 認証情報を取得するブローカーとして、ID プロバイダに対してアプリを認証します。資格情報と S3 エンドポイント/プレフィックスをアプリに安全に渡します。指定された資格情報と s3 プレフィックスを使用して、Amazon s3 にファイルを直接アップロードするクライアント側ロジックを実装します。(一時停止と再起動を処理する機能は提供されません)
    3. 取り込みパターンを再設計し、Web アプリケーションインスタンスを VPC パブリックサブネットに移動します。各 EC2 インスタンスのパブリック IP アドレスをアタッチします (自動スケーリング起動構成設定を使用)。Amazon Route 53 ラウンドロビンレコードセットと HTTP ヘルスチェックを DNS 負荷分散に使用するアプリの要求この方法では、エラスティックロードバランシングをバイパスすることにより、コストを大幅に削減します。(ELB がネックではありません)
    4. 使用している取り込みパターンを再設計し、AWS セキュアトークンサービス (GetFederation トークン) から一時的な AWS 認証情報を取得するブローカーとして、ID プロバイダに対してアプリを認証します。資格情報と S3 エンドポイント/プレフィックスをアプリに安全に渡します。 s3 マルチパートアップロード API を使用して、指定された資格情報と s3 プレフィックスを使用してファイルを Amazon S3 に直接アップロードするクライアント側ロジックを実装します。(マルチパートは、実際のサイズがわかっているか、完全なデータがダウンロードされる前に、S3 に直接アップロードを開始することができます)
  8. アプリケーションは、高トラフィックの Web サイトから数千のインスタンスから時間ごとのログファイルを格納している場合、どの命名方式は、S3 上で最適なパフォーマンスを与えるだろうか?
    1. シーケンシャル
    2. instanceID_log-HH-DD-MM-YYYY
    3. instanceID_log-YYYY-MM-DD-HH
    4. HH-DD-MM-YYYY-log_instanceID (HH は最初の文字が i になる instaneId の代わりに開始するいくつかのランダム性を与える)
    5. YYYY-MM-DD-HH-log_instanceID

リファレンス


Jayendra’s Blog

この記事は自己学習用に「AWS S3 Best Practices – Certification(Jayendra’s Blogより)」を日本語に訳した記事です。