3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWSではじめて冗長構成を構築をしてみた。超ざっくりまとめてみた。

Last updated at Posted at 2021-02-07

今回、AWSの基礎を学ぶ目的で以下のような Web/APサーバのAuto Scaling+DBサーバの冗長化構成を作成しました!
image.png

細かい作業過程は割愛しますが環境構築で理解した基本構成の概要を自分の理解を深めるために、超ざっくりと基本要素をまとめます。

これを見れば、何の目的のために何を作るのか、一目で思い出せるはず!

また、この記事が、これからAWSの基礎学習を始める方の理解の助けとなり、AWSを触るハードルを下げる助けとなれば幸いです。私も初心者です。みなさん頑張りましょう!
qiita-square


  • 説明を極力シンプルにするために、AWSのアカウント作成、IAMユーザの登録は完了している状態から始めます。
  • 作図には AWS 公式アイコンセットを利用してます
  • 全般的に概念的な説明のみとしています。
  • 詳細な設定/オペレーションを知りたい方は、他サイトをご覧ください。

超ざっくりまとめ

超ざっくりと説明すと、以下を行うだけです。

  1. 自分用のネットワーク(VPC、サブネット)/サーバ(EC2インスタンス)を作成する
  2. DB(RDS)を作成し冗長構成をとる
  3. ロードバランサー(ELB)を作成し負荷分散を行う+Auto Scalingの設定を行う

これだけで、さくっと作れてしまいます。

image.png
簡単な設定だけで
必要になれば自動で
image.png
映画マトリックス レボリューションズ
のエージェントのように増加していく...

*あくまでも個人的な Auto Scaling のイメージです。

  1. 自分用のネットワーク(VPC、サブネット)/サーバ(EC2インスタンス)を作成する

まず、VPC、サブネット、EC2を作成します。作成に関しては前回記事を参照ください。

ここまでで以下構成が作成されています。
image.png

  1. DB(RDS)を作成し冗長構成をとる

####RDSとは?

RDSとは、AWSが提供する『マネージド型データベースサービス』です。
簡単に言うと、AWSがセキュリティ、バックアップ等を担ってくれるデータベースといったイメージです。
※Paasサービス。管理はAWSがやってくれて利用者はDBを使うことに専念できる。

####RDSの作成
RDSで冗長構成を構築する際は、AWSマネジメントコンソールで簡単に構築できます。
主な設定項目は以下の通りです。

  • データベースエンジン
qiita-square - インスタンス識別子(インスタンス名) - CPU/メモリ - ストレージ - スタンバイインスタンスを作成する/しないの指定 ※今回はするを選択 - サブネットグループ(DBインスタンスがMain-Standby構成をとるサブネット範囲) - DB配置先のAZ

上記指定で、サブネットグループ内に、Main-Stanby構成でデータベースが作成されます。

####EC2インスタンスからRDSへの接続設定
RDSは起動するとエンドポイントが発行されます。EC2インスタンス上で稼働するプログラムで、RDSへの接続先をエンドポイント指定(ex.myexampledb.xxxx.us-east-1.rds.amazonaws.com)とすることで、AWSが自動的にMainのRDSに接続をしてくれます。またMainのデータベースに障害が起きた時には、standbyのデータベース(RDS)に接続が自動的に切り替わります。

ここまでで以下構成となります。
image.png

3. ロードバランサー(ELB)を作成し負荷分散を行う+Auto Scalingの設定を行う

####そもそも、ELBの目的/特徴は?

  • 負荷分散
    • サーバ処理の負荷分散を行う
  • サービス可用性の向上
    • サーバーの冗長化と組み合わせ、システム全体が停止しない仕組みを作る
    • ヘルスチェックを行い、正常なターゲットにのみトラフィックをルーティングする
  • 通信セキュリティ
    • ELB側でSSL/TLS認証を行うことが可能
  • スティッキーセッション
    • 同一ユーザーから来たリクエストを同じターゲットに送信
    • Webアプリでセッション情報などをターゲットが保持する作りの場合に使用する

####ELBの作成

AWSでは3つのロードラバランサを選択可能です。
image.png

  • ALB (Application Load Balancer)
    • CLBよりも高性能でAWS WAFやターゲットグループ等が使用できる
    • L7レイヤーをサポート
  • NLB(Network Load Balancer)
    • 大量トラフィック用のELB
    • L4レイヤーをサポート
  • CLB (Classic Load Balancer)
    • 旧型の汎用LB
    • L4/L7レイヤーをサポート

