ALB+AutoScalingを活用したスケーラブルな冗長化構成【ハンズオン】

目次

この記事の内容

複数AZで運用するEC2インスタンスを、ALBとAuto Scalingを活用して冗長化する構成・構築手順を解説します。

本記事で分かること
  • 本構成の概要(特徴、満足する要件)
  • 構築手順

解説する構成

以下要素を組み合わせた、「可用性」・「スケーラビリティ」・「セキュリティ」を高めた構成を解説します。

  • 【可用性】
    • ALBによる負荷分散
  • 【スケーラビリティ】
    • Auto Scalingによる自動スケーリング
  • 【セキュリティ】
    • ACMによるSSL/TLS通信の暗号化

構成の解説

上記構成について、以下の観点で解説します。

  • 特徴
  • 満足する要件

特徴

本構成は、Auto ScalingやALB, ACMといったAWSサービスを採用することで、スケーラブルかつ高い可用性を持つ構成です。

本構成の特徴
  • スケーラビリティの向上
  • EC2インスタンスの負荷分散
  • 複数AZによる高可用性
  • 暗号化通信によるセキュリティ強化

特徴①:スケーラビリティの向上

Auto Scalingを採用することで、システムのトラフィックや負荷に応じて自動的にリソースを増減させることができます。これによってパフォーマンスを維持しつつ、無駄なリソース使用を最小化できます。

なお、今回のハンズオンでは以下のルールでインスタンスを増減させます。

ハンズオンで採用するスケーリングのルール
  • 平均CPU利用率が50%を超過したら、インスタンスを増加する。
  • 平均CPU利用率が50%を下回ったら、インスタンスを停止する。

特徴②:EC2インスタンスの負荷分散

ALBを採用することで、トラフィックを複数のEC2インスタンスに分散できます。これによって、特定のインスタンスへの負荷集中を防ぎ、全体のパフォーマンスを均一に維持できます。

特徴③:複数AZによる高可用性

複数のAZ(アベイラビリティゾーン)にまたがる構成を採用することで、一方のAZで障害が発生した場合でも、もう一方のAZに配置しているEC2インスタンスで処理を継続できます。

特徴④:暗号化通信によるセキュリティ強化

ACMとALBを統合することで、ACMで管理しているSSL/TLS証明書で暗号化通信(Https)を実現できます。これによってユーザーとシステム間の通信が安全に保護されます。

上記構成が満足する要件

満足する要件
  • スケーラビリティ
    • 負荷の増減に応じて、自動的にEC2インスタンスの起動・停止が可能であること
  • 性能
    • トラフィックを複数のEC2インスタンスに分散させること。
    • 各EC2インスタンスのCPU使用率が50%以下であること。
  • 高可用性
    • 1つのAZが利用できなくない場合も継続運用が可能であること
  • セキュリティ
    • ユーザーとシステム間の通信が暗号化されていること

構築手順

ここからは、以下の構成における構築手順を解説します。

以下のステップに分けて、構築手順を解説します。

①:IAMロールの作成

EC2にアタッチするIAMロールを作成します。
なお、CloudWatchにメトリクスを送信するための権限を付与します。

STEP
IAMロールの作成画面に遷移

IAMのコンソール画面から、ロール(左側のメニュー)ロールを作成の順に選択します。

STEP
【設定①】信頼されたエンティティを選択

以下の値を設定して次へを選択します。

項目設定値
信頼されたエンティティタイプAWSのサービス
ユースケースEC2
STEP
【設定②】許可を追加

CloudWatchAgentServerPolicyを選択して、次へを選択します。

このポリシーは、EC2インスタンスがCloudWatchエージェントを通じてカスタムメトリクス(CPU使用率など)をCloudWatchに送信するために必要です。

STEP
【設定③】名前、確認、および作成

任意の名前を設定して、ロールを作成を選択します。

②:VPCの作成

続いて、EC2を配置するVPCを作成します。

STEP
VPCの作成画面に遷移

VPCのコンソール画面からVPCを作成を選択します。

STEP
【設定】VPCを作成

設定項目を入力してVPCを作成を選択します。

項目設定値
作成するリソースVPCのみ
名前タグ任意の名前
IPv4 CIDR ブロックIPIv4 CIDRの手動入力
IPv4 CIDR10.0.0.0/16
IPv6 CIDR ブロックIPv6 CIDR ブロックなし
上記以外の項目デフォルト値のまま

