LoginSignup
2
2

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

Last updated at Posted at 2023-11-24

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

2
2
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
2
2