From c8426f9180e8f1bb856009170824c0241b65bccb Mon Sep 17 00:00:00 2001 From: Hexeong <123macanic@naver.com> Date: Thu, 8 Oct 2026 17:37:14 +0900 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20DB=20EC2=20=EC=9D=98=20private=20I?= =?UTF-8?q?P=20=EB=A5=BC=20=ED=98=84=EC=9E=AC=20=EC=A3=BC=EC=86=8C?= =?UTF-8?q?=EB=A1=9C=20=EA=B3=A0=EC=A0=95=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인스턴스를 교체하면 private IP 가 바뀌어 Parameter Store 의 spring.datasource.url 갱신과 API 서버 재배포가 함께 필요했다. DB EC2 는 private subnet 에 있어 EIP 로 주소를 유지할 수도 없다. 복구 워크플로우(#68)에서 인스턴스를 교체해도 datasource 설정을 그대로 쓸 수 있도록 현재 주소를 명시적으로 고정한다. - prod 의 db_ec2_private_ip 는 default 없이 secrets tfvars 에서 읽는다 - 모듈 변수는 DB EC2 를 쓰지 않는 stage 를 위해 null 기본값을 둔다 - 현재 주소와 같은 값이면 plan 이 No changes 임을 확인했다 Co-Authored-By: Claude Opus 5.5 --- environment/prod/main.tf | 1 + environment/prod/variables.tf | 5 +++++ modules/app_stack/db_ec2.tf | 2 ++ modules/app_stack/variables.tf | 6 ++++++ 4 files changed, 14 insertions(+) diff --git a/environment/prod/main.tf b/environment/prod/main.tf index 4ea1a90..23f952d 100644 --- a/environment/prod/main.tf +++ b/environment/prod/main.tf @@ -28,6 +28,7 @@ module "prod_stack" { db_instance_type = var.db_ec2_instance_type db_ami_id = var.db_ec2_ami_id db_subnet_id = var.db_ec2_subnet_id + db_private_ip = var.db_ec2_private_ip db_data_volume_size = var.db_data_volume_size # 보안 그룹 규칙 diff --git a/environment/prod/variables.tf b/environment/prod/variables.tf index f300e67..bc8ec26 100644 --- a/environment/prod/variables.tf +++ b/environment/prod/variables.tf @@ -33,6 +33,11 @@ variable "db_ec2_subnet_id" { type = string } +variable "db_ec2_private_ip" { + description = "DB EC2에 고정할 Private IP (db_ec2_subnet_id 의 CIDR 안에 있어야 합니다)" + type = string +} + variable "db_data_volume_size" { description = "DB EC2 MySQL data volume 크기 (GiB)" type = number diff --git a/modules/app_stack/db_ec2.tf b/modules/app_stack/db_ec2.tf index c575e86..fbfccb4 100644 --- a/modules/app_stack/db_ec2.tf +++ b/modules/app_stack/db_ec2.tf @@ -44,6 +44,8 @@ resource "aws_instance" "db_server" { ami = var.db_ami_id instance_type = var.db_instance_type subnet_id = var.db_subnet_id + # 인스턴스를 교체해도 Parameter Store 의 datasource 주소와 API 서버 설정을 그대로 쓰도록 주소를 고정합니다. + private_ip = var.db_private_ip vpc_security_group_ids = [ aws_security_group.db_ec2_sg[count.index].id, diff --git a/modules/app_stack/variables.tf b/modules/app_stack/variables.tf index 890b234..647d3e7 100644 --- a/modules/app_stack/variables.tf +++ b/modules/app_stack/variables.tf @@ -36,6 +36,12 @@ variable "db_subnet_id" { default = null } +variable "db_private_ip" { + description = "DB EC2에 고정할 Private IP. 인스턴스를 교체해도 같은 주소를 유지해 datasource 설정을 바꾸지 않기 위해 사용합니다" + type = string + default = null +} + variable "db_data_volume_size" { description = "DB EC2 MySQL data volume 크기 (GiB)" type = number From 6b040fee9b799759895384c423aedbe8a3341c31 Mon Sep 17 00:00:00 2001 From: Hexeong <123macanic@naver.com> Date: Thu, 8 Oct 2026 17:41:43 +0900 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20secrets=20=EC=97=90=20DB=20EC2=20p?= =?UTF-8?q?rivate=20IP=20=EA=B0=92=EC=9D=84=20=EB=B0=98=EC=98=81=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- config/secrets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/secrets b/config/secrets index cbceeaa..86d5235 160000 --- a/config/secrets +++ b/config/secrets @@ -1 +1 @@ -Subproject commit cbceeaaba7de5fa1c944732d2223759fe4a44d2a +Subproject commit 86d5235eec346b56210117b54ffa79590383d579