③:サブネットの作成

続いて、以下のアベイラビリティゾーンに属するサブネットをそれぞれ1つずつ作成します。

作成対象のアベイラビリティゾーン
  • ap-northeast-1a
  • ap-northeast-1c
STEP
サブネットの作成画面に遷移

VPCのコンソール画面からサブネット(左側のメニュー)VPCを作成の順に選択します。

STEP
【設定】サブネットを作成

設定項目を入力してサブネットを作成を選択します。

カテゴリ項目設定値
VPCVPC ID作成したVPC ID
サブネットサブネット名任意の名前
アベイラビリティーゾーンap-northeast-1a
IPv4 サブネット CIDR ブロック10.0.1.0/24
上記以外の項目デフォルト値のまま
STEP
もう一つのサブネットを作成

STEP1, STEP2の手順を繰り返し行い、サブネットをもう一つ作成します。
ただし、一部の設定項目は以下のように変更してください。

変更が必要な設定項目
カテゴリ項目設定値
サブネットサブネット名任意の名前
アベイラビリティーゾーンap-northeast-1c
IPv4 サブネット CIDR ブロック10.0.2.0/24

④:インターネットゲートウェイの作成

VPC内のリソースがインターネット接続するために、インターネットゲートウェイを作成します。

STEP
インターネットゲートウェイの作成画面に遷移

VPCのコンソール画面からインターネットゲートウェイ(左側のメニュー)インターネットゲートウェイの作成の順に選択します。

STEP
【設定】インターネットゲートウェイの作成

名前タグに任意の名前を設定して、インターネットゲートウェイの作成を選択します。

⑤:ルートテーブルの設定

パブリックサブネットのルートテーブルに対して、インターネットゲートウェイへのルートを追加します。

STEP
ルートテーブルの設定画面に遷移

作成したパブリックサブネットのルートテーブルタブから、ルートテーブルのリンクを選択します。

STEP
ルート編集画面に遷移

表示されたルートテーブルを選択して、ルートタブからルートを編集を選択します。

STEP
【設定】ルートの追加

ルートを追加を選択し、設定項目を入力して変更を保存を選択します。

項目設定値
送信先0.0.0/0
ターゲットインターネットゲートウェイ
(作成したIGWを選択)

⑥:EC2インスタンスの作成

2つのアベイラビリティゾーンにEC2インスタンスを作成します。

STEP
EC2インスタンスの作成画面に遷移

EC2のコンソール画面に遷移し、インスタンス(左側のメニュー)インスタンスを起動の順に選択します。

STEP
【設定】インスタンスを起動

設定項目を入力してインスタンスを起動を選択します。

カテゴリ項目設定値
名前とタグ名前任意の名前
Amazon マシンイメージクイックスタートAmazon Linux
AMIAmazon Linux 2023 AMI
※無料利用枠の対象を選択してください。
インスタンスタイプt2.micro
※無料利用枠の対象を選択してください。
キーペアキーペア名「新しいキーペアの作成」を選択し、任意の名前で作成してください。
ネットワーク設定VPC作成したVPC
サブネット作成したパブリックサブネット
(10.0.1.0/24)
パブリック IPの自動割り当て有効化
ファイアウォール(セキュリティグループ)セキュリティグループを作成
 ※この時点では何も許可しないでください。
上記以外の項目デフォルト値のまま
STEP
EC2インスタンスの追加起動

STEP1, STEP2の手順を繰り返し行い、もう一台EC2インスタンスを起動します。
ただし、一部の設定項目は以下のように変更してください。

変更が必要な設定項目
カテゴリ項目設定値
ネットワーク設定サブネット
作成したパブリックサブネット
(10.0.2.0/24)

⑦:SSL/TLS証明書の作成

ユーザー・サーバ間の通信を暗号化するために必要な、SSL/TLS証明書を作成します。

本手順はドメインを取得している必要があります。
ドメインを取得していない場合は、本手順をスキップしても問題ないです。

STEP
証明書作成画面に遷移

ACMのコンソール画面に遷移し、リクエストを選択します。

STEP
【設定】証明書をリクエスト

パブリック証明書をリクエストを選択して、次へを選択します。

STEP
【設定】パブリック証明書をリクエスト

設定項目を入力してリクエストを選択します。

