Skip to content

Commit 77fd574

Browse files
authored
Merge pull request #145 from YAPP-Github/fix/cron
[Fix] DB 백업 전략 추가 및 컨테이너 마운트 위치 변경
2 parents c98786b + c6e9ffc commit 77fd574

File tree

7 files changed

+65
-16
lines changed

7 files changed

+65
-16
lines changed

src/main/resources/logback-spring.xml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<property name="ROLLING_PATTERN"
99
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] [%X{requestId}] %logger{5} - %msg %n"/>
1010

11-
<property name="LOG_DIR" value="${LOG_DIR:-${user.home}/logs/eatda}"/>
11+
<property name="LOG_DIR" value="/eatda/dev/logs"/>
1212
<property name="FILE_PATH_NAME" value="${LOG_DIR}/eatda.log"/>
1313
<property name="LOG_NAME_PATTERN" value="${LOG_DIR}/eatda-%d{yyyy-MM-dd}.%i.log"/>
1414
<property name="MAX_FILE_SIZE" value="10MB"/>
@@ -22,19 +22,25 @@
2222
</appender>
2323

2424
<appender name="ROLLING_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
25+
<file>${FILE_PATH_NAME}</file>
2526
<encoder>
2627
<pattern>${ROLLING_PATTERN}</pattern>
2728
</encoder>
28-
<file>${FILE_PATH_NAME}</file>
2929
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
3030
<fileNamePattern>${LOG_NAME_PATTERN}</fileNamePattern>
31-
<maxHistory>${MAX_HISTORY}</maxHistory>
3231
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
32+
<maxHistory>${MAX_HISTORY}</maxHistory>
3333
<totalSizeCap>${TOTAL_SIZE}</totalSizeCap>
3434
</rollingPolicy>
3535
</appender>
3636

37-
<springProfile name="local, dev">
37+
<springProfile name="local">
38+
<root level="INFO">
39+
<appender-ref ref="CONSOLE"/>
40+
</root>
41+
</springProfile>
42+
43+
<springProfile name="dev">
3844
<root level="INFO">
3945
<appender-ref ref="CONSOLE"/>
4046
<appender-ref ref="ROLLING_LOG_FILE"/>

terraform/dev/s3/main.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ resource "aws_s3_object" "app-backup-log-script" {
1616
content_type = "text/x-sh"
1717
}
1818

