LoginSignup
1
0

【AWS/Terraform】RDSの管理

Last updated at Posted at 2023-06-18

はじめに

AWSのRelational Database Service(RDS)は、スケーラブルなリレーショナルデータベースをクラウド上で簡単にセットアップ、操作、スケーリングできるサービスです。この記事では、Terraformを使用してRDSを管理する方法を記載します。

環境

  • Terraform v1.0.0以上
  • AWSアカウント
  • AWS CLI設定済み(認証情報)

RDSとは

RDSは、MySQL, PostgreSQL, MariaDB, Oracle Database, SQL Serverなど複数のデータベースエンジンをサポートしています。AWSがハードウェアのプロビジョニング、データベースのセットアップ、パッチ適用、バックアップといった作業を自動化してくれるため、開発者はアプリケーションの構築とスケーリングに専念できます。

TerraformでのRDSの管理

VPCに関しては下記に記載しています。

セキュリティグループに関しては下記に記載しています。

# パラメータグループ
resource "aws_db_parameter_group" "mysql_parametergroup" {
  name   = "mysql-parametergroup"
  family = "mysql8.0"
  parameter {
    name  = "character_set_database"
    value = "utf8mb4"
  }
  parameter {
    name  = "character_set_server"
    value = "utf8mb4"
  }
}

# オプショングループ
resource "aws_db_option_group" "mysql_optiongroup" {
  name                 = "mysql-optiongroup"
  engine_name          = "mysql"
  major_engine_version = "8.0"
}

resource "aws_db_subnet_group" "mysql_subnetgroup" {
  name = "mysql-subnetgroup"
  subnet_ids = [
    aws_subnet.private-subnet-db-1a.id,
    aws_subnet.private-subnet-db-1c.id,
  ]
  tags = {
    Name = "mysql-subnetgroup"
  }
}

resource "random_string" "mysql_password" {
  length  = 16
  special = true
}

resource "aws_db_instance" "mysql_db" {
  engine         = "mysql"
  engine_version = "8.0.32"

  identifier = "mysql-db-identifier"

  username = "admin"
  password = random_string.mysql_password.result

  instance_class        = "db.t2.micro"
  allocated_storage     = 20
  max_allocated_storage = 50
  storage_type          = "gp2"
  storage_encrypted     = false

  multi_az                 = false
  availability_zone       = "ap-northeast-1a"
  db_subnet_group_name = aws_db_subnet_group.mysql_subnetgroup.name
  vpc_security_group_ids = [
    aws_security_group.db_sg.id
  ]
  publicly_accessible = false
  port                = 3306

  name                 = "mysql_db_name"
  parameter_group_name = aws_db_parameter_group.mysql_parametergroup.name
  option_group_name    = aws_db_option_group.mysql_optiongroup.name

  backup_window              = "04:00-05:00"
  backup_retention_period    = 7
  maintenance_window         = "Mon:05:00-Mon:06:00"
  auto_minor_version_upgrade = true

  deletion_protection = false
  skip_final_snapshot = true

  apply_immediately = true

  tags = {
    Name = "db-sg-tag"
  }
}

RDSの適用

terraform apply
1
0
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
1
0