Webサーバでは、主にALB (Application Load Balancer)を使用します。
以下のようにWebサーバとAPサーバを分け、3階層構造とする場合は、WebサーバにはALBをAPサーバにはNLBを使用します。
image.png
動画学習サービス「AWS CloudTech」より画像引用

上記から今回の構成では、ALBを使用します。

ALBもAWSマネジメントコンソールから構築します。
主な設定項目は以下の通りです。

  • ①リスナー
    • Listenするプロトコルとポート番号
  • ②アベイラビリティゾーン
    • ELB配置先のアベイラビリティゾーン、サブネット
  • ③ターゲットグループの作成
    • ターゲット:ELBがトラフィックを転送するEC2インスタンスなどのリソースやエンドポイントの決定(どのサーバをELBの対象に含めるかを決定)
    • ターゲットに対する通信プロトコル/ポート番号を設定
  • ④ヘルスチェック内容の指定
    • チェック対象のリソースパスとチェックに使用するプロトコル
    • チェックOK/NGの判断仕様(閾値、チェック間隔、チェック成功コード)
  • ⑤インストールするSSL証明書(HTTPS通信の場合)
  • ⑥セキュリティグループの設定
    • 許可するプロトコル、ポート(Webアプリならばhttp or httpsのみ許可する)
qiita-square [AWS Black Belt Online Seminar Elastic Load Balancing (ELB)より画像引用](https://d1.awsstatic.com/webinars/jp/pdf/services/20191029_AWS-Blackbelt_ELB.pdf)

そして、Internet Gatewayの配置、ルーティングテーブルの設定で外部からアクセスできるようにします。
この部分に関しては前回記事を参照ください。
また、最低限の通信を許可することでセキュリティを高めます。
具体的には、Public subnetのEC2のセキュリティグループでは、ELBからの通信のみを許可し、RDSのセキュリティグループでは、EC2からの通信のみを許可するように設定します。

ここまでの作業で以下が作成できています。
image.png

ゴールは目の前。あと一息です。
image.png

サーバ追加のための元ネタ(AMIイメージ、起動テンプレート)を作成

サーバ自動追加時に作成したい内容のEC2インスタンスを元にして、AMIイメージ、起動テンプレートを作成します。これも、AWSマネジメントコンソールで簡単に作成できます。
具体的な操作は、以下の記事が参考になります。

ELBに対して、Auto Scalingの設定を行う(Auto Scaling Group作成)

以下を行うことでAuto Scalingの設定が完了します。

  • Auto Scalingグループの作成
    • オートスケール対象の指定(ターゲットグループの指定)
    • EC2インスタンスの最少数、最大数、希望する数を指定
  • CloudWatchで監視の設定
    • アラームの作成を行う
      • 「CPU稼働が70%より大きい」「CPU稼働が30%より小さい」という基準を設ける
      • これらの基準に満ちた場合は、アラームを発生させる設定を組む(=アラームの作成)
    • アラームを作成するとCloudWatchが監視を開始する
  • Auto Scalingのポリシーの追加
    • スケーリングポリシーの作成を行う
      • Auto Scalingをいつ、どのタイミグで実施するかの条件を指定(先に作成したCloudWatchアラームを指定)
      • 上記イベント発生時のアクション(インスタンス追加/削除)を設定する

※上記作成のイメージ図
qiita-square

これで完成です!
image.png
image.png

この状態でEC2インスタンスに負荷をかけ、CPU使用率を70%以上にすると自動でサーバが2台まで追加されます。
image.png

やり残したこと

ALBのみPublic Subnetに、Webサーバは Private Subnet に配置した方がよりセキュリティレベルが高まる。あとで、その構成も構築してみる。

さいごに

この記事はAWS初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。

このサービスは、テンポの良い/わかりやすい動画説明をもとに、気軽に実践を積み、自分の血肉とできるオンラインスクールです。
コミュニティも存在し、Slackで会員通しの情報交換/質問も気楽にできます。
qiita-square

書籍を購入するような値段で学習ができ、とてもお得です。(個人的な感想です)
image.png

では、また次回お会いしましょう!
次回は、Route53によるドメイン設定とサイト障害時のSORRYページ表示の予定...です!

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?