おっさん社内SEエンジニアの勉強ブログ

勉強記録のブログとなります。

SAA学習-信頼性設計-RDSによるマスタースレーブ構成

今回のテーマ:RDSによるマスタースレーブ構成のハンズオン実施

構成

f:id:In-houseSE:20210617162944p:plain

事前準備(今回は概略と関連リンクを記載しておきます。)

  • NATGWの作成およびElasticIPの払い出し
  • ルートテーブルの関連づけ

before f:id:In-houseSE:20210617160335p:plain

after f:id:In-houseSE:20210617160426p:plain

  • ELBの作成

in-housese.hatenablog.com

  • イメージの作成

in-housese.hatenablog.com

  • 起動設定およびAuto-ScalingGroupの作成(希望、最小を0台にしておくとよいかと思います。)

in-housese.hatenablog.com

実施する項目が分かれば、ここまで20分程度で実装は可能だと思います。

実際の手順(RDB作成まで)

  • マネージメントコンソール-RDSと検索しクリック

f:id:In-houseSE:20210617162309p:plain

  • サブネットグループよりDBサブネットグループを作成をクリック

f:id:In-houseSE:20210617162507p:plain

  • 名前、説明は任意で記入し、VPCは指定しているVPCを選択します。

f:id:In-houseSE:20210617163037p:plain

  • サブネットは構成図に合わせてプライベートサブネットを指定し、作成をクリック

f:id:In-houseSE:20210617163142p:plain

  • データベースよりデータベースの作成をクリック

f:id:In-houseSE:20210617163542p:plain

  • MySQLを選択とエンジンバージョンを指定します。

f:id:In-houseSE:20210617163633p:plain

  • マルチAZ構成にしたいため、学習用ですが開発/テストを選択します。

f:id:In-houseSE:20210617164335p:plain

  • DB識別子を指定し、マスターユーザーのアカウント情報を登録します。

f:id:In-houseSE:20210617163952p:plain

  • インスタンスサイズを指定します。(デフォルトたとm系のファミリアーとなるため要注意)

f:id:In-houseSE:20210617164407p:plain

  • ストレージサイズタイプやサイズなどを指定します。(ストレージタイプを汎用にしておけば安価にすみます)
    また、自動スケーリングは有効としておき最初はスモールスタートにしてスケーリングをさせる方が実務ではよく使用されます。

f:id:In-houseSE:20210617164056p:plain

  • マルチAZ配置でスタンバイインスタンスを作成するを指定します。

f:id:In-houseSE:20210617164615p:plain

  • 接続するVPC、サブネットグループを指定し、RDB用のSGを新規で作成します。

f:id:In-houseSE:20210617164911p:plain

  • 認証方式を指定します。

f:id:In-houseSE:20210617164945p:plain

  • 追加設定でRDB名を任意で記載し、パラメータグループを指定します。(実務だと先にパラメータグループを使用する方が望ましいです)

f:id:In-houseSE:20210617165144p:plain

  • バックアップの取得方式などを確認します。(サイクルなど指定があれば変更します)

f:id:In-houseSE:20210617165234p:plain

  • モニタリング(監視の指定)およびログの出力に関して確認します。(すべて有効化しておくことが望ましいですが割愛します)

f:id:In-houseSE:20210617165420p:plain

  • 定期メンテナンスの指定を行います。(パッケージソフトとかのバージョンアップ対応を考慮するとマイナーバージョンの自動アップグレードの有効化は外す方がよいです)

f:id:In-houseSE:20210617165644p:plain

  • 利用コストを確認し、データベースの作成をクリック

f:id:In-houseSE:20210617165717p:plain

cf)RDBへ日本時間に合わせるなどのオプションを指定する場合、オプショングループを新規に作成し作成したRDBへ適用します。(今回は割愛)

f:id:In-houseSE:20210617170431p:plain

cf)実運用上ですと定期的にAmazon RDS SSL/TSL証明書を更新する作業があります。

f:id:In-houseSE:20210617170243p:plain

  • 作成したRDBが利用可能な状態になっていることを確認します。

f:id:In-houseSE:20210617171456p:plain

  • 新規でSGを作成すると「/32」の固定IPのみの指定となるため、VPC内のサブネットを許可する設定に変更するため、
    適用しているセキュリティグループを選択し、インバンドルールの編集をクリック

f:id:In-houseSE:20210617172001p:plain

  • MySQLRDBを指定するため、ポートは使用ポートの3306を指定後、サブネットをVPC内のサブネット指定し、ルールを保存をクリック

f:id:In-houseSE:20210617172242p:plain

実際の手順(RDBの接続確認・設定・リストア試験)

  • EC2インスタンスSSHログインをします。(この時AutoScalingの希望と最小を1台としておくとサーバーが作成されます。)

f:id:In-houseSE:20210617172729p:plain

  • mysqlコマンドを使用できるようにするため以下コマンドを実行

コマンド

 yum install mysql -y

実行結果

Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Resolving Dependencies
--> Running transaction check
---> Package mariadb.x86_64 1:5.5.68-1.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package        Arch          Version                   Repository         Size
================================================================================
Installing:
 mariadb        x86_64        1:5.5.68-1.amzn2          amzn2-core        8.8 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 8.8 M
Installed size: 49 M
Downloading packages:
mariadb-5.5.68-1.amzn2.x86_64.rpm                          | 8.8 MB   00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:mariadb-5.5.68-1.amzn2.x86_64                              1/1
  Verifying  : 1:mariadb-5.5.68-1.amzn2.x86_64                              1/1

Installed:
  mariadb.x86_64 1:5.5.68-1.amzn2

Complete!
  • 作成したRDBへ接続します

コマンドひな形

mysql -h RDBのエンドポイント名 -u ユーザー名 -p

コマンド例

mysql -h mysql.cupngjp8wkyf.ap-northeast-1.rds.amazonaws.com -u admin -p
  • パスワードが聞かれれるため応答し、RDBへ接続します。

f:id:In-houseSE:20210617172729p:plain

  • DBを作成します。

コマンド

create database testdb;
  • DBへ接続します。

コマンド

use testdb;
  • 試験用のテーブルを作成します。

コマンド

create table testdb.account(id int,name varchar(20));
  • 作成したテーブルを確認します。

コマンド

show tables;
  • 作成したテーブルに対しデータを入れます。

コマンド

insert into account values(1001,"testuser1");
insert into account values(1002,"testuser2");
  • テーブルへインポートしたデータを確認します。

コマンド

select * from account;

結果のまとめ

f:id:In-houseSE:20210617175219p:plain

実際の手順(RDBの復元確認)

  • マネージメントコンソール-RDB-データベース-該当するRDBを指定し、アクション-スナップショットの取得をクリック

f:id:In-houseSE:20210617175542p:plain

  • スナップショット名は任意で記入し、スナップショットの取得をクリック

f:id:In-houseSE:20210617175631p:plain

  • 利用可能であることを確認します。

f:id:In-houseSE:20210617180223p:plain

  • ターミナルに戻り追加のデータをインポートします。
insert into account values(1003,"testuser3");

結果

f:id:In-houseSE:20210617180705p:plain

  • RDBをいったん削除するため、DBからの接続を切ります。

コマンド

quit

f:id:In-houseSE:20210617181245p:plain

業務の場合、RDBインスタンス識別子を合わせるリストア対応が必要となります。
対応する方法は稼働しているインスタンスを削除し、スナップショットから復元します。

  • マネージメントコンソールへ戻り、稼働しているRDBを選択しアクションから削除を選択します。

f:id:In-houseSE:20210617181516p:plain

  • 削除確認画面で、最終スナップショットの取得とフレーズ入力を記入後、削除をクリック

f:id:In-houseSE:20210617181659p:plain

  • 削除されたことを確認します。

f:id:In-houseSE:20210617183304p:plain

  • マネージメントコンソールへ戻り、取得したスナップショットを選択し、アクション-スナップショットを復元をクリック

f:id:In-houseSE:20210617180945p:plain

f:id:In-houseSE:20210617181858p:plain

  • SGとサブネットは先程と同じものを指定します。

f:id:In-houseSE:20210617181958p:plain

f:id:In-houseSE:20210617182100p:plain

  • 後の設定も同様に指定します。

f:id:In-houseSE:20210617182146p:plain

  • 追加設定の値も同様に設定指定したら、DBインスタンスの復元をクリック

f:id:In-houseSE:20210617182203p:plain

  • リストアされていることを確認します。(この状態までいけば接続確認はできたはずです)

f:id:In-houseSE:20210617184517p:plain

  • ターミナルに戻りRDBへ接続します

コマンド例

mysql -h mysql.cupngjp8wkyf.ap-northeast-1.rds.amazonaws.com -u admin -p
  • DBへ接続し、先程のテーブルを確認します。

確認までの経緯ログ

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test_rdb           |
| testdb             |
+--------------------+
5 rows in set (0.00 sec)

MySQL [(none)]> use testdb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [testdb]> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| account          |
+------------------+
1 row in set (0.00 sec)

MySQL [testdb]>
  • testuser3が存在していないことを確認し問題ないことを確認します。
MySQL [testdb]> select * from account;
+------+-----------+
| id   | name      |
+------+-----------+
| 1001 | testuser1 |
| 1002 | testuser2 |
+------+-----------+
2 rows in set (0.00 sec)

MySQL [testdb]>

cf) スナップショットから復元したい場合、特定地点からの復元は稼働指定できなかったため、
リストア手法を要注意となります。(少し確認をしておきます。)

実際の手順(RDBの自動F/Oとリードレプリカの作成)

リードレプリカを作成するため、自動バックアップが有効である必要があります。
動作確認をするため1回再作成を実施しておきます。

dev.classmethod.jp

リードレプリカの作成

  • マネージメントコンソールよりデータベース-対象のRDBを指定し、アクションからリードレプリカの作成をクリック

f:id:In-houseSE:20210617192330p:plain

  • インスタンスタイプとマルチAZ配置の指定をします。(今回はそのまま)

f:id:In-houseSE:20210617192414p:plain

  • リージョン、サブネット、AZ、SGを指定します。(AZのみ指定しておきます。)

f:id:In-houseSE:20210617192526p:plain

  • DB識別子を指定します。(レプリカなどわかる名称の方がよいかも)

f:id:In-houseSE:20210617192659p:plain

  • その他の設定は変更せず、リードレプリカの作成をクリック

f:id:In-houseSE:20210617192815p:plain

  • リードレプリカが作成されたことを確認します。(画面ではレプリカ側が作成中ですがここまでいけば大丈夫です)

f:id:In-houseSE:20210617193305p:plain

自動F/Oの動作確認

  • マネージメントコンソールよりデータベース-対象のRDBを指定し、アクション-再起動をクリック

f:id:In-houseSE:20210617193737p:plain

  • フェイルオーバーで再起動にチェックを入れて、確認をクリック

f:id:In-houseSE:20210617193820p:plain

  • リージョンとAZがF/O先に変更されていることを確認します。

今回のテーマは以上です。

cf)検証用で使用したリソースをすべて削除しておかないと結構いい金額が発生するので、
失念しないようにしてください。

SAA学習-Route53-Route53の概要

今回のテーマ:Route53の概要

主要サービスの公式資料

Route53: docs.aws.amazon.com

概要

Amazon Route 53は、可用性と拡張性に優れたドメインネームシステム (DNS) ウェブサービスです。
DNSの概要について以下のものが挙げられます。

DNS

  • DNSはインターネット上で名前解決をする仕組み
  • 名前解決とはインターネットにおける人向けのUIRLをシステム向けの住所となるIPアドレスに変換するための仕組み
  • 企業サーバーに一時的なDNS情報を保持するキャッシュDNSサーバーと実際に名前解決機能がある権威DNSサーバーの2種が存在

f:id:In-houseSE:20210616075246p:plain

Route53とは

  • Route53はAWSが提供する権威DNSサーバー
  • Route53はDNSレコードというIPアドレスうとURLを紐づけた表を確認しルーティングを行う
  • ポート53番で動作しルーティング定義するためサービス名の由来となる

f:id:In-houseSE:20210616075854p:plain

