この記事の内容
複数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にメトリクスを送信するための権限を付与します。

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

以下の値を設定して次へを選択します。
| 項目 | 設定値 |
|---|---|
| 信頼されたエンティティタイプ | AWSのサービス |
| ユースケース | EC2 |

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

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

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

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

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

| 項目 | 設定値 |
|---|---|
| 作成するリソース | VPCのみ |
| 名前タグ | 任意の名前 |
| IPv4 CIDR ブロック | IPIv4 CIDRの手動入力 |
| IPv4 CIDR | 10.0.0.0/16 |
| IPv6 CIDR ブロック | IPv6 CIDR ブロックなし |
| 上記以外の項目 | デフォルト値のまま |
③:サブネットの作成
続いて、以下のアベイラビリティゾーンに属するサブネットをそれぞれ1つずつ作成します。
- ap-northeast-1a
- ap-northeast-1c

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

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

| カテゴリ | 項目 | 設定値 |
|---|---|---|
| VPC | VPC ID | 作成したVPC ID |
| サブネット | サブネット名 | 任意の名前 |
| アベイラビリティーゾーン | ap-northeast-1a | |
| IPv4 サブネット CIDR ブロック | 10.0.1.0/24 | |
| 上記以外の項目 | デフォルト値のまま | |
STEP1, STEP2の手順を繰り返し行い、サブネットをもう一つ作成します。
ただし、一部の設定項目は以下のように変更してください。
| カテゴリ | 項目 | 設定値 |
|---|---|---|
| サブネット | サブネット名 | 任意の名前 |
| アベイラビリティーゾーン | ap-northeast-1c | |
| IPv4 サブネット CIDR ブロック | 10.0.2.0/24 |
④:インターネットゲートウェイの作成
VPC内のリソースがインターネット接続するために、インターネットゲートウェイを作成します。

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

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

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

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

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

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

| 項目 | 設定値 |
|---|---|
| 送信先 | 0.0.0/0 |
| ターゲット | インターネットゲートウェイ (作成したIGWを選択) |
⑥:EC2インスタンスの作成
2つのアベイラビリティゾーンにEC2インスタンスを作成します。

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

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

| カテゴリ | 項目 | 設定値 |
|---|---|---|
| 名前とタグ | 名前 | 任意の名前 |
| Amazon マシンイメージ | クイックスタート | Amazon Linux |
| AMI | Amazon Linux 2023 AMI ※無料利用枠の対象を選択してください。 | |
| インスタンスタイプ | t2.micro ※無料利用枠の対象を選択してください。 | |
| キーペア | キーペア名 | 「新しいキーペアの作成」を選択し、任意の名前で作成してください。 |
| ネットワーク設定 | VPC | 作成したVPC |
| サブネット | 作成したパブリックサブネット (10.0.1.0/24) | |
| パブリック IPの自動割り当て | 有効化 | |
| ファイアウォール(セキュリティグループ) | セキュリティグループを作成 ※この時点では何も許可しないでください。 | |
| 上記以外の項目 | デフォルト値のまま | |
STEP1, STEP2の手順を繰り返し行い、もう一台EC2インスタンスを起動します。
ただし、一部の設定項目は以下のように変更してください。
| カテゴリ | 項目 | 設定値 |
|---|---|---|
| ネットワーク設定 | サブネット | 作成したパブリックサブネット (10.0.2.0/24) |
⑦:SSL/TLS証明書の作成
ユーザー・サーバ間の通信を暗号化するために必要な、SSL/TLS証明書を作成します。

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

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

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

| 項目 | 設定値 |
|---|---|
| 完全修飾ドメイン名 | 取得済みの完全修飾ドメイン名 |
| 検証方法 | DNS検証 |
| キーアルゴリズム | RSA 2048 |
作成した証明書のドメインから
- CNAME名
- CNAME値
を確認し、取得済みドメインのDNSレコードにCNAMEで新規レコードを追加します。

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

⑧:ALBの作成
ユーザーからのリクエストをEC2インスタンスに振り分けるための、ALBを作成します。
以下の手順で作成します。
- ターゲットグループの作成
- ロードバランサーの作成

⑧-1:ターゲットグループの作成
EC2のコンソール画面からロードバランサー(左側のメニュー)>ロードバランサーの作成の順に選択します。

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

| カテゴリ | 項目 | 設定値 |
|---|---|---|
| 基本的な設定 | ターゲットタイプの選択 | インスタンス |
| ターゲットグループ名 | 任意の名前 | |
| プロトコル:ポート | HTTPS ※暗号化通信を実現できます。 | |
| IPアドレスタイプ | IPv4 | |
| VPC | EC2インスタンスを配置しているVPC | |
| プロトコルバージョン | HTTP2 | |
| ヘルスチェック | ヘルスチェックプロトコル | HTTPS |
| ヘルスチェックパス | / |
作成済みのEC2インスタンスを選択して保留中として以下を含める>ターゲットグループの作成の順に選択します。

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

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

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

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

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

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