項目設定値
完全修飾ドメイン名取得済みの完全修飾ドメイン名
検証方法DNS検証
キーアルゴリズムRSA 2048
STEP
DNS検証

作成した証明書のドメインから

  • CNAME名
  • CNAME値

を確認し、取得済みドメインのDNSレコードにCNAMEで新規レコードを追加します。

STEP
証明書の有効化確認

証明書の一覧画面から、新規発行した証明書のステータスが発行済みになっていることを確認します。

ACM がCNAME値を生成してから 72 時間以内にドメイン名を検証できない場合、タイムアウトとなり発行に失敗します。

⑧:ALBの作成

ユーザーからのリクエストをEC2インスタンスに振り分けるための、ALBを作成します。
以下の手順で作成します。

ALBの作成手順
  • ターゲットグループの作成
  • ロードバランサーの作成

⑧-1:ターゲットグループの作成

STEP
ターゲットグループの作成画面に遷移

EC2のコンソール画面からロードバランサー(左側のメニュー)ロードバランサーの作成の順に選択します。

STEP
【設定①】グループの詳細の指定

設定項目を入力して次へを選択します。

カテゴリ項目設定値
基本的な設定ターゲットタイプの選択インスタンス
ターゲットグループ名任意の名前
プロトコル:ポートHTTPS
 ※暗号化通信を実現できます。
IPアドレスタイプIPv4
VPCEC2インスタンスを配置しているVPC
プロトコルバージョンHTTP2
ヘルスチェックヘルスチェックプロトコルHTTPS
ヘルスチェックパス/
STEP
【設定②】ターゲットを登録

作成済みのEC2インスタンスを選択して保留中として以下を含めるターゲットグループの作成の順に選択します。

⑧-2:ロードバランサーの作成

STEP
ALBの作成画面に遷移

EC2のコンソール画面からロードバランサー(左側のメニュー)ロードバランサーの作成の順に選択します。

STEP
【設定①】ロードバランサータイプの比較と選択

3つのタイプの中からApplication Load Balancerを選択して作成を選択します。

STEP
【設定②】Application Load Balancerを作成

設定項目を入力してロードバランサーの作成を選択します。

カテゴリ項目設定値
基本的な設定ロードバランサー名任意の名前
スキームインターネット向け
ロードバランサーのIPアドレスタイプIPv4
ネットワークマッピングVPC作成したEC2インスタンスを配置しているVPC
アベイラビリティゾーン作成した2つのサブネットを選択
リスナーとルーティングプロトコルHTTPS
ポート443
デフォルトアクション作成したターゲットグループ
セキュアリスナーの設定デフォルトSSL/TLSサーバー証明書ACMから
証明書ACMで発行済みの証明書
上記以外の項目デフォルトのまま

⑨:セキュリティグループの設定

EC2インスタンスのセキュリティグループ(ALBからのインバウンド通信を許可)を作成します。

STEP
セキュリティグループの作成画面に遷移

EC2のコンソール画面からセキュリティグループ(左側のメニュー)セキュリティグループを作成の順に選択します。

STEP
【設定】セキュリティグループを作成

設定項目を入力して、セキュリティグループを作成を選択します。

カテゴリ項目設定値
基本的な詳細セキュリティグループ名任意の名前
VPCEC2インスタンスを配置しているVPC
インバウンドルールタイプHTTPS
ソースALBのセキュリティグループ
STEP
EC2インスタンスへの適用

⑥で作成した2つのEC2インスタンスに、先ほど作成したセキュリティグループを適用します。

⑩:Auto Scalingの作成

EC2インスタンスを冗長化するためのAuto Scalingを作成します。以下の順番で作成します。

  • 起動テンプレートの作成
  • Auto Scalingグループの作成

⑩-1 起動テンプレートの作成

EC2インスタンスを起動する際の設定(AMI、インスタンスタイプ、キー ペアなど)を定義したテンプレートを作成します。

STEP
起動テンプレートの作成画面に遷移

EC2のコンソール画面から起動テンプレート(左側のメニュー)起動テンプレートを作成の順に選択します。

STEP
【設定①】起動テンプレートを作成

設定項目を入力して起動テンプレートを作成を選択します。

項目設定値
起動テンプレート名任意の名前
Amazon マシンイメージAmazon Linux
インスタンスタイプt2.micro
 ※無料利用枠の対象
上記以外の設定項目デフォルト値のまま

⑩-2 Auto Scalingグループの作成