19+
resource "aws_s3_object" "mysql-backup-script" {
20+
bucket = aws_s3_bucket.dev.bucket
21+
key = "scripts/mysql-backup.sh"
22+
source = "${path.module}/scripts/mysql-backup.sh"
23+
etag = filemd5("${path.module}/scripts/mysql-backup.sh")
24+
content_type = "text/x-sh"
25+
}
26+
1927
resource "aws_s3_bucket_public_access_block" "dev" {
2028
bucket = aws_s3_bucket.dev.id
2129

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/bin/bash
2+
set -e
3+
4+
BACKUP_DIR="/home/ec2-user/eatda/mysql"
5+
S3_BUCKET="s3://eatda-storage-dev/backup/mysql/"
6+
TIMESTAMP=$(date +%Y-%m-%d-%H%M%S)
7+
ARCHIVE_PATH="${BACKUP_DIR}/mysql-backup-${TIMESTAMP}.sql"
8+
9+
MYSQL_URL=$(aws ssm get-parameter --name "/dev/MYSQL_URL" --with-decryption --query "Parameter.Value" --output text)
10+
MYSQL_USER=$(aws ssm get-parameter --name "/dev/MYSQL_USER_NAME" --with-decryption --query "Parameter.Value" --output text)
11+
MYSQL_PASSWORD=$(aws ssm get-parameter --name "/dev/MYSQL_PASSWORD" --with-decryption --query "Parameter.Value" --output text)
12+
13+
HOST=$(echo "$MYSQL_URL" | sed -E 's|jdbc:mysql://([^:/]+):([0-9]+)/([^?]+).*|\1|')
14+
PORT=$(echo "$MYSQL_URL" | sed -E 's|jdbc:mysql://([^:/]+):([0-9]+)/([^?]+).*|\2|')
15+
DB_NAME=$(echo "$MYSQL_URL" | sed -E 's|jdbc:mysql://([^:/]+):([0-9]+)/([^?]+).*|\3|')
16+
17+
if mysqldump -h "$HOST" -P "$PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" "$DB_NAME" > "$ARCHIVE_PATH"; then
18+
echo "[INFO] MySQL backup successful: $ARCHIVE_PATH"
19+
20+
if aws s3 cp "$ARCHIVE_PATH" "$S3_BUCKET"; then
21+
echo "[INFO] Upload successful: $ARCHIVE_PATH -> $S3_BUCKET"
22+
rm "$ARCHIVE_PATH"
23+
else
24+
echo "[ERROR] Failed to upload backup to S3." >&2
25+
exit 1
26+
fi
27+
28+
else
29+
echo "[ERROR] mysqldump failed." >&2
30+
exit 1
31+
fi

terraform/dev/scripts/user-data.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,16 @@ echo '/swapfile none swap sw 0 0' >> /etc/fstab
1212
aws s3 cp s3://eatda-storage-dev/scripts/app-backup-dev-logs.sh /home/ec2-user/logs/eatda/app-backup-dev-logs.sh
1313
chmod +x /home/ec2-user/logs/eatda/app-backup-dev-logs.sh
1414

15+
aws s3 cp s3://eatda-storage-dev/scripts/mysql-backup.sh /home/ec2-user/eatda/mysql/mysql-backup.sh
16+
chmod +x /home/ec2-user/eatda/mysql/mysql-backup.sh
17+
1518
yum install -y cronie
1619
systemctl enable crond
1720
systemctl start crond
1821

22+
until systemctl is-active --quiet crond; do
23+
sleep 1
24+
done
25+
1926
(crontab -l 2>/dev/null; echo "0 0 * * 0 /home/ec2-user/logs/eatda/app-backup-dev-logs.sh >> /var/log/app-backup.log 2>&1") | crontab -
27+
(crontab -l 2>/dev/null; echo "30 0 * * 0 /home/ec2-user/eatda/mysql/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1") | crontab -

terraform/prod/locals.tf

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,9 @@ locals {
5454
role = "prod"
5555
iam_instance_profile = "ec2-to-ecs"
5656
key_name = "eatda-ec2-prod-key"
57-
user_data = <<-EOF
58-
#!/bin/bash
59-
echo ECS_CLUSTER=prod-cluster >> /etc/ecs/ecs.config
60-
61-
fallocate -l 2G /swapfile
62-
chmod 600 /swapfile
63-
mkswap /swapfile
64-
swapon /swapfile
65-
66-
echo '/swapfile none swap sw 0 0' >> /etc/fstab
67-
EOF
57+
user_data = templatefile("${path.module}/scripts/user-data.sh", {
58+
ecs_cluster_name = "prod-cluster"
59+
})
6860
}
6961
}
7062

terraform/prod/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ module "rds" {
4343
password = data.aws_ssm_parameter.rds_password.value
4444
vpc_security_group_ids = local.vpc_security_group_ids
4545
multi_az = false
46-
backup_retention_period = 0
46+
backup_retention_period = 7
4747
storage_encrypted = true
4848
tags = local.common_tags
4949
}

terraform/prod/scripts/user-data.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,8 @@ yum install -y cronie
1616
systemctl enable crond
1717
systemctl start crond
1818

19+
until systemctl is-active --quiet crond; do
20+
sleep 1
21+
done
22+
1923
(crontab -l 2>/dev/null; echo "0 0 * * 0 /home/ec2-user/logs/eatda/app-backup-prod-logs.sh >> /var/log/app-backup.log 2>&1") | crontab -

0 commit comments

Comments
 (0)