Route53の特徴

  • 主要機能はドメイン登録/DNSルーティング/ヘルスチェックの3つ
  • ポリシーによルーティング設定
    設定概要は以下のものが挙げられ様々ルーティングを設定可能
  • AWS側で100%可用性を可能とするSLA
  • マネージドサービスとして提供しており、ユーザー側で冗長性を考慮は不要

Route53の利用方法

Route53の利用を開始後、ドメインを登録するとホストゾーンを自動生成し、そこにルーティングを設定します。
利用ステップとしては以下の4ステップになります。

①Route53にドメインを設定
ドメイン名と同じホストゾーンを自動生成
③ホストゾーンにルーティング方法となるDNSレコードを作成
トラフィックルーティングを設定

ホストゾーン

ドメインとそのサブドメイントラフィックのルーティングをする方法について情報を保持するコンテナとなります。

cf)ドメインの例:example.com
cf)サブドメインの例:sub.example.com

パブリックホストーゾーン

  • インターネット上に公開されたDNSドメインレコードを管理するコンテナ
  • インターネットのDNSドメインに対するとらふぃくのルーティング方法を定義

プライベートホストゾーン

  • VPCに閉じたプライベートネットワーク内のDNSドメインのレコード管理をするコンテナ
  • VPC内のDNSドメインに対し、どのようにトラフィックをルーティングするかを定義
  • 1つのプラベートホストゾーンで複数VPCに対応
  • VPCが相互アクセス可能であれば複数リージョンのVPCでも同じホストゾーンを利用可能

DNSレコード

ルーティング方法を設定するため。DNMSレコードを作成し各種レコードを設定する。
主なレコードタイプは以下となります。

レコードタイプ 概要
SOA ドメインDNSサーバー/ドメイン管理のメールアドレス/知り合う番号等を保持し、ゾーン転送時に情報が更新されているかの判断に利用する
A ホスト名とIPアドレスの関連付けを定義するレコード
MX メール配送先(メールサーバー)のホスト名を定義するレコード
CNAME 正規ホスト名に対する別名を定義するレコード。特定のホスト名を別のドメイン名に転送するときなどに利用する

その他DNSレコードの参考文献: docs.aws.amazon.com

ALIASレコード

Route53固有の仮想リソースレコードになります。

ALIASレコードの概要

DNSクエリにAWSサービスのエンドポイントIPアドレスを返答する機能となります。
設定が可能な項目は以下となります。

  • 静的WEBサイトをして設定されたS3バケット
  • CloudFront
  • ELB
  • ホストゾーン内のリソースレコードセット

ALIASレコードのメリット

  • DNSクエリに対するレスポンスが高速
  • CNAMEにマッピングできないZoneApex(ドメイン名そのもの)を設定可能
  • ALIASレコードに対するクエリが無料でありRoute53と連携したDNSLookupを高速化する
  • CloudFrontでのクエリ回数を削減

トラフィックルーティングのタイプ

ルーティング方式として以下の内容があります。

シンプルルーティング(Simple)

  • レコードセットで事前に設定された値のみに基づいてDNSクエリに応答
  • 静的なマッピングによりルーティングを決定

加重ルーティング(Weighted)

  • 複数のエンドポイント毎の重み設定によりDNSクエリに応答
  • 重みづけの高いエンドポイントに多くルーティング

フェイルオーバールーティング(Failover)

  • ヘルスチェックの結果に基づいて、利用可能なリソースをDNSクエリに応答
  • 利用可能なリソースにのみルーティング

複数値回答ルーティング(Multivalue)

  • ランダムに選ばれた最大8つの別々のレコードを使用しIPアドレスを設定し、複数の値を返答
  • IPアドレス単位でヘルスチェックを実施し、ルーティングすることで、正常なリソース返す
  • ELBに代わるものではないが、正常なことが確認できる複数のIPアドレスを返す機能により、DNSを利用しアベイラビリティとロードバランシングを向上させることが可能

レイテンシールーティング(Latency)

  • リージョンの遅延によりDNSクエリに応答
  • 基本的にはユーザーの際よりのリージョンに返答
  • リージョン間の遅延が少ない方へルーティング

位置情報ルーティング(Geolocation)

  • ユーザーのIPアドレスにより位置情報を特定し、地域ごとに異なるレコードを返す
  • ネットワーク構成に依拠しない制度の高いレコードの区分けが可能

地理的近接性ルーティング

  • ユーザーとリソースの場所に基づいて地理的近接性ルールを作成し、トラフィックをルーティング
    • AWSリソースを使用している場合、リソースを作成したAWSリージョン
    • AWS以外のリソースを使用している場合、リソースの緯度と経度
  • 必要に応じてバイアスを設定し、特定のリソースにルーティングするトラフィック量を変更可
  • トラフィックフローを利用する必要

トラフィックフロー

従来はALIASレコードを使用し、複雑なルーティングポリシーを作成する対応が必要でした。
レコードに対しフロー図をエディタで作成するような設定方法となります。

今回のテーマは以上です。

SAA学習-信頼性設計-Auto-Scalingの設定

今回のテーマ:Auto-Scalingの設定

実装構成

f:id:In-houseSE:20210606100513p:plain

実施する手順

ここは今回省略します。

  • サブネット作成/自動パブリックIPの有効化
  • ElasticIPの払い出し/NATGWの作成
  • ルートテーブルの更新(サブネットの関連付けおよびNATGWの更新)
  • ELBの作成
  • EC2の起動テンプレート作成(ヘルスチェックするためのOSSなどをきちんと導入しておかないとドはまります)

今回の実施する概要

  • 起動設定の作成
  • Auto-Scalingグループの作成

実際の手順(起動設定の作成)

  • マネージメントコンソール-EC2-Auto Scaling-起動設定の順に選択し、起動設定の作成クリック

f:id:In-houseSE:20210606102857p:plain

  • 起動設定名は任意で記載し、AMIの指定が作成しているAMIを指定し、インスタンスタイプは無料枠のものを指定します。

f:id:In-houseSE:20210606103157p:plain

  • 追加設定は特にしてせず、ストレージサイズも変更しなくてよいです。

f:id:In-houseSE:20210606103352p:plain

  • SG(セキュリティグループ)とキーペアを指定し、起動設定の作成をクリック(キーペアの承諾チェックは入れてください)

f:id:In-houseSE:20210606103625p:plain