以下条件でスケーリングするAuto Scalingグループを作成します。

条件
  • スケールアップ
    • EC2インスタンスの「平均CPU利用率」が50%以上
  • スケールイン
    • EC2インスタンスの「平均CPU利用率」が50%以下
STEP
Auto Scalingグループの作成画面に遷移

EC2のコンソール画面からAuto Scalingグループ(左側のメニュー)Auto Scalingグループを作成するの順に選択します。

STEP
【設定①】起動テンプレートを選択

以下項目を設定して次へを選択します。

項目設定値
Auto Scaling グループ名任意の名前
起動テンプレート⑩-1で作成した起動テンプレート
STEP
【設定②】インスタンス起動オプションを選択する

以下項目を設定して次へを選択します。

項目設定値
VPC②で作成したVPC
アベイラビリティゾーンとサブネット③で作成した2つのサブネット
STEP
【設定③】詳細オプションを設定する

以下項目を設定して次へを選択します。

項目設定値
ロードバランシング既存のロードバランサーにアタッチする
既存のロードバランサーターゲットグループ⑧で作成したALB
VPC Lattice 統合オプションVPC Latticeサービスがありません
追加のヘルスチェックオプションElastic Load Balancing のヘルスチェックをオンにする
モニタリングCloudWatch 内でグループメトリクスの収集を有効にする

【VPC Lattice 統合オプションとは?】

異なるVPCやアカウントにまたがるサービス間の接続、セキュリティ、モニタリングを一元的に管理できます。

【Elastic Load Balancing のヘルスチェックとは?】

この設定をオンにすると、Elastic Load Balancing (ELB) がAuto Scalingグループ内のインスタンスの健全性を定期的にチェックします。unhealthyと判断されたインスタンスは自動的に終了され、新しい健全なインスタンスに置き換えられます。

STEP
【設定④】グループサイズとスケーリングを設定する

以下項目を設定して次へを選択します。

項目設定値
希望する容量※Auto Scalingグループで起動維持したいインスタンス数です。任意の値を設定してください。
最小の希望する容量※Auto Scalingグループが常に維持する最小インスタンス数です。任意の値を設定してください。
最大の希望する容量※Auto Scalingグループが常に維持する最大インスタンス数です。任意の値を設定してください。
自動スケーリングターゲット追跡スケーリングポリシー
メトリクスタイプ平均CPU使用率
ターゲットグループ⑧-1で作成したALBのターゲットグループ
ターゲット50
インスタンスメンテナンスポリシー※新規インスタンスを起動する際のルールです。任意のオプションを選択してください。
スケールイン保護無効
※Auto Scalingグループ内の特定のインスタンスを自動的な削除から保護する機能です。

【Auto Scalingグループで選択可能な「メトリクスタイプ」】

  • 平均CPU使用率
  • 平均ネットワーク入力(バイト)
  • 平均ネットワーク出力(バイト)
  • ターゲットごとのApplication Load Balancerリクエスト数

【Auto Scalingグループで選択可能な「インスタンスメンテナンスポリシー」】

  • ポリシーなし
  • 終了する前に起動
    • 可用性を優先する際に選択します。
  • 終了してから起動
    • コストを優先する際に選択します。
  • カスタム動作
    • フレキシブルな設定が可能です。
STEP
【設定⑤】通知を追加する

Auto Scaling グループ内の EC2 インスタンスが以下のアクションを実行するたびに、SNS トピックに通知を送信するための設定です。必要に応じて設定して次へを選択してください。

通知対象のアクション
  • 起動
  • 終了
  • 起動失敗
  • 終了失敗
STEP
【設定⑥】タグを追加する

必要に応じてタグを追加して次へを選択してください。

STEP
【設定⑦】確認

設定項目を確認してAuto Scalingグループを作成するを選択します。

関連記事

本記事の解説は以上です。
ここからは、より知識を深めたい人向けに関連記事を紹介します。

本記事で登場したAWSサービス

本記事では以下のAWSサービスが登場しました。

本記事で登場したAWSサービス
  • VPC(サブネット、ルートテーブル、インターネットゲートウェイ)
  • EC2
  • ACM
  • ALB
  • Auto Scaling


これらのサービスについては、初心者でも概要や構成要素等を理解できるように図解しているので、もっとよく知りたい方は以下の記事をご覧ください。

VPC
EC2
ALB
Auto Scaling
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次