💭
【Terraform】RDSの作成
main.tfやterraform.tfvarsの内容はこちら。
- 今回はRDSでMySQLをインストールします。
パラメーターグループの作成
aws_db_parameter_group
- name : string : パラメーターグループ名
- family : string : パラメーターグループのファミリー(mysql8.0,postgres12など)
- parameter : block : 具体的なパラメーター(nameやvalueを設定)
- tags : object : タグ
rds.tf
#------------------
#RDS parameter group
#------------------
resource "aws_db_parameter_group" "mysql_standalone_parametergroup" {
name = "${var.project}-${var.environment}-mysql-standalone-parametergroup"
family = "mysql8.0"
parameter {
name = "character_set_database"
value = "utf8mb4"
}
parameter {
name = "character_set_server"
value = "utf8mb4"
}
オプショングループの作成
aws_db_option_group
- name : string : オプショングループ名
- engine_name : string : 関連づけるエンジン名(mysql,postgresなど)
- major_engine_version : string : 関連づけるエンジンバージョン(5.7,8.0など)
- option : block : 具体的なオプション設定(option_name,option_settingsを設定)
- tags : object : タグ
rds.tf
#------------------
#RDS option group
#------------------
resource "aws_db_option_group" "mysql_standalone_optiongroup" {
name = "${var.project}-${var.environment}-mysql-standalone-optiongroup"
engine_name = "mysql"
major_engine_version = "8.0"
}
サブネットグループの作成
aws_db_subnet_group
- name : string : サブネットグループ名
- subnet_ids : string[] : サブネットID
- tags : object : タグ
rds.tf
#------------------
#RDS subnet group
#------------------
resource "aws_db_subnet_group" "mysql_standalone_subnetroup" {
name = "${var.project}-${var.environment}-mysql-standalone-subnetgroup"
subnet_ids = [aws_subnet.private_subnet_1a.id, aws_subnet.private_subnet_1c.id]
tags = {
Name = "${var.project}-${var.environment}-mysql-standalone-subnetgroup"
Project = var.project
Env = var.environment
}
}
ランダム文字列の設定
RDSのパスワード設定に使うために、random_stringリソースとして定義します。
hashicorp/randomプロバイダーをインストールしないといけないので、applyする前にterraform init
をする。
applyした後は、terraform.tfstateで確認。設定項目は他にもあるので、必要に応じて変更。
rds.tf
resource "random_string" "db_password" {
length = 16
special = false
}
RDSの作成
aws_db_instance(基本設定)
- engine : string : データベースエンジン
- engine_version : string : データベースエンジンのバージョン
- identifier : string : RDSインスタンスリソース
- instance_class : string : インスタンスタイプ
- username : string : マスターDBのユーザー名
- password : string : マスターDBのパスワード
- tags : object : タグ
aws_db_instance(ストレージ)
- allocated_storage : string : 割り当てるストレージサイズ(ギガバイト)
- max_allocated_storage : string : オートスケールさせる最大ストレージサイズ
- storage_type : enum : standard,gp2,io1など
- storage_encrypted : string : DBを暗号化するKMSキーIDまたはfalse
aws_db_instance(DB設定)
- db_name : string : データベース名
- parameter_group_name : string : パラメータグループ名
- option_group_name : string : オプショングループ名
aws_db_instance(バックアップ)
- backup_window : string : バックアップを行う時間帯
- backup_retention_period : bool : バックアップを残す数
- maintenance_window : string : メンテナンスを行う時間
- auto_minor_version_upgrade : bool : 自動でマイナーバージョンアップグレードするかどうか
aws_db_instance(削除防止)
- deletion_protection : bool : 削除防止するかどうか
- skip_final_snapshot : bool : 削除時のスナップショットをスキップするかどうか
- apply_immediately : bool : 即時反映するかどうか
rds.tf
resource "aws_db_instance" "mysql_standalone" {
#基本設定
engine = "mysql"
engine_version = "8.0.40"
identifier = "${var.project}-${var.environment}-mysql-standalone"
username = "admin"
#上記で作成したrandom_string。最後に.result
password = random_string.db_password.result
instance_class = "db.t3.micro"
#ストレージ
allocated_storage = 20
max_allocated_storage = 50
storage_type = "gp2"
storage_encrypted = false
#ネットワーク
multi_az = false
availability_zone = "ap-northeast-1a"
#最後に.name
db_subnet_group_name = aws_db_subnet_group.mysql_standalone_subnetroup.name
vpc_security_group_ids = [aws_security_group.db_sg.id]
publicly_accessible = false
port = 3306
#DB設定
db_name = "udemy_terraform"
#最後に.name
parameter_group_name = aws_db_parameter_group.mysql_standalone_parametergroup.name
option_group_name = aws_db_option_group.mysql_standalone_optiongroup.name
#バックアップ
backup_window = "04:00-05:00"
backup_retention_period = 7
maintenance_window = "Mon:05:00-Mon:08:00"
auto_minor_version_upgrade = false
#削除防止
deletion_protection = true
skip_final_snapshot = false
apply_immediately = true
tags = {
Name = "${var.project}-${var.environment}-mysql-standalone"
Project = var.project
Env = var.environment
}
}
Discussion