大枠はEC2インスタンスを起動する際の設定を1つの画面でできるという点になります。

実際の手順(Auto-Scalingグループの作成)

*マネージメントコンソール-EC2-Auto Scaling-Auto Scalingグループの順に選択し、Auto Scalingグループの作成をクリック

f:id:In-houseSE:20210606101752p:plain

  • 名称は任意で記載し、先程作成した起動設定を指定後、次へをクリック

f:id:In-houseSE:20210606104000p:plain

  • インスタンスの購入タイプは起動テンプレートに準拠を選択し、ネットワークはAZ間で分散するようにサブネットを2つ設定し、次へをクリック

f:id:In-houseSE:20210606104514p:plain

f:id:In-houseSE:20210606104640p:plain

  • グループキャパシティで、希望する台数と最小、最大台数を指定します。また、スケールイン(台数増加のポリシー)を指定し、次へをクリック

f:id:In-houseSE:20210606105537p:plain

※グループキャパシティは希望する台数は最小と最大の間の台数で設定
※スケールインは増加、スケールアウトは減少となります。

  • AutoScalingで作成/削除されたインスタンスがあったらメール通知を行うか設定しますが、割愛するため、次へをクリック(実務では必要になる場合がほとんどです)

f:id:In-houseSE:20210606105744p:plain

  • タグは任意で記載し、次へをクリック

f:id:In-houseSE:20210606105916p:plain

  • 設定確認になったら内容を確認し、Auto Scalingグループを作成をクリック

f:id:In-houseSE:20210606110040p:plain

f:id:In-houseSE:20210606110316p:plain

  • ELB経由でアクセスできることを確認します。

f:id:In-houseSE:20210606125432p:plain

実際の手順(Auto-Scalingグループのスケールイン/アウト動作確認)

試験用にインスタンスを立ち上げた状態より確認します。

f:id:In-houseSE:20210606130425p:plain

f:id:In-houseSE:20210606130558p:plain

  • アタッチするAuto Scalingグループを指定し、アタッチをクリック

f:id:In-houseSE:20210606130644p:plain

  • しばらく時間を経過するのを待ってから作成したAutoScalingポリシーより、希望する台数まで減少することを確認します。(この場合は起動した後の方が残るため、登録した方が削除されます)

f:id:In-houseSE:20210606131304p:plain

負荷テストによるAuto 負荷試験による動作確認

f:id:In-houseSE:20210606131833p:plain

  • 負荷ツールをダウンロードします

コマンド

wget https://rpmfind.net/linux/dag/redhat/el7/en/x86_64/dag/RPMS/stress-1.0.2-1.el7.rf.x86_64.rpm

結果

wget https://rpmfind.net/linux/dag/redhat/el7/en/x86_64/dag/RPMS/stress-1.0.2-1.el7.rf.x86_64.rpm
--2021-06-06 13:21:15--  https://rpmfind.net/linux/dag/redhat/el7/en/x86_64/dag/RPMS/stress-1.0.2-1.el7.rf.x86_64.rpm
Resolving rpmfind.net (rpmfind.net)... 195.220.108.108
Connecting to rpmfind.net (rpmfind.net)|195.220.108.108|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 36804 (36K) [application/x-rpm]
Saving to: ‘stress-1.0.2-1.el7.rf.x86_64.rpm’

100%[======================================>] 36,804       147KB/s   in 0.2s

2021-06-06 13:21:16 (147 KB/s) - ‘stress-1.0.2-1.el7.rf.x86_64.rpm’ saved [36804/36804]
  • 負荷ツールをインストールします

コマンド

rpm -ivh stress-1.0.2-1.el7.rf.x86_64.rpm

結果

warning: stress-1.0.2-1.el7.rf.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:stress-1.0.2-1.el7.rf            ################################# [100%]
  • 負荷ツールがインストールされたか確認します

コマンド

rpm -qa|grep stress

結果

stress-1.0.2-1.el7.rf.x86_64
  • 負荷ツールのバージョンを確認します

コマンド

stress --version

結果

stress 1.0.2
  • マネイジメントコンソールで負荷をかける前の状態を確認します。(希望台数1台、最大3台)

f:id:In-houseSE:20210606132651p:plain

  • サーバーで負荷ツールを実行します

コマンド

stress -c 1 -q &

結果

[1] 29723
  • 負荷ツールを実行した後の状態を確認します

コマンド

top

結果 f:id:In-houseSE:20210606132955p:plain

※ctrl+cでtopの実行状態を終了できます

  • AutoScalingポリシーで新規インスタンスが起動するか確認します(モニタリングの間隔があるためそれに合わせて起動する動作となります)

f:id:In-houseSE:20210606133640p:plain

f:id:In-houseSE:20210606133731p:plain

  • 確認が取れたら負荷をかけているサーバーで負荷ツールのプロセスを確認します

コマンド

ps -ef | grep stress | grep -v grep

結果

root     29723 29646  0 13:28 pts/0    00:00:00 stress -c 1 -q
root     29724 29723 99 13:28 pts/0    00:11:37 stress -c 1 -q
  • 負荷ツールのプロセスを強制終了します(エラーなくコマンドが終わります)

コマンド

kill -9 29723
  • 負荷ツールのいプロセスが稼働してないことを確認します(何もプロセスが動作してない状態になります)

コマンド

ps -ef | grep stress | grep -v grep
  • 再度スケールアウトされているか確認します

今回のテーマは以上です。

補足:動作確認など終わったらAuto Scalingポリシーで自動起動させないようにするため、グループキャパシティの値をすべて0台しておくとよいです

  • マネージメントコンソール-AUTO SCALING-Auto Scaling Group-作成したAutoScalingグループ-詳細タブの順に選択し、グループの詳細から編集をクリック

f:id:In-houseSE:20210606134830p:plain

  • 希望する容量と最小キャパシティおよび最大キャパシティを0にして、更新をクリック

f:id:In-houseSE:20210606135209p:plain

今回のテーマは以上です。

SAA学習-信頼性設計-RDSの概要

今回のテーマ:RDSの概要

RDS

RDSは様々なデータベースソフトウェアに対応したフルマネージドなリレーショナルデータベースとなります。
ソフトウェアの種類は以下のものなどがあります。

