@@ -22,15 +22,34 @@ data "aws_instance" "stage_api" {
2222 }
2323}
2424
25+ data "aws_instance" "prod_db" {
26+ filter {
27+ name = " tag:Name"
28+ values = [var . prod_db_instance_name ]
29+ }
30+
31+ filter {
32+ name = " instance-state-name"
33+ values = [" running" ]
34+ }
35+ }
36+
2537data "aws_subnet" "stage_api" {
2638 id = data. aws_instance . stage_api . subnet_id
2739}
2840
29- data "aws_subnets" "target" {
30- filter {
31- name = " vpc-id"
32- values = [data . aws_subnet . stage_api . vpc_id ]
33- }
41+ locals {
42+ load_test_db_subnet_id = var. load_test_db_subnet_id != null ? var. load_test_db_subnet_id : data. aws_instance . stage_api . subnet_id
43+ load_test_db_ami_id = var. load_test_db_ami_id != null ? var. load_test_db_ami_id : data. aws_instance . prod_db . ami
44+
45+ source_security_group_ids = setunion (
46+ data. aws_instance . prod_api . vpc_security_group_ids ,
47+ data. aws_instance . stage_api . vpc_security_group_ids
48+ )
49+ }
50+
51+ data "aws_subnet" "load_test_db" {
52+ id = local. load_test_db_subnet_id
3453}
3554
3655data "aws_ami" "ubuntu" {
@@ -48,27 +67,10 @@ data "aws_ami" "ubuntu" {
4867 }
4968}
5069
51- data "aws_db_instance" "prod" {
52- db_instance_identifier = var. prod_rds_identifier
53- }
54-
55- data "aws_db_snapshot" "latest_prod" {
56- db_instance_identifier = var. prod_rds_identifier
57- most_recent = true
58- snapshot_type = " automated"
59- }
60-
61- locals {
62- source_security_group_ids = setunion (
63- data. aws_instance . prod_api . vpc_security_group_ids ,
64- data. aws_instance . stage_api . vpc_security_group_ids
65- )
66- }
67-
6870resource "aws_security_group" "load_test_db" {
6971 name = " sc-load-test-db-sg"
70- description = " Security group for load test RDS "
71- vpc_id = data. aws_subnet . stage_api . vpc_id
72+ description = " Security group for load test MySQL EC2 "
73+ vpc_id = data. aws_subnet . load_test_db . vpc_id
7274
7375 egress {
7476 from_port = 0
@@ -78,7 +80,9 @@ resource "aws_security_group" "load_test_db" {
7880 }
7981
8082 tags = {
81- Name = " solid-connection-load-test-db-sg"
83+ Name = " solid-connection-load-test-db-sg"
84+ Project = " solid-connection"
85+ Env = " load_test"
8286 }
8387}
8488
@@ -94,6 +98,65 @@ resource "aws_security_group_rule" "load_test_db_mysql" {
9498 source_security_group_id = each. value
9599}
96100
101+ resource "aws_ebs_volume" "load_test_db_data" {
102+ availability_zone = data. aws_subnet . load_test_db . availability_zone
103+ size = var. allocated_storage
104+ type = " gp3"
105+ encrypted = true
106+
107+ tags = {
108+ Name = " ${ var . load_test_db_instance_name } -data"
109+ Project = " solid-connection"
110+ Env = " load_test"
111+ }
112+ }
113+
114+ resource "aws_instance" "load_test_db" {
115+ ami = local. load_test_db_ami_id
116+ instance_type = var. load_test_db_instance_type
117+ subnet_id = local. load_test_db_subnet_id
118+ vpc_security_group_ids = [aws_security_group . load_test_db . id ]
119+ associate_public_ip_address = var. load_test_db_associate_public_ip
120+ iam_instance_profile = var. load_test_db_instance_profile_name
121+
122+ metadata_options {
123+ http_endpoint = " enabled"
124+ http_tokens = " required"
125+ http_put_response_hop_limit = 1
126+ }
127+
128+ root_block_device {
129+ volume_size = 8
130+ volume_type = " gp3"
131+ encrypted = true
132+ delete_on_termination = true
133+ }
134+
135+ user_data = templatefile (" ${ path . module } /templates/load_test_mysql_setup.sh.tftpl" , {
136+ aws_region = " ap-northeast-2"
137+ data_volume_id = aws_ebs_volume.load_test_db_data.id
138+ db_name = var.db_name
139+ load_test_parameter_prefix = var.load_test_parameter_prefix
140+ mysql_backup_bucket_name = var.mysql_backup_bucket_name
141+ mysql_config_content = file (" ${ path . module } /../../modules/app_stack/templates/mysql_tuning.cnf" )
142+ })
143+
144+ user_data_replace_on_change = true
145+
146+ tags = {
147+ Name = var.load_test_db_instance_name
148+ Project = " solid-connection"
149+ Env = " load_test"
150+ }
151+ }
152+
153+ resource "aws_volume_attachment" "load_test_db_data" {
154+ device_name = " /dev/sdf"
155+ volume_id = aws_ebs_volume. load_test_db_data . id
156+ instance_id = aws_instance. load_test_db . id
157+ stop_instance_before_detaching = true
158+ }
159+
97160resource "aws_security_group" "load_generator" {
98161 count = var. create_load_generator ? 1 : 0
99162
@@ -152,39 +215,9 @@ resource "aws_instance" "load_generator" {
152215 }
153216}
154217
155- resource "aws_db_subnet_group" "load_test" {
156- name = " sc-load-test-db-subnet-group"
157- subnet_ids = data. aws_subnets . target . ids
158-
159- tags = {
160- Name = " solid-connection-load-test-db-subnet-group"
161- }
162- }
163-
164- resource "aws_db_instance" "load_test" {
165- identifier = var. rds_identifier
166- instance_class = var. db_instance_class
167- parameter_group_name = var. db_parameter_group_name
168- snapshot_identifier = data. aws_db_snapshot . latest_prod . id
169- db_subnet_group_name = aws_db_subnet_group. load_test . name
170- vpc_security_group_ids = [aws_security_group . load_test_db . id ]
171- publicly_accessible = false
172- skip_final_snapshot = true
173- copy_tags_to_snapshot = true
174- deletion_protection = false
175- backup_retention_period = 0
176- apply_immediately = true
177- storage_encrypted = true
178- kms_key_id = var. kms_key_arn
179-
180- tags = {
181- Name = var.rds_identifier
182- }
183- }
184-
185218resource "aws_ssm_parameter" "load_test_datasource_url" {
186219 name = " ${ var . load_test_parameter_prefix } /spring.datasource.url"
187220 type = " String"
188- value = " jdbc:mysql://${ aws_db_instance . load_test . address } : ${ aws_db_instance . load_test . port } /${ var . db_name } ?serverTimezone=Asia/Seoul&characterEncoding=UTF-8"
221+ value = " jdbc:mysql://${ aws_instance . load_test_db . private_ip } :3306 /${ var . db_name } ?serverTimezone=Asia/Seoul&characterEncoding=UTF-8"
189222 overwrite = true
190223}
0 commit comments