AWSで、Terraformを利用する方法をまとめてみた(9/10)

RDSデータベース用の設定を行う
--

__1.VPCを作成する__
~~~
resource "aws_vpc" "my_vpc" {
  cidr_block = "10.0.0.0/16"
  
  tags = {
    Name = "my-vpc"
  }
}
~~~
この例では、CIDR ブロックが 10.0.0.0/16 の VPC を定義しています。

__2.サブネットを作成する__
~~~
resource "aws_subnet" "my_subnet" {
  vpc_id            = aws_vpc.my_vpc.id
  cidr_block        = "10.0.2.0/24"
  availability_zone = "ap-northeast-1a"
  tags = {
    Name = "my-private-subnet"
  }
}
~~~

__3.サブネットグループを作成する__
~~~
resource "aws_db_subnet_group" "my_db_subnet_group" {
  name       = "my_db_subnet_group"
  subnet_ids = [aws_subnet.my_subnet.id]

  tags = {
    Name = "my_db_subnet_group"
  }
}
~~~

__4.セキュリティグループを作成する__
~~~
resource "aws_security_group" "my_security_group" {
  name_prefix = "my_security_group"
  vpc_id      = aws_vpc.my_vpc.id

  ingress {
    from_port = 3306
    to_port   = 3306
    protocol  = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "my_security_group"
  }
}
~~~


__5.RDSデータベース用のパラメータグループを作成する__
~~~
resource "aws_db_parameter_group" "my_db_parameter_group" {
  name   = "my-db-parameter-group"
  family = "mysql8.0"

  parameter {
    name  = "max_connections"
    value = "1000"
  }

  parameter {
    name  = "query_cache_size"
    value = "67108864"
  }
}
~~~
この例では、MySQL 8.0用のパラメータグループを定義しています。パラメータグループには、データベースエンジンに依存するパラメータを設定できます。

__6.オプショングループを作成する__
~~~
resource "aws_rds_cluster_parameter_group" "my_rds_cluster_parameter_group" {
  name        = "my_rds_cluster_parameter_group"
  family      = "aurora-mysql8.0"
  description = "My RDS cluster parameter group"

  parameter {
    name  = "tls_version"
    value = "TLSv1.2"
  }
}
~~~

__7.Aurora 8.0 RDSクラスターを作成する__
~~~
resource "aws_rds_cluster" "aurora_cluster" {
  cluster_identifier             = "aurora_cluster"
  engine                         = "aurora-mysql"
  engine_version                 = "5.7.mysql_aurora.2.08.1"
  database_name                  = "mydatabase"
  master_username                = "admin"
  master_password                = "mypassword"
  backup_retention_period        = 7
  preferred_backup_window        = "00:00-01:00"
  preferred_maintenance_window   = "mon:03:00-mon:04:00"
  db_subnet_group_name           = aws_db_subnet_group.my_db_subnet_group.name
  vpc_security_group_ids         = [aws_security_group.my_security_group.id]
  db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.my_rds_cluster_parameter_group.name
}
~~~

__8.ルートテーブルを作成する__
~~~
resource "aws_route_table" "my_route_table" {
  vpc_id = aws_vpc.my_vpc.id

  tags = {
    Name = "my_route_table"
  }
}
~~~
__9.パブリックサブネットにあるアプリケーションサーバからのみアクセス可能とするため、パブリックサブネットのCIDRブロックを取得して、セキュリティグループを作成する。__
~~~
data "aws_subnet" "public_subnet" {
  filter {
    name   = "tag:Name"
    values = ["my-public-subnet"]
  }
}

resource "aws_security_group" "public_app_server_sg" {
  name_prefix = "public_app_server_sg"
  vpc_id      = aws_vpc.my_vpc.id

  ingress {
    from_port = 0
    to_port   = 65535
    protocol  = "tcp"
    cidr_blocks = [data.aws_subnet.public_subnet.cidr_block]
  }

  tags = {
    Name = "public_app_server_sg"
  }
}
~~~
__10.ルートテーブルにルールを追加して、パブリックサブネットにあるアプリケーションサーバからのみアクセス可能にする。__
~~~
resource "aws_route" "public_app_server_route" {
  route_table_id            = aws_route_table.my_route_table.id
  destination_cidr_block    = "0.0.0.0/0"
  gateway_id                = aws_internet_gateway.my_internet_gateway.id

/*
destination_prefix_list_id
prefix list を使用して、宛先 IP アドレスによるトラフィックのルーティングを設定します。この場合、null に設定されているため、prefix list を使用しないことを示します。

egress_only_gateway_id
ルーティング先が Egress Only Internet Gateway の場合に使用されます。
この場合、null に設定されているため、Egress Only Internet Gateway にルーティングしないことを示します。

instance_id
ルーティング先が EC2 インスタンスの場合に使用されます。
この場合、null に設定されているため、EC2 インスタンスにルーティングしないことを示します。

local_gateway_id
VPC 内の VPN 接続を通じて接続されたオンプレミスのゲートウェイを指定するために使用されます。
この場合、null に設定されているため、オンプレミスのゲートウェイにルーティングしないことを示します。

nat_gateway_id
ルーティング先が NAT ゲートウェイの場合に使用されます。
この場合、null に設定されているため、NAT ゲートウェイにルーティングしないことを示します。

network_interface_id
ルーティング先が ENI (Elastic Network Interface) の場合に使用されます。
この場合、null に設定されているため、ENI にルーティングしないことを示します。

transit_gateway_id
ルーティング先が Transit Gateway の場合に使用されます。
この場合、null に設定されているため、Transit Gateway にルーティングしないことを示します。
*/
  destination_prefix_list_id = null
  egress_only_gateway_id    = null
  instance_id               = null
  local_gateway_id          = null
  nat_gateway_id            = null
  network_interface_id      = null
  transit_gateway_id        = null

  depends_on = [
    aws_subnet.my_subnet,
    aws_internet_gateway.my_internet_gateway,
    aws_security_group.my_security_group,
    aws_security_group.public_app_server_sg
  ]
}
~~~


AWSで、Terraformを利用する方法をまとめてみた(1/10)
https://qiita.com/kimuni-i/items/ffde2f8df96fe5d9513f
AWSで、Terraformを利用する方法をまとめてみた(2/10)
https://qiita.com/kimuni-i/items/6298ed10adc6ad450488
AWSで、Terraformを利用する方法をまとめてみた(3/10)
https://qiita.com/kimuni-i/items/4d2f90506eb2dd4ee702
AWSで、Terraformを利用する方法をまとめてみた(4/10)
https://qiita.com/kimuni-i/items/b97089a820cc06ed2d9c
AWSで、Terraformを利用する方法をまとめてみた(5/10)
https://qiita.com/kimuni-i/items/11efb60b9a731d212211
AWSで、Terraformを利用する方法をまとめてみた(6/10)
https://qiita.com/kimuni-i/items/943daf8f4e80af12b70e
AWSで、Terraformを利用する方法をまとめてみた(7/10)
https://qiita.com/kimuni-i/items/b2cc6e1e4b5d5c1a92cb
AWSで、Terraformを利用する方法をまとめてみた(8/10)
https://qiita.com/kimuni-i/items/2934372c385ba0561425
AWSで、Terraformを利用する方法をまとめてみた(10/10)
https://qiita.com/kimuni-i/items/2f900d792c38ad93979c