AWSのデータベース構築

AWSにおけるデータベース構築はEC2に自らインストールするか専用DBサービスを利用するかの2通り

ケース メリット デメリット
EC2の場合 自由にDB構成や機能を利用 構築・運用が手間
RDSの場合 構築・運用が楽(大部分がAWS側) AWS提供の範囲内での利用制限

RDSの制約事項

RDSはマネージド型で便利な反面、AWSから提供される機能範囲内で制限を受けます。
主な制限事項としては以下となります。

  • バージョンが限定される
  • キャパシティに上限がある
  • OSへのログインができない
  • ファイルシステムへアクセスできない
  • IPアドレスが固定できない
  • 一部機能が使用できない
  • 個別パッチが適用できない

RDSの特徴

  • RDS自体がマネージド型の更改用なのに加え、マルチAZによるMaster/Slave構成を容易に構築することが可能
  • 参照専用のレプリカを最大5台(Auroraは15台)設置可能で、DBの読み取り処理をスケールアウトが可能
  • 自動/手動でスナップショットを取得し、保存管理することで耐障害性を確保することが可能

f:id:In-houseSE:20210601083304p:plain

スケーリング

マネージメントコンソールやAPIからスケールアップ可能

  • インスタンスタイプを変更しスケールアップ/ダウンを実施
  • コマンドライン(AWS CLI)やAPIからストレージを数クリックで容易にスケールアップ/ダウンが可能
  • 一時的にインスタンスタイプを大きくしてその後戻すことも可能
  • ストレージサイズは拡張はできるが縮小ができない

データベースのシャーディング(水平分割)機能を利用し、RDSの書き込みをスケーリングすることが可能

f:id:In-houseSE:20210601084444p:plain

DBインスタンスの暗号化

保管時のインスタンスとスナップショットの暗号化が可能となります。 暗号化対象と暗号化方式は以下のものになります。

暗号化対象

  • DBインスタンス
  • 自動バックアップ
  • リードレプリカ
  • スナップショット

暗号化方式

  • AES-256暗号化
  • AWS KMSによる鍵管理
  • リードレプリカも同じ鍵を利用
  • インスタンス作成時にのみ設定可能
  • スナップショットのコピーの暗号化/リストア可能

RDSのスケーリング

データベースのパフォーマンス低下に対しスケーリング対応を実施することが可能
パフォーマンスの低下させる要因:アクセス多数、クエリ処理の増加など

スケーリングのタイプ

スケーリングのタイプは垂直スケーリングと水平スケーリングの2つのタイプがあります。

垂直スケーリング

  • 拡張方法(スケールアップ):メモリやCPUの追加・増強
  • 低減方法(スケールダウン):メモリやCPUの削減・低性能化

水平スケーリング

  • 拡張方法(スケールアップ):処理を行う機器/サーバー台数の増加
  • 低減方法(スケールダウン):処理を行う機器/サーバー台数の低減

スケールアップ

インスタンスタイプやサイズを変更することでスケールアップによるパフォーマンス向上を実施することが可能

実施方法 概要
インスタンスサイズの変更 現在のDBインスタンスタイプに対しサイズを高性能なものに変更することで、パフォーマンスを向上させる
インスタンスタイプの変更 現在のDB利用方式に適したDBインスタンスタイプがある場合、そのタイプに変更する
ストレージタイプの変更 ストレージタイプを高性能なタイプ(I/O処理が多い場合IOPS)に変更する

インスタンスタイプ

最初のDBがDBインスタンスを表し、その後のアルファベットと数字がインスタンスタイプになります。
インスタンスタイプの後に大きさ(micro/largeなど)の表示がインスタンスサイズとなります。

f:id:In-houseSE:20210602074707p:plain

RDSインスタンスタイプの詳細:Amazon RDS インスタンスタイプ | AWS

インスタンスタイプとサイズ

2つのインスタンスタイプ

  • 汎用:バランスの取れたコンピューティング、メモリ、ネットワークリソースを提供し、多様なワークロードに使用できるインスタンスタイプ
  • メモリ最適化:メモリ内の大きいデータセットを処理するワークロードに対し高速なパフォーマンスを実現するように設計されたインスタンスタイプ(高速データベースにはメモリ最適化を利用する)

インスタンスタイプ:汎用

バランスが取れた対応が可能なMファミリーとバーストパフォーマンスが提供されるTファミリーが利用可能

タイプ 概要
T2インスタンス 汎用バーストパフォーマンスインスタンス
ベースラインレベルのCPUパフォーマンスを提供し、ベースラインを越えてバーストする機能を有する。
マイクロサービス、テストおよびステージングなど様々なデータベースワークロードに適している
T3インスタンス T2インスタンスと同じく汎用バーストパフォーマンスインスタンス
T3インスタンスはバランスの取れたコンピューティング、メモリ、およびネットワークリソースを提供し、使用中に一時的なスパイクが生じる中程度のCPU使用率を持つデータベースワークロードに適している
M4インスタンス バランスの取れたコンピューティング、メモリ、およびネットワークリソースを提供し、オープンソースまたはエンタープライズアプリケーション用の小規模および中規模データベースを含む様々なデータベースワークロードに適している
M5インスタンス 最新世代の汎用インスタンスでM4より優れたパフォーマンスを提供する。
バランスの取れたコンピューティング、メモリ、およびネットワークリソースを提供し様々なデータベースワークロードに適している

インスタンスタイプ:メモリ最適化

メモリ負荷の高い処理や高速データベース処理に利用する

タイプ 概要
R4インスタンス メモリ負荷の高いデータベースワークロード向けに最適化されており、RAM GiBあたりのメモリ華夏がR3よりも安価
R5インスタンス R4よりもvCPU当たり5%大きいメモリを適用する最新世代のメモリ最適化インスタンス
最大で768 GiBのメモリを提供する。
R4と比較しGiBごとの価格が10%低く、CPUパフォーマンスも最大20%高い
X1インスタンス 大規模アプリケーション、エンタープライズクラスのアプリケーション、およびインメモリアプリケーション用に最適化されたインスタンス
Amazon RDSのインスタンスタイプの中でもRAM 1GiB当たりの価格が最も低いインスタンスの1つ
X1eインスタンス 高性能データベースように最適化されたインスタンス
X1eインスタンスAmazon RDSのインスタンスの中でもRAM 1GiBあたりの価格が最も低いインスタンスの1つ
Z1dインスタンス クラウドインスタンスの中で最も高速で、すべてのコア周波数が4.0GHzで持続可能。
高いコンピューティング性能と大容量メモリの組み合わせにより、Z1dインスタンスはコア単位のライセンス費用が高いリレーショナルデータベースに最適

