REL01-BP03 アーキテクチャを通じて、固定サービスクォータと制約に対応する
サービスクォータ、サービスの制約、物理リソースの制限には変更できないものもあることに注意します。このような制限が信頼性に影響を及ぼさないように、アプリケーションとサービスのアーキテクチャを設計します。
例えば、ネットワーク帯域幅、サーバーレス関数呼び出しのペイロードサイズ、API Gateway のスロットルバーストレート、データベースへの同時ユーザー接続数などは変更できません。
期待される成果: アプリケーションやサービスは、通常のトラフィック状況および高トラフィック状況で期待されるとおりに動作します。アプリケーションやサービスは、リソースの固定制約またはサービスクォータの制限内で機能するように設計されています。
一般的なアンチパターン:
-
単一のサービスリソースを使用する設計を選択し、スケーリング時に障害が発生する原因となる設計上の制約があることを認識していない。
-
テスト中にサービスの固定クォータに到達してしまう非現実的なベンチマークを採用している。(例: バースト制限を利用しながら長時間テストを実行する)
-
固定サービスクォータを超えてもスケーリングしたり変更したりできない設計を選択する。(例: 256KB のペイロードサイズの SQS)
-
高トラフィックイベント中に危険にさらされる可能性があるサービスクォータのしきい値をモニタリングしたり警告したりするために、オブザーバビリティが設計および実装されていない。
このベストプラクティスを活用するメリット: 予測されるあらゆるサービス負荷レベルで、アプリケーションが中断や低下することなく実行されることを確認できます。
このベストプラクティスを確立しない場合のリスクレベル: 中
実装のガイダンス
ソフトサービスクォータ、つまりより高い容量ユニットに置き換えられるリソースとは異なり、AWS サービスの固定クォータは変更できません。つまり、アプリケーションの設計で使用する場合、このようなタイプのすべての AWS サービスの容量のハード制限を評価する必要があります。
ハード制限は Service Quotas コンソールに表示されます。列に ADJUSTABLE = No
と表示されていれば、そのサービスにはハード制限があります。ハード制限は、一部のリソース設定ページにも表示されます。例えば、Lambda には調整できない特定のハード制限があります。
例としては、Lambda 関数で実行する Python アプリケーションを設計する場合、Lambda が 15 分以上実行される可能性があるかを判断するためにアプリケーションを評価する必要があります。コードがこのサービスクォータ制限を超過して実行される可能性がある場合は、代替テクノロジーや設計を検討する必要があります。本番環境へのデプロイ後にこの制限に達すると、修正されるまでアプリケーションの機能が低下し、中断することになります。ソフトクォータとは異なり、このような制限は、重大度 1 の緊急事態が発生した場合でも、変更できません。
アプリケーションがテスト環境にデプロイされたら、ハード制限に到達できるかどうかを確認する戦略を行使する必要があります。ストレステスト、負荷テスト、カオステストは、導入テスト計画の一環とする必要があります。
実装手順
-
使用できる AWS サービスの完全なリストをアプリケーションの設計段階で確認します。
-
これらすべてのサービスについて、ソフトクォータ制限とハードクォータ制限を確認します。すべての制限が Service Quotas コンソールに表示されているとは限りません。サービスによっては、このような制限について、別の場所で説明されています。
-
アプリケーションを設計する際は、ビジネス上の成果、ユースケース、依存するシステム、可用性目標、ディザスタリカバリオブジェクトなど、ワークロードのビジネスとテクノロジーの推進要因を確認します。ビジネスとテクノロジーの推進要因に従って、ワークロードに適した分散システムを特定するプロセスを進めます。
-
リージョン全体とアカウント全体にわたるサービス負荷を分析します。ハード制限の多くは、サービスのリージョンに基づいていますが、アカウントに基づく制限もあります。
-
ゾーン障害時とリージョン障害時のリソース使用状況について、回復力あるアーキテクチャを分析します。「アクティブ/アクティブ」、「アクティブ/パッシブ – ホット」、「アクティブ/パッシブ – コールド」、「アクティブ/パッシブ – パイロットライト」のアプローチを使用するマルチリージョン設計を進めると、このような障害ケースはより高い使用状況につながり、ハード制限に達するユースケースを生み出す可能性が出てきます。
リソース
関連するベストプラクティス:
関連するドキュメント:
-
AWS Fault Isolation Boundaries (AWS の障害分離境界)
-
Availability with redundancy (冗長性を備えた可用性)
-
Managing the account lifecycle in account-per-tenant SaaS environments on AWS
(AWS のテナント別アカウント SaaS 環境でアカウントのライフサイクルを管理する) -
Managing and monitoring API throttling in your workloads
(ワークロードの API スロットリングの管理とモニタリング) -
View AWS Trusted Advisor recommendations at scale with AWS Organizations
(AWS Organizations で AWS Trusted Advisor の推奨事項を大規模に表示する) -
Automating Service Limit Increases and Enterprise Support with AWS Control Tower
(AWS Control Tower でサービス制限の緩和とエンタープライズサポートを自動化する) -
Actions, Resources, and Condition Keys for Service Quotas Services (AWS サービスのアクション、リソース、および条件キー)
関連動画:
-
View and Manage Quotas for AWS Services Using Service Quotas
(Service Quotas を使用して AWS のサービスのクォータを表示および管理する) -
AWS IAM Quotas Demo
(AWS IAM のクォータのデモ) -
AWS re:Invent 2018: Close Loops and Opening Minds: How to Take Control of Systems, Big and Small
(AWS re:Invent 2018: ループをクローズして柔軟に対応: サイズを問わず、システムを制御する方法)
関連ツール: