Amazon Web Services ブログ

Amazon S3 マルチリージョンアクセスポイントでマルチリージョンアプリケーションのパフォーマンスと可用性を向上させる方法

マルチリージョンアプリケーションを構築することで、エンドユーザーのレイテンシーを改善し、予期しない災害が発生した場合におけるより高い可用性と回復力を実現し、データの耐久性とデータレジデンシーに関連するビジネス要件を遵守することができます。例えば、バックエンドサービスのための動的 API コールの全体的なレイテンシーを減らすことができます。あるいは、インターネットルーティングの問題、海底ケーブルの障害、またはリージョンの接続の問題に対処するために、単一リージョンデプロイを拡張して、コストのかかるダウンタイムを回避することもできます。今日、Amazon DynamoDB グローバルテーブル、Amazon Aurora グローバルデータベース、Amazon ElastiCache グローバルデータストア、Amazon Simple Storage Service (Amazon S3) クロスリージョンレプリケーションなどのマルチリージョンデータレプリケーション機能のおかげで、世界中の 25 の AWS リージョンにまたがるマルチリージョンアプリケーションを構築できます。

しかし、マルチリージョンアプリケーションの実装に関しては、多くの場合、コードをリージョンに対応したものとし、最も近接している、あるいは最も利用可能である、正しいリージョンのリソースとのインタラクションという手間のかかる作業を処理する必要があります。例えば、3 つの AWS リージョンにまたがってオブジェクトレプリケーションを持つ 3 つの S3 バケットがあるとします。アプリケーションコードは、存在しているバケットのコピーの数およびそれらのバケットの存在場所、呼び出し元に最も近いバケット、ならびに問題が発生した場合に他のバケットにフォールバックする方法を認識する必要があります。マルチリージョンアーキテクチャに新しいリージョンを追加し、グローバル設定が変更されるたびに各リージョンにスタックを再デプロイすると、複雑さは増大します。

2021 年 9 月 2 日、複数の AWS リージョンのバケットにまたがるグローバルエンドポイントを定義することを可能にする新しい S3 機能である Amazon S3 マルチリージョンアクセスポイントが一般的に利用可能になることを発表します。S3 マルチリージョンアクセスポイントを使用すると、単一のリージョンで使用されているのと同じシンプルなアーキテクチャを使用して、マルチリージョンアプリケーションを構築できます。

S3 マルチリージョンアクセスポイントは、AWS Global Accelerator の上に構築され、AWS グローバルネットワークを介して S3 リクエストをルーティングするために、組み込みネットワークの回復力を提供します。これは、シンプルなアプリケーションアーキテクチャを維持しながら、ネットワークの輻輳と全体的なレイテンシーを最小化するために特に重要です。AWS Global Accelerator は、リージョンの可用性を継続的にモニタリングし、数秒以内にリクエストを別のリージョンに移行できます。S3 マルチリージョンアクセスポイントは、レイテンシーが最も低いデータコピーにリクエストを動的にルーティングすることで、アップロードおよびダウンロードのパフォーマンスを最大 60% 向上させます。これは、設定ファイルやアプリケーションデータの読み取りに S3 に依存するサーバー側のアプリケーションだけでなく、IoT デバイスや自動運転車など、パフォーマンスと信頼性の高い書き込み専用エンドポイントを必要とするエッジアプリケーションにも最適です。

S3 マルチリージョンアクセスポイントの使用
使用を開始するには、S3 コンソールで、API を介して、または AWS CloudFormation を使用して、S3 マルチリージョンアクセスポイントを作成します。

ここでは、S3 コンソールを使用して作成する方法を説明します。各アクセスポイントには、アカウントレベルで一意の名前が必要です。

作成後、エイリアスを使用してアクセスすることができます。エイリアスは、自動的かつグローバルに一意で生成されます。エイリアスは .mrap で終わるランダムに見える文字列です。例えば、mmqdt41e4bf6x.mrap となります。https://mmqdt41e4bf6x.mrap.s3-global.amazonaws.com を介して、VPC を介して、または AWS PrivateLink を使用してオンプレミスで、インターネット経由でアクセスすることもできます。

その後、リージョンごとに 1 つのアクセスポイントに複数の (新規または既存の) バケットを関連付けます。データレプリケーションが必要な場合は、バケットバージョニングも有効にする必要があります。

最後に、アクセスポイントの [Block Public Access] (ブロックパブリックアクセス) 設定を構成します。デフォルトでは、すべてのパブリックアクセスがブロックされますが、ほとんどの場合は正常に動作します。

作成プロセスは非同期です。作成ステータスをコンソールで表示したり、CLI から S3 マルチリージョンアクセスポイントをリスト表示したりできます。[Ready] (準備ができています) と表示されたら、アクセスポイントポリシーとオブジェクトレプリケーションのオプション設定を構成できます。

通常のアクセスポイントと同様に、アクセスコントロールポリシーをカスタマイズして、バケットの許可に関してアクセスポイントの使用を制限できます。アクセスポイントと基盤となるバケットの両方がリクエストを許可する必要があることに注意してください。S3 マルチリージョンアクセスポイントは、許可を拡張することはできず、可能なのは許可を制限する (または等しくする) ことだけです。IAM Access Analyzer を使用して、S3 マルチリージョンアクセスポイントを使用するバケットのためのパブリックおよびクロスアカウントアクセスを検証し、許可の変更をデプロイする前に、バケットへのアクセスをプレビューすることもできます。

S3 マルチリージョンアクセスポイントのアクセスポリシーは、次のようになります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Default",
      "Effect": "Allow",
      "Principal": {
        "AWS": "YOUR_ACCOUNT_ID" 
      },
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": "arn:aws:s3::YOUR_ACCOUNT_ID:accesspoint/YOUR_ALIAS/object/*"
    }
   ]
}

S3 マルチリージョンアクセスポイントで使用されるバケット間でデータをレプリケートするには、S3 Replication を設定します。場合によっては、各バケットに異なるコンテンツを保存したり、グローバルエンドポイントで使用するリージョンバケットの一部、およびレプリケートされず、リージョンアクセスポイントまたはダイレクトバケットアクセスでのみ使用される他の一部を持ったりすることもできます。例えば、IoT デバイス設定には、バケットごとに異なる他のリージョン API エンドポイントまたはリージョンリソースへのリファレンスが含まれる場合があります。

新しい S3 コンソールは、レプリケーションルールを簡単かつ一元的に作成できる 2 つの基本テンプレートを提供します。

  • 1 つ以上のソースバケットから 1 つ以上のレプリケート先バケットにオブジェクトをレプリケートする: これは、データが常に特定の AWS リージョンで生成され、他のすべてのリージョンでもデータを利用できるようにする、利用可能な状態専用のユースケースに最適です。
  • 指定されたすべてのバケット間でオブジェクトをレプリケートする: これは、デバイスが最も近いリージョンにデータをアップロードするために使用する書き込み専用アクセスポイントを定義し、このデータをすべてのリージョンで利用できるようにする必要がある、既に言及した IoT シナリオに最適です。

もちろん、フィルターと条件を使用して、より高度なレプリケーション設定を作成できます。例えば、プレフィックスやタグに基づいて特定のオブジェクトのみをレプリケートできます。

クロスリージョンレプリケーションでは、バケットバージョニングを有効にする必要があることに注意してください。

コンソールは、レプリケーションルールと IAM ロールの作成と設定を行います。バケットを追加または削除するには、変更されたリストを備えた、新しい S3 マルチリージョンアクセスポイントを作成することになります。

ここでは、レプリケーションルールに加えて、Replication Time Control (RTC)レプリケーションメトリクスと通知双方向同期などのレプリケーションオプションを設定します。RTC では、レプリケーション速度が重要なユースケースのために、ほとんどの新しいオブジェクトを数秒でレプリケートし、それらのオブジェクトの 99.99% を 15 分以内にレプリケートできます。レプリケーションメトリクスを使用すると、オブジェクトとバイト数の点でバケットの同期状態をモニタリングできます。双方向同期を使用すると、オブジェクトのメタデータをバケット間でもレプリケートする必要がある、プットが多いユースケースのためにアクティブ-アクティブ設定を実現できます。

レプリケーションを設定すると、有効になっている AWS リージョンを確認できる、非常に便利な視覚情報とインタラクティブな概要が表示されます。マップ上の場所、リージョンバケットの名前、および適用されているレプリケーションルールが表示されます。

S3 マルチリージョンアクセスポイントを定義して正しく設定したら、S3 API、AWS CLI、または AWS SDK を使用して、そのアクセスポイントとのインタラクションを開始できます。例えば、CLI を使用して新しいオブジェクトを書き込んだり、読み取ったりする方法は次のとおりです (必ず最新の CLI バージョンにアップグレードしてください)。

# create a new object
aws s3api put-object --bucket arn:aws:s3::YOUR_ACCOUNT_ID:accesspoint/YOUR_ALIAS --key test.png --body test.png
# retrieve the same object
aws s3api get-object --bucket arn:aws:s3::YOUR_ACCOUNT_ID:accesspoint/YOUR_ALIAS --key test.png test.png

最後に、Amazon CloudWatch のバケットメトリクスを使用して、複数の AWS リージョンのバケット間でユーザーリクエストがどのように分散されるかを追跡できます。

起動時の CloudFormation サポート
今日では、2 つの新しい CloudFormation リソース (AWS::S3::MultiRegionAccessPointAWS::S3::MultiRegionAccessPointPolicy) を使用して S3 マルチリージョンアクセスポイントを簡単に定義できます。

以下に例を示します。

Resources:
  MyS3MultiRegionAccessPoint:
    Type: AWS::S3::MultiRegionAccessPoint
    Properties:
      Regions:
        - Bucket: regional-bucket-ireland
        - Bucket: regional-bucket-australia
        - Bucket: regional-bucket-us-east
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        IgnorePublicAcls: true
        BlockPublicPolicy: true
        RestrictPublicBuckets: true
  MyMultiRegionAccessPointPolicy:
    Type: AWS::S3::MultiRegionAccessPointPolicy
    Properties:
      MrapName: !Ref MyS3MultiRegionAccessPoint
      Policy:
        Version: 2012-10-17
        Statement:
          - Action: '*'
            Effect: Allow
            Resource: !Sub
              - 'arn:aws:s3::${AWS::AccountId}:accesspoint/${mrapalias}/object/*'
              - mrapalias: !GetAtt
                  - MyS3MultiRegionAccessPoint
                  - Alias
            Principal: {"AWS": !Ref "AWS::AccountId"}

AWS::S3::MultiRegionAccessPoint リソースは S3 バケット名にのみ依存します。他のリージョンスタックを参照する必要はなく、S3 マルチリージョンアクセスポイントの定義を独自のスタックに簡単に一元化できます。一方、クロスリージョンレプリケーションは各 S3 バケットで設定する必要があります。

コストに関する考慮事項
S3 マルチリージョンアクセスポイントを使用して AWS グローバルネットワーク内でリクエストをルーティングする場合、S3 リクエスト、ストレージ、データ転送、およびレプリケーションの標準料金に加えて、処理された GB あたり 0.0033 USD のデータルーティングコストをお支払いいただきます。アプリケーションがインターネット経由で S3 マルチリージョンアクセスポイントにアクセスする場合、GB あたりのインターネットアクセラレーションコストも請求されます。このコストは、転送タイプ (アップロードまたはダウンロード) と、クライアントとバケットが同じ場所にあるか異なる場所にあるかによって異なります。詳細については、S3 の料金ページにアクセスし、[data transfer] (データ転送) のタブを選択してください。

いくつかの実用的な例を挙げてみましょう。

  • 1 つの AWS リージョン内のすべてのトラフィック: この単純なケースでは、アプリケーションは米国東部 (バージニア北部) で実行され、米国東部 (バージニア北部) と米国西部 (オレゴン) で 2 つの S3 バケットを設定します。アプリケーションは 100 GB のデータをアップロードし、最も低いレイテンシーのバケットは米国東部 (バージニア北部) にあります。すべてのデータは、同じリージョン内の S3 マルチリージョンアクセスポイントによってルーティングされ、総コストは 0.33 USD です。
  • 2 つの AWS リージョンのすべてのトラフィック: このケースでは、アプリケーションは米国東部 (バージニア北部) で実行され、米国東部 (オハイオ) と米国西部 (オレゴン) で 2 つの S3 バケットを設定します。アプリケーションは 100 GB のデータをアップロードし、最も低いレイテンシーのバケットは米国東部 (オハイオ) にあります。すべてのデータは、S3 マルチリージョンアクセスポイントによって 2 つの AWS リージョンにルーティングされます。100 GB のデータルーティングコストは、前の例 (0.33 USD) と同じで、これに GB あたり 0.01 USD の S3 データ転送コストが加算され、総コストは 1.33 USD となります。
  • 北米、欧州、およびアジアパシフィックのインターネット経由のすべてのトラフィック (ダウンロードとアップロード): このケースでは、アプリケーションは、北米、欧州、およびアジアの顧客のデバイス上で実行され、米国東部 (バージニア北部) と欧州 (アイルランド) で 2 つの S3 バケットを設定します。北米にいる 1 人の顧客が 50 GB のデータをアップロードします。このデータは米国東部 (バージニア北部) のバケットにルーティングされます。欧州にいる 2 人目の顧客が欧州 (アイルランド) のバケットから 50 GB のデータをダウンロードします。アジアにいる 3 人目の顧客が欧州 (アイルランド) のバケットから 50 GB のデータをダウンロードします。150 GB のデータルーティングコストは 0.495 USD です。これに加えて、GB あたり 0.09 USD の S3 から欧州へのデータ転送料金 (9 USD)、GB あたり 0.0025 USD の北米から米国東部 (バージニア北部) の S3 バケットへのインターネットアクセラレーションコスト (0.125 USD)、GB あたり 0.005 USD の欧州 (アイルランド) の S3 バケットから欧州へのインターネットアクセラレーションコスト (0.25 USD)、および GB あたり 0.05 USD の欧州 (アイルランド) の S3 バケットからアジアへのインターネットアクセラレーションコスト (2.5 USD) が加算されます。総コストは 12.37 USD となります。この例は、インターネットアクセラレーションコストが大陸をまたいでどのようになるのかを示すことを目的としたものです。また、アジアへのインターネットアクセラレーションコストは、アジアにさらに S3 バケットを追加することで、一桁少なくなる可能性があることに注意してください (次の例を参照)。
  • 北米、欧州、アジアパシフィックリージョンのインターネット経由のすべてのトラフィック (アップロードのみ): このケースでは、前の例と同じ条件で検討します。唯一の違いは、すべての顧客がデータをアップロードするだけであり、アジアパシフィック (シンガポール) に追加のバケットを設定するという点です。データルーティングコストは同じです (0.495 USD)。これに加えて、GB あたり 0.0025 USD の北米から米国東部 (バージニア北部) の S3 バケットへのインターネットアクセラレーションコスト (0.125 USD)、GB あたり 0.0025 USD の欧州から欧州 (アイルランド) の S3 バケットへのインターネットアクセラレーションコスト (0.125 USD)、および GB あたり 0.01 USD のアジアからアジアパシフィック (シンガポール) の S3 バケットへのインターネットアクセラレーションコスト (0.5 USD) が加算されます。総コストは 1.24 USD となります。

これは、ルーティングコストは見積もりが簡単で、アプリケーションの種類やデータアクセスパターンには依存しないことを意味しています。インターネットアクセラレーションコストは、アクセスパターン (ダウンロードはアップロードよりも費用がかかります) と、最も近い AWS リージョンとの関係におけるクライアントの場所によって異なります。インターネット経由でデータをアップロードまたはダウンロードするグローバルアプリケーションでは、各大陸に少なくとも 1 つの S3 バケットを設定することで、インターネットアクセラレーションコストを最小限に抑えることができます。

今すぐご利用いただけます
Amazon S3 マルチリージョンアクセスポイントを使用すると、複数の AWS リージョンでデータにアクセスするときに、回復力を向上させ、アプリケーションのパフォーマンスを最大 60% 高速化できます。当社でマルチリージョンアプリケーションの設計と実装方法を迅速に反復して簡素化できるよう、ユースケースに関するフィードバックをお寄せいただければ幸いです。

S3 API、CLI、SDK、AWS CloudFormation、または S3 コンソールを使用して開始できます。この新しい機能は、世界中の 17 の AWS リージョンで利用できます (サポートされている AWS リージョンの全リストを参照)。

詳細はこちら

S3 マルチリージョンアクセスポイントの詳細については、この動画でご確認いただけます。また、短いデモもご覧ください。

S3 マルチリージョンアクセスポイントの技術ドキュメントをご覧ください。

Alex