弾力性に優れたアーキテクチャの設計
高可用性の確保
単一障害点の排除
単一AZのシンプルな構成をとると単一障害点によりシステムダウンに弱くなる。
ELBを利用したマルチAZ構成により、単一障害を排除できる。

データベースに関して、マルチAZでマスタースレーブ構成をとって自動フェイルオーバーで切り替え可能にし、かつリードレプリカで負荷を軽減する。

ELB
Elastic Load Balancing(ELB)
Classic Load Balancer(CLB)、Application Load Balancer(ALB)、Network Load Balancer(NLB)の3つのタイプが存在する。
ロードバランサー:各サーバーにアクセスを振り分けて負荷を分散する装置
受信したトラフィックを複数のアベイラビリティーゾーンの複数のターゲット (EC2 インスタンス、コンテナ、IP アドレスなど) に自動的に分散させる。
登録されているターゲットの状態をモニタリングし、正常なターゲットにのみトラフィックをルーティングする。

主な機能
ヘルスチェック:インスタンスの正常/異常を確認して振り分ける
クロスゾーン負荷分散:配下のインスタンスの負荷に応じて、複数のAZにまたがる各インスタンス間で均等に負荷分散を行う
暗号化通信:SSL/TLS証明書をELBに設定することでHTTPSまたはTLS通信を実施できる
スティッキーセッション:セッションを継続して、同じクライアント端末からのリクエストを継続して同じインスタンスに送信する
ALB
Application Load Balancer(ALB)
OSI参照モデルのレイヤー7で機能するロードバランサーで、異なるアプリケーションへのリクエストをルーティングすることが可能。
- リクエスト内容を確認して分散先を振り分けるコンテントベースルーティングが可能
- URLのパスに基づいてルーティングするパスベースルーティングが可能
NLB
Network Load Balancer(NLB)
超低遅延で高スループットを維持しながら秒間何百万リクエストをさばくように設計されたレイヤー4で機能する高性能ロードバランサー。
Amazon EC2 Auto Scaling
アプリケーションの需要の変化に応じてEC2インスタンスの数を自動的に調整し、可用性を向上させる。
Auto Scalingはスケーリングタイプのうち、水平スケーリング(スケールイン/スケールアウト)を行う。

Auto Scaling設定
Auto Scalingグループを作成するページから、あらかじめ作成しておいた起動テンプレートを選択する。
動的なスケーリングを行うには、ターゲット追跡スケーリングポリシーを設定する。CloudWatchのモニタリングメトリクスを利用してスケーリングを実施する。
Auto Scalingグループにある終了ポリシーはデフォルトでは古いものから終了するようになっている。最新のものから終了するように設定しておく。
ELBに紐づいているEC2インスタンスの設定で「Auto Scalingグループにアタッチ」をしておく。
RDS
Relational Database Service(RDS)
パッチ適用、バックアップ、冗長性、フェイルオーバー、ディザスタリカバリなどが利用できるマネージド型のリレーショナルデータベースサービス。
- IBM Db2、MariaDB、Microsoft SQL Server、MySQL、Oracle Database、PostgreSQL など既に使い慣れたデータベースエンジンを使用できる
- バックアップ、ソフトウェアパッチ、自動的な障害検出、および復旧を管理する
- プライマリDBインスタンスと同期しているセカンダリDBインスタンスがあると、問題が発生したときにセカンダリインスタンスにフェイルオーバーできるので、高可用性を実現できる
- リードレプリカを使用して、読み取りスケーリングを拡張できる
制約事項
- バージョンが限定される
- キャパシティに上限がある
- OSへのログインができない
- ファイルシステムへのアクセスができない
- 一部の機能が使えない
- 個別パッチは適用できない
バックアップ
- 自動バックアップ
- 5分毎にトランザクションログを取得しており、これにより5分前までの状態を復元できる
- スナップショットの取得
暗号化
- 通信の暗号化:SSL/TLSを使用してDBインスタンスとの通信を暗号化
- 保管データの暗号化:
- 暗号化対象:
- DBインスタンス
- 自動バックアップ
- リードレプリカ
- スナップショット
- 暗号化方式:
- インスタンス作成時のみ暗号化を設定可能
- AES-256暗号化
- AWS KMSによる鍵管理
- 暗号化対象:
スケーリング
- スケールアップ:処理能力を高くする(垂直スケーリング)
- インスタンスサイズの変更
- インスタンスタイプの変更
- 汎用
- メモリ最適化:メモリ負荷の高い処理や高速データベース処理に利用する
- ストレージタイプの変更
- 汎用
- プロビジョンドIOPS:高パフォーマンス
- マグネティック:ハードディスクタイプ
- スケールアウト:マシンの台数を増やす(水平スケーリング)
- リードレプリカの増設:読み込み専用インスタンスを増設して負荷分散する
- キャッシュの利用:ElastiCacheまたはMYSQL Memcachedを利用してキャッシュを増設して読み込み処理を高速化
- Auroraへの移行:RDS MySQLをAurora MySQLへ移行することで性能アップ可能
