この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
皆様こんにちは。
Terraformを利用して、AWSで高可用性アーキテクトの構築をしていきます。
今回はRDSを構築していきます。
1.高可用性アーキテクト構築目次
2.RDSの概要
Amazon Relational Database Service (Amazon RDS) は、AWS クラウド でリレーショナルデータベースを簡単にセットアップし、運用し、スケーリングすることのできるウェブサービスです。業界スタンダードのリレーショナルデータベース向けに、費用対効果に優れたエクステンションを備え、一般的なデータベース管理タスクを管理します。
AWSが提供するデータベースサービスはたくさんの種類がありますが、データベースの2大アーキテクチャとして、RDB型、NoSQL型に分類できます。「RDS」「Redshift」はRDB型で、「DynamoDB」「ElastiCashe」「Neptune」「DocumentDB」「Keyspaces」はNoSQL型です。
ユースケースに応じて適切に使い分けることが重要です。
3.構成図
下記は今回作成するRDSのマルチAZ構成図です。
障害発生時にフェイルオーバーで高可用性を実現します。
①.障害が発生し、1台目のRDSが利用できなくなります。
②.フェイルオーバー(自動的に待機システムに切り替える)によって、処理を2台目のRDSに引き継ぎます。
4.RDSの作成
RDS作成の全体のソースコードは下記の通りです。
#----------------------------------------
# RDSの構築
#----------------------------------------
# サブネットグループの作成
resource "aws_db_subnet_group" "higa_dbsubnet" {
name = "higa_dbsubnet"
subnet_ids = [aws_subnet.higa-Private-subnet-3a.id, aws_subnet.higa-Private-subnet-4c.id]
tags = {
Name = "higa-_dbsubnet"
}
}
#RDSの作成
resource "aws_db_instance" "higa-rds" {
identifier = "higa-rds"
allocated_storage = 20
engine = "mysql"
engine_version = "8.0.20"
instance_class = "db.t3.micro"
username = "higa"
password = "password"
multi_az = true
db_subnet_group_name = aws_db_subnet_group.higa_dbsubnet.name
vpc_security_group_ids = [aws_security_group.higa-RDS-sg.id]
storage_encrypted = true
kms_key_id = "arn:aws:kms:ap-southeast-1:アカウントID:key/e0b1110b-a12e-4a63-a87e-5b838d15ab4c"
//バックアップを保持する日数
backup_retention_period = 0
//DB削除前にスナップショットを作成しない
skip_final_snapshot = true
tags = {
name = "higa-rds"
}
}
4-1.サブネットグループの作成
サブネットは、VPC の IP アドレス範囲のセグメントで、セキュリティや運用上のニーズに基づいてリソースをグループ化するために指定します。DB サブネットグループは VPC に作成するサブネット (通常はプライベート) のコレクションで、DB インスタンス用に指定します。DB サブネットグループを使用することにより、CLI または API を使用して DB インスタンスを作成するときに、特定の VPC を指定することができます。コンソールを使用する場合は、使用する VPC とサブネットを選択できます。
引用元:DB サブネットグループの使用
DBサブネットグループは作成したVPC(higa-vpc)を指定するために作成します。
まずはサブネットグループを作成していきます。
ソースコードは下記の通りです。(5~13行目)
# サブネットグループの作成
resource "aws_db_subnet_group" "higa_dbsubnet" {
name = "higa_dbsubnet"
subnet_ids = [aws_subnet.higa-Private-subnet-3a.id, aws_subnet.higa-Private-subnet-4c.id]
tags = {
Name = "higa-_dbsubnet"
}
}
設定項目は下記の通りです。
使用するオプション | 設定値 | 説明 |
---|---|---|
name | higa_dbsubnet | 設定したいサブネットグループの名前を入力 |
subnet_ids | [aws_subnet.higa-Private-subnet-3a.id, aws_subnet.higa-Private-subnet-4c.id] | 作成した2つのプライベートサブネットを指定 |
tags | Name = "higa-_dbsubnet" | 設定したいタグを入力 |
これでRDSのサブネットグループの作成ができました。
4-2.RDSインスタンスの作成
次に、RDSインスタンスを作成していきます。
ソースコードは下記の通りです。(15~39行目)
#RDSの作成
resource "aws_db_instance" "higa-rds" {
identifier = "higa-rds"
allocated_storage = 20
engine = "mysql"
engine_version = "8.0.20"
instance_class = "db.t3.micro"
username = "higa"
password = "xxxx"
multi_az = true
db_subnet_group_name = aws_db_subnet_group.higa_dbsubnet.name
vpc_security_group_ids = [aws_security_group.higa-RDS-sg.id]
storage_encrypted = true
kms_key_id = "arn:aws:kms:ap-southeast-1:アカウントID:key/e0b1110b-a12e-4a63-a87e-5b838d15ab4c"
//バックアップを保持する日数
backup_retention_period = 0
//DB削除前にスナップショットを作成しない
skip_final_snapshot = true
tags = {
name = "higa-rds"
}
}
設定項目は下記の通りです。
使用するオプション | 設定値 | 説明 |
---|---|---|
identifier | higa-rds | DBインスタンス識別子を設定 |
allocated_storage | 20 | ギガバイト単位で指定されたストレージの割り当てサイズを指定 今回はコストを考慮して最小値を設定 |
engine | mysql | 使用したいDBエンジンを 設定 |
engine_version | 8.0.20 | 設定したいエンジンのversionを設定 |
instance_class | db.t3.micro | DBインスタンスタイプを設定 |
username | higa | 設定したいマスターユーザー名を設定 |
password | xxxx | DBのパスワードを設定 |
multi_az | true | 高可用性のためマルチAZを有効化 |
db_subnet_group_name | aws_db_subnet_group.higa_dbsubnet.name | 作成したサブネットグループのIDを指定 |
vpc_security_group_ids | [aws_security_group.higa-RDS-sg.id] | 作成したRDSのSGのIDを指定 |
storage_encrypted | true | DBインスタンスの暗号化を有効 |
kms_key_id | arn:aws:kms:ap-southeast-1:アカウントID:key/e0b1110b-a12e-4a63-a87e-5b838d15ab4c | 作成した暗号化鍵のIDを指定 |
backup_retention_period | 0 | バックアップを保持する日数を設定 |
skip_final_snapshot | true | DB削除前にスナップショットを作成しないように設定 |
tags | name = "higa-rds" | 設定したいタグを入力 |
これでRDSインスタンスの作成ができました。
5.検証
まず、SSHでEC2インスタンス(higa-ec2-1)に接続し、下記コマンドでRDSに接続します。EC2はこちらで作成
mysql -h エンドポイント -P 3306 -u ユーザー名 -p データベース名
下記のようなパスワード入力画面でパスワードを入力します。
Enter password:
正しいパスワードが入力できたら下記のような画面が表示されます。
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 76
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.
これでRDSに接続できました。
6.まとめ
RDSの設定項目は多く、コード実行後に時間がかかるため、訂正に時間がかかりました。
RDSインスタンス作成時に何度かエラーが発生しましたが、エラー文をdeepLで調べ、公式ドキュメントで設定オプションを「Ctrl + F」で調べることで、スムーズに解決することができました。
エラー解決力は向上していると実感しています。
7.参考文献
- terraformの公式ドキュメント
Docs overview | hashicorp/aws | Terraform Registry