もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

実践 Terraformを読んでTerraform勉強中 Vol.10

はじめに

こんばんは。

今回は以下の本を読んで勉強中です。

前回の記事はこちら

kojirooooocks.hatenablog.com

kojirooooocks.hatenablog.com

kojirooooocks.hatenablog.com

kojirooooocks.hatenablog.com

kojirooooocks.hatenablog.com

kojirooooocks.hatenablog.com

kojirooooocks.hatenablog.com

kojirooooocks.hatenablog.com

kojirooooocks.hatenablog.com

今回は第13章です。

バージョンは以下です。

$ terraform --version
Terraform v1.0.3

本題

第13章 データストア

RDSとElastiCacheについて学べます。

terraform関係なく良く使ったことある機能です。

RDS

### セキュリティグループ
module "mysql_sg" {
  source      = "./security_group"
  name        = "mysql-sg"
  vpc_id      = module.vpc.vpc_id
  port        = 3306
  cidr_blocks = ["0.0.0.0/0"]
}


### パラメータグループ
resource "aws_db_parameter_group" "default" {
  name   = "example"
  family = "mysql5.7"

  parameter {
    name  = "character_set_database"
    value = "utf8mb4"
  }

  parameter {
    name  = "character_set_server"
    value = "utf8mb4"
  }
}

### オプショングループ
resource "aws_db_option_group" "default" {
  name                 = "example"
  engine_name          = "mysql"
  major_engine_version = "5.7"

  option {
    option_name = "MARIADB_AUDIT_PLUGIN"
  }
}

### サブネットグループ
resource "aws_db_subnet_group" "default" {
  name       = "example"
  subnet_ids = [module.network.private_subnet_0_id, module.network.private_subnet_1_id]
}

### DBインスタンス作成
resource "aws_db_instance" "default" {
  identifier                 = "example"
  engine                     = "mysql"
  engine_version             = "5.7.25"
  instance_class             = "db.t3.small"
  allocated_storage          = 20
  max_allocated_storage      = 100
  storage_type               = "gp2"
  storage_encrypted          = true
  kms_key_id                 = aws_kms_alias.default.arn
  username                   = "admin"
  password                   = "pasword!!"
  multi_az                   = false
  publicly_accessible        = false
  backup_window              = "09:10-09:40"
  backup_retention_period    = 30
  maintenance_window         = "mon:10:10-mon:10:40"
  auto_minor_version_upgrade = false
  deletion_protection        = false # terraform destoryで削除可能にするためfalse
  skip_final_snapshot        = true # スナップショット作成をスキップする
  port                       = 3306
  apply_immediately          = false
  vpc_security_group_ids     = [module.mysql_sg.security_group_id]
  parameter_group_name       = aws_db_parameter_group.default.name
  option_group_name          = aws_db_option_group.default.name
  db_subnet_group_name       = aws_db_subnet_group.default.name

  lifecycle {
    ignore_changes = [password]
  }
}

f:id:kojirooooocks:20211017235057p:plain

ElastiCache

### セキュリティグループ
module "redis_sg" {
  source      = "./security_group"
  name        = "redis-sg"
  vpc_id      = module.vpc.vpc_id
  port        = 6379
  cidr_blocks = ["0.0.0.0/0"]
}

### パラメータグループ
resource "aws_elasticache_parameter_group" "default" {
  name   = "example"
  family = "redis5.0"

  parameter {
    name  = "cluster-enabled"
    value = "no"
  }
}

### サブネットグループ
resource "aws_elasticache_subnet_group" "default" {
  name       = "example"
  subnet_ids = [module.network.private_subnet_0_id, module.network.private_subnet_1_id]
}

### Redisサーバ作成
resource "aws_elasticache_replication_group" "default" {
  replication_group_id          = "default"
  replication_group_description = "Cluster Disabled"
  engine                        = "redis"
  engine_version                = "5.0.4"
  number_cache_clusters         = 1 # レプリカノードは作らない
  node_type                     = "cache.t3.micro"
  snapshot_window               = "09:10-10:10"
  snapshot_retention_limit      = 7
  maintenance_window            = "mon:10:40-mon:11:40"
  automatic_failover_enabled    = false
  port                          = 6379
  apply_immediately             = false
  security_group_ids            = [module.redis_sg.security_group_id]
  parameter_group_name          = aws_elasticache_parameter_group.default.name
  subnet_group_name             = aws_elasticache_subnet_group.default.name
}

f:id:kojirooooocks:20211018002402p:plain

終わりに

金・土はガッツリ仕事で、日は家族の用事でめちゃめちゃ大変な週末でした。

そろそろこの本も半分来たな。

来週からまたがんばります!