ストレージタイプの変更

ストレージタイプは汎用とプロビジョンドIOPSタイプから選択します
マグネティックは古いタイプのためあまり利用しません

ストーレジタイプ 概要
汎用 SSDタイプ
・GB当たりの容量課金
・通常のパフォーマンスに加えてバーストを実施し100~10,000IOPSを実現可能
プロビジョンドIOPS SSDタイプ
・GBあたりの容量課金を実施+プロビジョン済みIOPS単位の課金
・通常のパフォーマンスに加えてバーストを実施し、1,000~30,000IOPSを実現可能
マグネティック ・ハードディスクタイプ
・GBあたりの容量課金を実施+IOリクエスト課金
・平均100~最大数百のIOPS

ストレージサイズの容量変更

ストレージ容量は設定変更で増加することは可能ですが、減少させることはできない

ストレージサイズのAutoScaling

ストレージ容量に対しAutoScalingを実行することが可能

RDSのスケールアウト

リードレプリカの増設、キャッシュによる高速化が可能
また、全く別のDBへ変更するAuroraへの移行も可能

  • リードレプリカの増設: 読込処理のアクセス集中を分散化するため、読込専用インスタンスとなるリードレプリカを増設し、負荷分散を行う
  • キャッシュの利用:ElastiCacheを連携または、MySQL Memcached機能を利用し、キャッシュを増設し、読込処理の高速化を実施する
  • Auroraへの移行:RDS MySQLを高速なAurora MySQLへと移行することが可能で、性能アップさせることが可能です(厳密にはスケールアウトではありません)

リードレプリカの増設

フェイルオーバー設定を有効にするだけで、容易にフェイルオーバーが利用可能となります
概要は以下となります。

RDSの構成比較

マルチAZとマルチリージョンと比較しリードレプリカはスケーリングに特化した構成方式となります。

マルチAZ配置 マルチリージョン配置 リードレプリカ
目的 高可用性 災害復旧とローカルパフォーマンス スケーラビリティ
同期方式 Aurora 以外: 同期レプリケーション
Aurora: 非同期レプリケーション
非同期レプリケーション 非同期レプリケーション
アクセス Aurora 以外: プライマリインスタンスのみがアクティブ
Aurora: 全インスタンスがアクティブ
すべてのリージョンにアクセスでき、読み取りに使用できる。 すべてのリードレプリカにアクセス可能で、読み込みのスケーリングに使用可能
バックアップ Aurora 以外: 自動バックアップはスタンバイから取得される。
Aurora: 自動バックアップは共有スト
レージレイヤーから取得される。
各リージョンで自動バックアップを取得可能
デフォルトではバックアップは構成されない
配置 1 つのリージョン内に常に 2 つ以上のアベイラビリティーゾーンを展開 各リージョンに対してマルチ AZ 配置が可能
アベイラビリティーゾーン内、AZ 間、またはリージョン間に配置可能
切替 問題が検出された場合のスタンバイ
(Aurora 以外) またはリードレプリカ
(Aurora) への自動フェイルオーバー
Aurora は、セカンダリリージョンのプロモーションをマスターに昇格可能 手動でスタンドアロンのデータベースインスタンスに昇格可能 (Aurora 以外)
Auroraはプライマリインスタンス に昇格可能

キャッシュの利用

読込処理の一部をキャッシュとして保持して、高速クエリ処理を実現する構成が可能

  • ElastiCacheの利用

AWSが提供するインメモリDBサービスであるElastiCacheを利用してクエリ処理をインメモリDBに保持して高速処理を可能にする

f:id:In-houseSE:20210604103145p:plain

  • MYSQLのオプション機能の利用

MYSQLのオプション機能にあるMemcachedを利用してインメモリキャッシュを利用する

Auroraへの移行

RDSのMySQLとPostgreはAuroraと互換性があるバージョンは容易に移行が可能で、パフォーマンスを向上させることができる

今回のテーマは以上です。

SAA学習-信頼性設計-Auto-Scalingの概要

今回のテーマ:Auto-Scalingの概要

主要サービスの公式資料

Amazon EC2 Auto Scaling: docs.aws.amazon.com

スケーラビリティの確保

需要増にトラフィック量が処理できなくなる前に処理サーバーを拡張することで対処を可能とする。(ELBでトラフィックを確認し需要増)

スケーリングのタイプ

スケーリングタイプは垂直スケーリングと水平スケーリングの2つのタイプがあり、Auto-Scalingは水平スケーリングタイプとなります。

垂直スケーリング

  • 拡張方法(スケールアップ):メモリやCPUの追加・増強
  • 低減方法(スケールダウン):メモリやCPUの削減・低性能化

水平スケーリング

  • 拡張方法(スケールアップ):処理を行う機器/サーバー台数の増加
  • 低減方法(スケールダウン):処理を行う機器/サーバー台数の低減

Auto-Scalingの要素

  • Auto-Scalingグループ
  • Auto-Scaling configuration:起動設定
  • Auto-Scaling Pan

Auto-Scalingグループ

スケールするインスタンスの最大数など基本情報を設定する。

Auto-Scaling configuration:起動設定

スケールアウトの際、起動するインスタンス内容を設定します。
設定項目はいかのものが挙げられます。

  • AMI
  • インスタンスタイプ
  • セキュリティグループ
  • キーペア
  • IAMロール

Auto-Scaling Pan

どのようにスケールするかの方法で以下のものを定義します。

  • Auto-Scaling Groupサイズの維持:現在のAuto-Scaling Groupのインスタンス最小台数を維持する設定を行う
  • 手動スケーリング:設定外で予期せぬスケーリングが必要となった場合、手動でスケーリングを実施
  • スケジュールベース:予想された需要増時期に合わせたスケーリングスケジュールを設定
  • 動的スケーリング:予測不能なケースにスケーリングポリシーにスケール方針を設定し、動的にスケールアウトを実施

また、上記のプランについて複数組み合わせて利用することが可能 例:スケジュールベースで設定を実施後、スケジュールベース設定を超過したら動的スケーリングを有効にするなど

ヘルスチェック

Auto-Scaling配下のEC2のヘルスチェックはEC2のステータス情報またはELBのヘルスチェックのどちらかを利用します。

  • EC2ステータス:インスタンスのステータスがrunning以外の状態を異常と判断する
  • ELB:ELBのヘルスチェック機能を活用する

ターミネイションポリシー

需要減に基づくスケールインの際、どのインスタンスから終了するか設定します。

  • OldestIntance/NewInstance:最も古いインスタンスや新しい起動自国のインスタンスなど順番で終了
  • OldestLaunchConfiguration:最も古い起動設定により、起動しているインスタンスから終了
  • ClosestToNextInstanceHour:次の課金が始まるタイミングで最も近いインスタンスから終了
  • デフォルト設定:「OldestLaunchConfiguration」から「ClosestToNextInstanceHour」の順に適用する。その後複数インスタンスが残った場合、ランダムに終了する。

Auto-Scalingの連携

ELBのヘルスチェックやCloudWatchのアラーム機能をトリガーにしスケールイン/アウトの条件として利用できます。

Auto-Scalingの基本構成

ELB構成冗長化したEC2に対しAuto-Scalingを設定し自動拡張できるような構成となります。

概略図:

f:id:In-houseSE:20210530173015p:plain

Auto-Scalingの設定プロセス

Auto-Scalingの設定する順番は以下のように実施します。

①ALBの作成
②ターゲットグループの作成
③起動するインスタンス設定
④Auto-Scalingグループ作成
⑤Auto-Scalingポリシーの作成orスケジュール設定

Auto-Scalingの設定ポイント

  • インスタンスの最大値/最小値の設定は慎重に設定
  • ステートフルなアプリケーションへの設定は、Auto-Scaling Groupでの自動設定が必要
  • ライフサイクルフック(起動時または削除時にインスタンスを一時停止しカスタムアクションを実行)を使用
  • Auto-Scalingスラッシング(急なスケールインによる影響)を避ける

今回のテーマは以上です。

SAA学習-信頼性設計-ELBによる冗長構成

今回のテーマ:ELBによる冗長構成

今回の構成

f:id:In-houseSE:20210530092357p:plain

  • VPCの作成
  • ELBの作成
  • バランシング設定

実際の手順(VPCの作成)

  • マネージドコンソール-VPC-VPCダッシュボードの順に選択し、VPCウィザードを起動をクリック

f:id:In-houseSE:20210530093403p:plain

  • VPC設定の選択はパブリックとプライベートを持つVPCを選択し、選択をクリック

f:id:In-houseSE:20210530093512p:plain

  • パブリックとプライベートを持つVPCで、VPC名は任意で記載し、CIDRブロックはAZを含め値を確認し、Elastic IPを作成済みの状態で、VPCの作成をクリック(作成完了するまで数分かかります。またNATGWを作成済みでElastic IPを指定すると作成に失敗します。)

f:id:In-houseSE:20210530094157p:plain

  • VPCの作成が完了したら、OKをクリック

f:id:In-houseSE:20210530095106p:plain

  • マネージドコンソール-VPC-VIRTUAL PRAVATE CLOUD-サブネットの順に選択し、サブネットを作成をクリック(AZ1-c用のパブリックとプライベートサブネットを作成するため)

f:id:In-houseSE:20210530100749p:plain

  • VPCIDは作成したVPCを指定し、サブネット名はパブリック/プライベート-1cと記入とCIDRは指定の値を記入し、サブネットを作成をクリック(パブリック-1c用のサブネット作成分となります。)

パブリックサブネット-1c f:id:In-houseSE:20210530101047p:plain

プライベートサブネット-1c f:id:In-houseSE:20210530101158p:plain

  • マネージドコンソール-VPC-VIRTUAL PRAVATE CLOUD-ルートテーブルの順に選択し、ルーティングの設定を確認

パブリック用のルートテーブル

  • ルートにインターネットGWへのターゲットが指定を確認

f:id:In-houseSE:20210530101742p:plain

  • サブネットの関連付けでパブリック用のサブネットが2つ指定を確認

f:id:In-houseSE:20210530101844p:plain

プライベート用のルートテーブル

  • ルートにNATGWへのターゲットが指定を確認

f:id:In-houseSE:20210530101939p:plain

  • サブネットの関連付けでプライベート用のサブネットが2つ指定を確認

f:id:In-houseSE:20210530102028p:plain

パブリックサブネット側のみインスタンス作成時に、自動IPの割りあえてを有効化します。

  • マネージドコンソール-VPC-VIRTUAL PRAVATE CLOUD-サブネット-有効にするサブネットを指定後、アクション-自動割りあえてIP設定の変更をクリック

f:id:In-houseSE:20210530102220p:plain

  • パブリックIPv4アドレスの自動割りあえてを有効にするにチェックを入れ、保存をクリック

f:id:In-houseSE:20210530102545p:plain

実際の手順(EC2の作成)

実際の手順は過去作成した記事リンクをご参照頂ければ幸いです。(講義ではS3バケットを作成後にindexファイルを取得なりますが、ユーザーデータのみで実装した場合になります。)
過去記事:

in-housese.hatenablog.com

作成するポイントは以下2点となります。

  • EC2を1台パブリックサブネット-1aに作成
  • 作成したEC2のスナップショットを活用し、イメージ化しパブリックサブネット-1cで構築
  • 動作確認のため、index.htmlファイルに対し各AZ単位で更新します。

実際の手順(ELB)

f:id:In-houseSE:20210530110258p:plain

  • ロードバランサーの種類はApplication Load Balancerを選択するため、作成をクリック(黄色のマーカーの箇所になります。)

f:id:In-houseSE:20210530110431p:plain

  • ロードバランサー名は任意のものを記載し、スキームはパブリック向けの場合はインターネット向けと選択(プライベート向けの場合は内部を選択)

f:id:In-houseSE:20210530110836p:plain

f:id:In-houseSE:20210530110940p:plain

  • AZは作成したVPCを指定し、AZはパブリック-1aとパブリック-1cの2つを選択

f:id:In-houseSE:20210530111051p:plain

  • 残りの設定はデフォルトのままで、次の手順:セキュリティ設定の構成をクリック

f:id:In-houseSE:20210530111147p:plain

  • HTTPSをリスナーに指定していない場合、次の手順:セキュリティグループの設定をクリック

f:id:In-houseSE:20210530111236p:plain

  • SGはインスタンスに割りあえてをしているSGを選択し、次の設定:ルーティングの設定をクリック

f:id:In-houseSE:20210530111412p:plain

  • ターゲットグループ名は任意で記入し、種別はインスタンスを指定

f:id:In-houseSE:20210530111743p:plain

  • ロードバランサーのヘルスチェックについては、正常閾値を「5→3」、に変更し次の手順:ターゲットの登録をクリック

f:id:In-houseSE:20210530111900p:plain

f:id:In-houseSE:20210530112017p:plain

f:id:In-houseSE:20210530112100p:plain

実際の手順(ELBの動作確認)

  • 作成したELBを選択し、DNS名をコピーします。

f:id:In-houseSE:20210530112534p:plain

  • コピーしたDNS名をブラウザで実行

パブリック1a向き f:id:In-houseSE:20210530112907p:plain

パブリック1c向き f:id:In-houseSE:20210530112924p:plain

f:id:In-houseSE:20210530113122p:plain

f:id:In-houseSE:20210530113302p:plain

  • WEBサイトの正常性確認

f:id:In-houseSE:20210530113348p:plain

f:id:In-houseSE:20210530113700p:plain

今回のテーマは以上です。

cf)導入時での試験項目にELBの切り替えを行いサービスが継続できるかなどの試験項目に挙げて確認をします。

SAA学習-信頼性設計-ELBの概要

今回のテーマ:ELBの概要

ELB(Elastic Load Balancing)

マネージド型のロードバランシングサービスで、EC2インスタンスの処理を分散する際に標準的に利用します。
特徴は以下になります。

  • インスタンス完夫不可を分散
  • 異常なインスタンスを認識し対応
  • パブリック/プライベートどちらでも使用可能
  • ELB自身も不可に応じてキャパシティを自動増減するスケーリングを実施
  • 従量課金で利用可能
  • マネージドサービスなので管理が不要
  • Auto Scaling,Route53,Cloud Formationなどと連携

ELBの主要機能

ヘルスチェック

負荷分散

  • 配下のEC2の負荷に応じて、複数のAZにまたがるEC2インスタンスの負荷分散を行う

SSLサポート

  • ELBでSSL Terminationできる

スティッキーセッション

  • セッション中に同じユーザから来たリクエストをすべて同じEC2インスタンスに送信する(音声とか同一ユーザからのリクエスト処理)

Connection Draining

  • インスタンスが登録解除されるか異常が発生した場合、そのバックエンドへの新規リクエスト送信を中止する

S3へのログ保管

スケーラビリティの確保

f:id:In-houseSE:20210527074349p:plain

高可用性

  • 複数のAZにある複数のインスタンス/ECS Serviceの中から正常なターゲットにのみ振り分け

f:id:In-houseSE:20210527074417p:plain

ELBのタイプ

利用できるロードバランサーは3タイプで用途に応じて使い分けます。

  • ALB
  • NLB
  • CLB

CLB(Classic Load Balancer)

AWSが開始された初期に提供されたELBとなり、標準的なL4/L7におけるロードバランシングが可能ですが、複雑な設定はできません。
特徴は以下となります。

cf)パスベースルーティング:異なるコンテンツ(URL)をホストする複数のバックエンドサーバーに要求を分散すること

簡単なディレク構成ですが、以下のようなWEBサイトで掲載してるコンテンツに対し、
アクセス経路に関するルーティングを行うことをパスベースルーティングとなります。

/root
 LcontentsA
 LcontentsB

ALB(Application Load Balancer)

レイヤー7の対応が強化された単一ロードバランサーで、異なるアプリケーションへリクエストをルーティングが可能です。
特徴は以下となります。

  • URLのパスに基づいてルーティングが可能なパスベースルーティングが可能
  • WebSocketとHTTP/2のリクエストを受付
  • 1インスタンスに複数ポートを登録可能
  • EC2インスタンスをターゲットグループに割りあえてる際、複数ポートを個別ターゲットとして登録することが可能なため、ポートを利用するコンテナバランシング可能
  • ターゲットグループでのヘルスチェックが可能
  • アクセスログの情報追加
  • EC2と同様に削除保護が可能
  • ALB自体が自動的にキャパシティを増減

CLBとALBの違い

ALBはパスベースルーティングにより、CLBより容易にバランシング構成が可能となります。

  • CLBの場合の構成事例

f:id:In-houseSE:20210527082506p:plain

  • ALBの場合の構成事例

f:id:In-houseSE:20210527082544p:plain

NLB(Network Load Balancer)

NLBは超低速で高スループットを維持しながら秒間何百万リスエストを捌くように設計されたロードバランサーとなります。
特徴は以下となります。

  • 開放型システム間相互接続(OSI)モデルの固定IPアドレスを持つL4ロードバランサー
  • 揮発性(きはつせい)ワークロードを処理し、毎秒数百万のリクエストに対応できる能力
  • VPC外のターゲットを含めたIPアドレスや静的IPアドレスでの登録可能
  • 複数のポートで各インスタンスまたはIPアドレスを同ターゲットグループに登録可能
  • 大規模アクセスが予測される際、CLBやALBで必要だったPre-waring申請が不要
  • ALBやCLBはX-Forwarded-Forでアクセス元IPアドレスを判断したが、NLBは送信元IPアドレスと送信元ポートの書き換えを行わないため、パケットからアクセス元判断可能
  • NLBはフォルトトレランス機能を内蔵したコネクション処理を持ち数カ月から数年のオープンな処理が可能
  • コンテナ化されたアプリケーションのサポートが可能
  • 各サービスの個別のヘルスチェックステータスのモニタリングのサポートが可能

今回のテーマは以上です。