From 2373267cc2008859db56c9b6ddd73f44b4fedc6b Mon Sep 17 00:00:00 2001 From: Hexeong <123macanic@naver.com> Date: Fri, 10 Jul 2026 14:21:31 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20DB=20EC2=EC=9D=98=20DB=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EC=83=9D=EC=84=B1=20=EB=B0=8F=20=EC=9D=B8=ED=94=84?= =?UTF-8?q?=EB=9D=BC=EA=B0=80=20=EB=B0=94=EB=9D=BC=EB=B3=B4=EB=8A=94=20dat?= =?UTF-8?q?asource=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/terraform-apply.yml | 15 ++++++++------- .github/workflows/terraform-plan.yml | 16 ++++++++-------- modules/app_stack/db_ec2.tf | 5 ++++- modules/app_stack/rds.tf | 9 ++++++--- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/.github/workflows/terraform-apply.yml b/.github/workflows/terraform-apply.yml index 2087f98..c1026b3 100644 --- a/.github/workflows/terraform-apply.yml +++ b/.github/workflows/terraform-apply.yml @@ -135,7 +135,7 @@ jobs: sudo dpkg -i /tmp/session-manager-plugin.deb echo "/usr/local/sessionmanagerplugin/bin" >> $GITHUB_PATH /usr/local/sessionmanagerplugin/bin/session-manager-plugin --version - - name: Start SSM Tunnel to RDS + - name: Start SSM Tunnel to DB EC2 run: | echo "=== session-manager-plugin 진단 ===" which session-manager-plugin || echo "NOT IN PATH" @@ -147,25 +147,26 @@ jobs: --query 'Reservations[0].Instances[0].InstanceId' \ --output text) - RDS_HOST=$(aws rds describe-db-instances \ - --query 'DBInstances[?contains(DBInstanceIdentifier, `prod`)].Endpoint.Address | [0]' \ + DB_EC2_HOST=$(aws ec2 describe-instances \ + --filters "Name=tag:Name,Values=solid-connection-db-mysql-prod" "Name=instance-state-name,Values=running" \ + --query 'Reservations[0].Instances[0].PrivateIpAddress' \ --output text) if [ -z "$EC2_ID" ] || [ "$EC2_ID" = "None" ]; then echo "::error::prod EC2 인스턴스를 찾을 수 없습니다" exit 1 fi - if [ -z "$RDS_HOST" ] || [ "$RDS_HOST" = "None" ]; then - echo "::error::prod RDS 엔드포인트를 찾을 수 없습니다" + if [ -z "$DB_EC2_HOST" ] || [ "$DB_EC2_HOST" = "None" ]; then + echo "::error::prod DB EC2 private IP를 찾을 수 없습니다" exit 1 fi - echo "Tunneling via $EC2_ID -> $RDS_HOST:3306" + echo "Tunneling via $EC2_ID -> $DB_EC2_HOST:3306" aws ssm start-session \ --target "$EC2_ID" \ --document-name AWS-StartPortForwardingSessionToRemoteHost \ - --parameters "{\"host\":[\"$RDS_HOST\"],\"portNumber\":[\"3306\"],\"localPortNumber\":[\"3306\"]}" & + --parameters "{\"host\":[\"$DB_EC2_HOST\"],\"portNumber\":[\"3306\"],\"localPortNumber\":[\"3306\"]}" & SSM_PID=$! echo "SSM_PID=$SSM_PID" >> $GITHUB_ENV diff --git a/.github/workflows/terraform-plan.yml b/.github/workflows/terraform-plan.yml index af5b416..40a2a7a 100644 --- a/.github/workflows/terraform-plan.yml +++ b/.github/workflows/terraform-plan.yml @@ -202,7 +202,7 @@ jobs: # 이후 모든 스텝의 PATH 맨 앞에 신규 설치 경로 추가 echo "/usr/local/sessionmanagerplugin/bin" >> $GITHUB_PATH /usr/local/sessionmanagerplugin/bin/session-manager-plugin --version - - name: Start SSM Tunnel to RDS + - name: Start SSM Tunnel to DB EC2 run: | echo "=== session-manager-plugin 진단 ===" which session-manager-plugin || echo "NOT IN PATH" @@ -214,25 +214,26 @@ jobs: --query 'Reservations[0].Instances[0].InstanceId' \ --output text) - RDS_HOST=$(aws rds describe-db-instances \ - --query 'DBInstances[?contains(DBInstanceIdentifier, `prod`)].Endpoint.Address | [0]' \ + DB_EC2_HOST=$(aws ec2 describe-instances \ + --filters "Name=tag:Name,Values=solid-connection-db-mysql-prod" "Name=instance-state-name,Values=running" \ + --query 'Reservations[0].Instances[0].PrivateIpAddress' \ --output text) if [ -z "$EC2_ID" ] || [ "$EC2_ID" = "None" ]; then echo "::error::prod EC2 인스턴스를 찾을 수 없습니다" exit 1 fi - if [ -z "$RDS_HOST" ] || [ "$RDS_HOST" = "None" ]; then - echo "::error::prod RDS 엔드포인트를 찾을 수 없습니다" + if [ -z "$DB_EC2_HOST" ] || [ "$DB_EC2_HOST" = "None" ]; then + echo "::error::prod DB EC2 private IP를 찾을 수 없습니다" exit 1 fi - echo "Tunneling via $EC2_ID -> $RDS_HOST:3306" + echo "Tunneling via $EC2_ID -> $DB_EC2_HOST:3306" aws ssm start-session \ --target "$EC2_ID" \ --document-name AWS-StartPortForwardingSessionToRemoteHost \ - --parameters "{\"host\":[\"$RDS_HOST\"],\"portNumber\":[\"3306\"],\"localPortNumber\":[\"3306\"]}" & + --parameters "{\"host\":[\"$DB_EC2_HOST\"],\"portNumber\":[\"3306\"],\"localPortNumber\":[\"3306\"]}" & SSM_PID=$! echo "SSM_PID=$SSM_PID" >> $GITHUB_ENV @@ -433,4 +434,3 @@ jobs: - name: Plan Status Check if: steps.plan.outputs.exitcode == '1' run: exit 1 - diff --git a/modules/app_stack/db_ec2.tf b/modules/app_stack/db_ec2.tf index deed39f..00202e2 100644 --- a/modules/app_stack/db_ec2.tf +++ b/modules/app_stack/db_ec2.tf @@ -69,11 +69,14 @@ resource "aws_instance" "db_server" { Name = "solid-connection-db-mysql-${var.env_name}" } - user_data_replace_on_change = true + user_data_replace_on_change = false lifecycle { ignore_changes = [ key_name, + user_data, + user_data_base64, + user_data_replace_on_change, ] } } diff --git a/modules/app_stack/rds.tf b/modules/app_stack/rds.tf index 9cda261..c9ed1d1 100644 --- a/modules/app_stack/rds.tf +++ b/modules/app_stack/rds.tf @@ -24,18 +24,21 @@ resource "aws_db_instance" "default" { # 6. MySQL 추가 유저 생성 resource "mysql_user" "users" { - for_each = var.enable_rds ? var.additional_db_users : {} + for_each = var.enable_rds || var.enable_db_ec2 ? var.additional_db_users : {} user = each.key host = "%" plaintext_password = each.value.password - depends_on = [aws_db_instance.default] + depends_on = [ + aws_db_instance.default, + aws_instance.db_server, + ] } # 7. MySQL 권한 부여 resource "mysql_grant" "user_grants" { - for_each = var.enable_rds ? var.additional_db_users : {} + for_each = var.enable_rds || var.enable_db_ec2 ? var.additional_db_users : {} user = each.key host = "%"