| カテゴリ | 項目 | 設定値 |
|---|---|---|
| 基本的な詳細 | セキュリティグループ名 | 任意の名前 |
| VPC | EC2インスタンスを配置しているVPC | |
| インバウンドルール | タイプ | HTTPS |
| ソース | ALBのセキュリティグループ |
⑥で作成した2つのEC2インスタンスに、先ほど作成したセキュリティグループを適用します。

⑩:Auto Scalingの作成
EC2インスタンスを冗長化するためのAuto Scalingを作成します。以下の順番で作成します。
- 起動テンプレートの作成
- Auto Scalingグループの作成

⑩-1 起動テンプレートの作成
EC2インスタンスを起動する際の設定(AMI、インスタンスタイプ、キー ペアなど)を定義したテンプレートを作成します。
EC2のコンソール画面から起動テンプレート(左側のメニュー)>起動テンプレートを作成の順に選択します。

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

| 項目 | 設定値 |
|---|---|
| 起動テンプレート名 | 任意の名前 |
| Amazon マシンイメージ | Amazon Linux |
| インスタンスタイプ | t2.micro ※無料利用枠の対象 |
| 上記以外の設定項目 | デフォルト値のまま |
⑩-2 Auto Scalingグループの作成
以下条件でスケーリングするAuto Scalingグループを作成します。
- スケールアップ
- EC2インスタンスの「平均CPU利用率」が50%以上
- スケールイン
- EC2インスタンスの「平均CPU利用率」が50%以下
EC2のコンソール画面からAuto Scalingグループ(左側のメニュー)>Auto Scalingグループを作成するの順に選択します。

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

| 項目 | 設定値 |
|---|---|
| Auto Scaling グループ名 | 任意の名前 |
| 起動テンプレート | ⑩-1で作成した起動テンプレート |
以下項目を設定して次へを選択します。

| 項目 | 設定値 |
|---|---|
| VPC | ②で作成したVPC |
| アベイラビリティゾーンとサブネット | ③で作成した2つのサブネット |
以下項目を設定して次へを選択します。

| 項目 | 設定値 |
|---|---|
| ロードバランシング | 既存のロードバランサーにアタッチする |
| 既存のロードバランサーターゲットグループ | ⑧で作成したALB |
| VPC Lattice 統合オプション | VPC Latticeサービスがありません |
| 追加のヘルスチェックオプション | Elastic Load Balancing のヘルスチェックをオンにする |
| モニタリング | CloudWatch 内でグループメトリクスの収集を有効にする |
【VPC Lattice 統合オプションとは?】
異なるVPCやアカウントにまたがるサービス間の接続、セキュリティ、モニタリングを一元的に管理できます。
【Elastic Load Balancing のヘルスチェックとは?】
この設定をオンにすると、Elastic Load Balancing (ELB) がAuto Scalingグループ内のインスタンスの健全性を定期的にチェックします。unhealthyと判断されたインスタンスは自動的に終了され、新しい健全なインスタンスに置き換えられます。
以下項目を設定して次へを選択します。

| 項目 | 設定値 |
|---|---|
| 希望する容量 | ※Auto Scalingグループで起動維持したいインスタンス数です。任意の値を設定してください。 |
| 最小の希望する容量 | ※Auto Scalingグループが常に維持する最小インスタンス数です。任意の値を設定してください。 |
| 最大の希望する容量 | ※Auto Scalingグループが常に維持する最大インスタンス数です。任意の値を設定してください。 |
| 自動スケーリング | ターゲット追跡スケーリングポリシー |
| メトリクスタイプ | 平均CPU使用率 |
| ターゲットグループ | ⑧-1で作成したALBのターゲットグループ |
| ターゲット | 50 |
| インスタンスメンテナンスポリシー | ※新規インスタンスを起動する際のルールです。任意のオプションを選択してください。 |
| スケールイン保護 | 無効 ※Auto Scalingグループ内の特定のインスタンスを自動的な削除から保護する機能です。 |
【Auto Scalingグループで選択可能な「メトリクスタイプ」】
- 平均CPU使用率
- 平均ネットワーク入力(バイト)
- 平均ネットワーク出力(バイト)
- ターゲットごとのApplication Load Balancerリクエスト数
【Auto Scalingグループで選択可能な「インスタンスメンテナンスポリシー」】
- ポリシーなし
- 終了する前に起動
- 可用性を優先する際に選択します。
- 終了してから起動
- コストを優先する際に選択します。
- カスタム動作
- フレキシブルな設定が可能です。
Auto Scaling グループ内の EC2 インスタンスが以下のアクションを実行するたびに、SNS トピックに通知を送信するための設定です。必要に応じて設定して次へを選択してください。
- 起動
- 終了
- 起動失敗
- 終了失敗

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

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

関連記事
本記事の解説は以上です。
ここからは、より知識を深めたい人向けに関連記事を紹介します。
本記事で登場したAWSサービス
本記事では以下のAWSサービスが登場しました。
- VPC(サブネット、ルートテーブル、インターネットゲートウェイ)
- EC2
- ACM
- ALB
- Auto Scaling
これらのサービスについては、初心者でも概要や構成要素等を理解できるように図解しているので、もっとよく知りたい方は以下の記事をご覧ください。
VPC

EC2

ALB

Auto Scaling


コメント