REL07-BP01 リソースの取得またはスケーリング時に自動化を使用する - AWS Well-Architected フレームワーク

REL07-BP01 リソースの取得またはスケーリング時に自動化を使用する

障害のあるリソースを交換したり、ワークロードをスケールしたりする場合は、Amazon S3 や AWS Auto Scaling などのマネージド型の AWS のサービスを使用してプロセスを自動化します。サードパーティーのツールや AWS SDK を使用して、スケーリングを自動化することもできます。

マネージド AWS サービスには、Amazon S3、Amazon CloudFront 、AWS Auto Scaling、AWS Lambda、Amazon DynamoDB、AWS Fargate、および Amazon Route 53 が含まれます。

AWS Auto Scaling では、障害のあるインスタンスを検出して置き換えることができます。他にも、Amazon EC2 インスタンスおよびスポットフリート、Amazon ECS タスク、Amazon DynamoDB テーブルとインデックス、Amazon Aurora レプリカなどのリソースのスケーリングプランを作成することもできます。

EC2 インスタンスをスケールする場合は、複数のアベイラビリティーゾーン (できれば少なくとも 3 つ) を使用し、容量を追加または削除して、これらのアベイラビリティーゾーン間のバランスを維持します。ECS タスクまたは Kubernetes ポッド (Amazon Elastic Kubernetes Service を使用しているとき) も複数のアベイラビリティーゾーンに分散してください。

AWS Lambda を使用しているときには、インスタンスは自動的にスケールされます。AWS Lambda は、関数のイベント通知を受信するたびに、コンピューティングフリート内の空き容量をすばやく見つけ、割り当てられた同時実行数までコードを実行します。特定の Lambda と Service Quotas で、必要な同時実行数が確実に設定されているようにしてください。

Amazon S3 は、高いリクエストレートに対応するため自動的にスケールされます。例えば、アプリケーションでバケット内のプレフィックスごとに 1 秒あたり 3,500 回以上の PUT/COPY/POST/DELETE リクエストまたは 5,500 回以上の GET/HEAD リクエストを達成できます。バケット内のプレフィックスの数に制限はありません。読み取りを並列化することによって読み取りまたは書き込みのパフォーマンスを向上させることができます。たとえば、Amazon S3 バケットに 10 個のプレフィックスを作成して読み取りを並列化すると、読み取りパフォーマンスを 1 秒あたり 55,000 回の読み取りリクエストにスケールできます。

Amazon CloudFront または信頼できるコンテンツ配信ネットワーク (CDN) を設定して使用します。CDN は、より迅速なエンドユーザーレスポンスタイムを提供でき、コンテンツのリクエストをキャッシュから処理できるため、ワークロードをスケールする必要性が少なくなります。

一般的なアンチパターン:

  • 自動ヒーリングのために Auto Scaling グループを実装しますが、伸縮性は実装しません。

  • トラフィックの大幅な増加に対応するために自動スケーリングを使用する。

  • ステートフル性が高いアプリケーションをデプロイし、伸縮性を排除する。

このベストプラクティスを活用するメリット: 自動化により、リソースのデプロイと廃棄で手動エラーが発生する可能性がなくなります。自動化は、デプロイや廃棄のニーズへの応答が遅いことによるコストの超過やサービス拒否のリスクを排除します。

このベストプラクティスを活用しない場合のリスクレベル:

実装のガイダンス

  • AWS Auto Scaling を設定して使用します。これにより、アプリケーションをモニタリングし、安定した予測可能なパフォーマンスを可能な限り低いコストで維持するためのキャパシティを自動的に調整します。AWS Auto Scaling を使用すると、複数のサービスにまたがる複数のリソースに対してアプリケーションのスケーリングをセットアップできます。

    • What is AWS Auto Scaling?

      • Amazon EC2 インスタンスとスポットフリート、Amazon ECS タスク、Amazon DynamoDB のテーブルとインデックス、Amazon Aurora のレプリカ、および AWS Marketplace アプライアンスなど、該当するものに対して Auto Scaling を設定します。

  • Elastic Load Balancing を使用します。ロードバランサーは、パスまたはネットワーク接続ごとに負荷を分散することができます。

    • Elastic Load Balancing とは?

      • Application Load Balancer は、パスごとに負荷を分散できます。

      • Network Load Balancers は、接続ごとに負荷を分散することができます。

        • Network Load Balancer とは?

          • Network Load Balancer は、TCP を使用してトラフィックをさまざまなワークロードに分散するか、ワークロードの IP アドレスの一定のセットが含まれるように設定します。

          • Network Load Balancer を使用すると、AWS Auto Scaling と統合して需要を管理するという方法で負荷を分散できます。

  • 可用性の高い DNS プロバイダーを使用します。DNS 名により、ユーザーは、IP アドレスの代わりに DNS 名を入力してワークロードにアクセスでき、この情報を、定義されたスコープ (通常はワークロードのユーザーに対してグローバルに定義されたスコープ) に分散できます。

    • Amazon Route 53 または信頼された DNS プロバイダーを使用します。

    • Route 53 を使用して、CloudFront ディストリビューションとロードバランサーを管理します。

      • 管理する予定のドメインとサブドメインを決定します。

      • ALIAS レコードまたは CNAME レコードを使用して適切なレコードセットを作成します。

  • AWS グローバルネットワークを使用して、ユーザーからアプリケーションへのパスを最適化します。AWSGlobal Accelerator は、アプリケーションエンドポイントの状態を継続的にモニタリングし、トラフィックを 30 秒以内に正常なエンドポイントにリダイレクトします。

    • AWS Global Accelerator は、ローカルまたはグローバルユーザーが使用するアプリケーションの可用性とパフォーマンスを向上させるサービスです。Application Load Balancer、Network Load Balancer、Amazon EC2 インスタンスなど、単一または複数の AWS リージョンのアプリケーションエンドポイントへの固定エントリポイントとして機能する静的 IP アドレスが提供されます。

  • Amazon CloudFront または信頼できるコンテンツ配信ネットワーク (CDN) を設定して使用します。コンテンツ配信ネットワークは、エンドユーザーの応答時間を短縮し、ワークロードの不要なスケーリングを引き起こす原因となるコンテンツのリクエストを処理できます。

    • Amazon CloudFront とは何ですか?

      • ワークロード用の Amazon CloudFront ディストリビューションを設定するか、サードパーティーの CDN を使用します。

        • エンドポイントセキュリティグループまたはアクセスポリシーで CloudFront の IP 範囲を使用することで、ワークロードへのアクセスを CloudFront からのみに制限できます。

リソース

関連ドキュメント: