この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
皆様こんにちは。
今回はCloudFormationを利用して高可用性アーキテクトの構築をしていきます。
この記事ではCloudFormationよりRDSの作成を行います。
このブログはCloudFormationによるRDSの作成をする上での知識を記事としてまとめ再確認し、皆様と共有するため作成します。
1.高可用性アーキテクト構築目次
2.RDSとは
Amazon Relational Database Service (Amazon RDS) は、AWS クラウド でリレーショナルデータベースを簡単にセットアップし、運用し、スケーリングすることのできるウェブサービスです。業界スタンダードのリレーショナルデータベース向けに、費用対効果に優れたエクステンションを備え、一般的なデータベース管理タスクを管理します。
引用:Amazon Relational Database Service (Amazon RDS) とは
今回は高可用性アーキテクトを構築していくうえで必要なデータベースとしてRDSをマルチAZ配置で利用します。
類似サービスとして「Amazon DynamoDB」、「Amazon Redshift」などがあげられます。
3.フロー図
マルチAZ配置で冗長化し、以下のフローで可用性を高めます。
- 障害が発生し、マスターのRDSが利用不可になります。
- フェイルオーバー(スレーブのRDSをマスターに昇格)し、処理をもう一台のRDSで引き継ぎます。
4.RDS構築
ではこれからRDSを構築していきましょう。
RDSの構築の全体のソースコードは下記の通りです。
ファイル名「ut-RDS-CF」
AWSTemplateFormatVersion: "2010-09-09"
Resources:
#サブネットグループ作成
RDSSubnetGroup:
Type: "AWS::RDS::DBSubnetGroup"
Properties:
DBSubnetGroupDescription: "dedicated to ut-rds"
DBSubnetGroupName: "ut_dbsubnet"
SubnetIds:
- !ImportValue ut-prisubnet-1-id
- !ImportValue ut-prisubnet-2-id
Tags:
-
Key: "Name"
Value: "ut_dbsubnet"
#RDSインスタンス作成
RDSInstance:
Type: "AWS::RDS::DBInstance"
Properties:
DBInstanceIdentifier: "ut-rds"
DBInstanceClass: "db.t3.micro"
Engine: "mysql"
EngineVersion: "8.0.20"
MasterUsername: "admin"
MasterUserPassword: "xxxxx"
DBName: "utrds"
BackupRetentionPeriod: 0
MultiAZ: true
PubliclyAccessible: false
StorageType: "gp2"
AllocatedStorage: 20
StorageEncrypted: true
KmsKeyId: !ImportValue ut-KMS-Arn
CopyTagsToSnapshot: false
DeletionProtection: false
DeleteAutomatedBackups: true
DBSubnetGroupName: !Ref RDSSubnetGroup
VPCSecurityGroups:
- !ImportValue ut-SG-RDS-id
Tags:
-
Key: "Name"
Value: "ut-rds"
サブネットグループ作成部分のソースコードとRDS作成部分のソースコードをそれぞれ説明していきます。
4-1.サブネットグループ
RDSを作成する前にRDSで使用するサブネットグループを作成します。
4-2-1.サブネットグループとは
DB サブネットグループは VPC に作成するサブネット (通常はプライベート) のコレクションで、DB インスタンス用に指定します。DB サブネットグループを使用することにより、CLI または API を使用して DB インスタンスを作成するときに、特定の VPC を指定することができます。コンソールを使用する場合は、使用する VPC とサブネットを選択できます。
各 DB サブネットグループには、特定の AWS リージョン 内の少なくとも 2 つのアベイラビリティーゾーンにサブネットが必要です。
引用:DBサブネットグループの使用
4-2-2.サブネットグループ作成
サブネットグループには二つのプライベートサブネットを指定します。
ソースコードは下記の通りです。
#サブネットグループ作成
RDSSubnetGroup:
Type: "AWS::RDS::DBSubnetGroup"
Properties:
DBSubnetGroupDescription: "dedicated to ut-rds"
DBSubnetGroupName: "ut_dbsubnet"
SubnetIds:
- !ImportValue ut-prisubnet-1-id
- !ImportValue ut-prisubnet-2-id
Tags:
-
Key: "Name"
Value: "ut_dbsubnet"
設定項目は下記の通りです。
使用するオプション | 設定値 | 説明 |
---|---|---|
DBSubnetGroupDescription | dedicated to ut-rds | サブネットグループの説明を入力 |
DBSubnetGroupName | ut_dbsubnet | 設定したいサブネットグループの名前を入力 |
SubnetIds | !ImportValue ut-prisubnet-1-id !ImportValue ut-prisubnet-2-id |
二つのプライベートサブネットのIDを参照 |
Tags | Key=Name,Value=ut_dbsubnet | 設定したいタグを入力 |
これでサブネットグループ作成のソースコードの説明は以上です。
4-2.RDS作成
次はRDSを作成していきましょう。RDSの作成のソースコードは下記の通りです。
#RDSインスタンス作成
RDSInstance:
Type: "AWS::RDS::DBInstance"
Properties:
DBInstanceIdentifier: "ut-rds"
DBInstanceClass: "db.t3.micro"
Engine: "mysql"
EngineVersion: "8.0.20"
MasterUsername: "admin"
MasterUserPassword: "xxxxx"
DBName: "utrds"
BackupRetentionPeriod: 0
MultiAZ: true
PubliclyAccessible: false
StorageType: "gp2"
AllocatedStorage: 20
StorageEncrypted: true
KmsKeyId: !ImportValue ut-KMS-Arn
CopyTagsToSnapshot: false
DeleteAutomatedBackups: true
DBSubnetGroupName: !Ref RDSSubnetGroup
VPCSecurityGroups:
- !ImportValue ut-SG-RDS-id
Tags:
-
Key: "Name"
Value: "ut-rds"
設定項目は下記の通りです。
使用するオプション | 設定値 | 説明 |
---|---|---|
DBInstanceIdentifier | ut-rds | 設定したいDBインスタンス識別子を入力 |
DBInstanceClass | db.t3.micro | DBインスタンスタイプを入力 |
Engine | "mysql" | 使用したいDBエンジンを入力 |
EngineVersion | 8.0.20 | 設定したいエンジンのversionを入力 |
MasterUsername | admin | 設定したいマスターユーザー名を入力 |
MasterUserPassword | xxxxx | 設定したいDBパスワードを入力 |
DBName | utrds | 設定したいデータベース名を入力 |
BackupRetentionPeriod | 0 | 今回は自動バックアップを利用しないので無効化 |
MultiAZ | true | 高可用性のためマルチAZを有効化 |
PubliclyAccessible | false | パブリックアクセスを無効化 |
AllocatedStorage | 20 | コストを考慮して最小値を入力 |
StorageEncrypted | true | 暗号化を有効に |
KmsKeyId | !ImportValue ut-KMS-Arn | KMSのARNを参照 |
CopyTagsToSnapshot | false | 今回はスナップショットを作成しないので無効化 |
DeleteAutomatedBackups | true | RDS削除に生成されるスナップショットの自動削除を有効化 |
DBSubnetGroupName | !Ref RDSSubnetGroup | サブネットグループネームを参照 |
VPCSecurityGroups | !ImportValue ut-SG-RDS-id | RDS用のSGのidを参照 |
Tags | Key=Name,Value=ut-rds | 設定したいタグを入力 |
これでRDS作成のソースコードの説明は以上です。
5.RDS検証
スタック作成後、構築されたRDSが機能してるかの検証をしていきます。
作成したRDSがEC2から接続できるかのテストをしましょう。
※こちらの検証はEC2構築後に検証しています
①SSHでEC2に接続したら以下のコマンドでRDSに接続します。
mysql -h エンドポイント -P 3306 -u ユーザー名 -p データベース名
出力
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 8.0.20 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [utrds]>
これでRDSに接続できました。
6.感想
RDS作成はオプションコマンドも多く作成が大変でしたがエラーなどは発生しないで作成完了することができてよかったです。
7.参照
AWS CloudFormation – AWS::RDS::DBSubnetGroup
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbsubnet-group.html
AWS CloudFormation – AWS::RDS::DBInstance
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html