EB와 RDS 연결 및 환경변수 설정
많은 에러를 마주했다.
RDS를 'RDS'탭에서 만들어서 EB에 연결 할 수 있지만, 여기서는 EB 구성에서 RDS를 만들어서 연결해서 붙여보겠다.
만든 EB 왼쪽 탭 밑에 보면 "Configuration"이 있는데, 그걸 누른다.
제일 아래에 보면 "Database"가 있는데 "Edit"을 부른다.
여기서 RDS 생성 과정은 여기 링크를 참고한다.
https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/using-features.managing.db.html
그 다음 "Software"에 "Edit"을 선택한다.
환경변수 추가다.
RDS_DB_NAME - db 이름. EB에서 생성한 db의 디폴트 이름은 'ebdb'다. 본인이 만든 거 해도 된다.
RDS_USERNAME - RDS 만들 때 정한 이름.
RDS_PASSWORD - RDS 비번
RDS_PORT - sql이면 쓰면 3306
RDS_HOSTNAME - RDS의 endpoint
나머지 SPRING_JPA_DATABASE_PLATFORM과 SPRING_JPA_HIBERNATE_DDL_AUTO는 스크린샷과 같이 추가해주면 된다.
그리고 적용.
다음은 application.properites 값 설정
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql=trace
spring.datasource.url=jdbc:mysql://${RDS_HOSTNAME}:${RDS_PORT}/${RDS_DB_NAME}
spring.datasource.username=${RDS_USERNAME}
spring.datasource.password=${RDS_PASSWORD}
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
이렇게 추가해준다.
헬스 상태 에러
만약 502에러가 뜨거나 하면, health문제가 생기면 (나 같은 경우 이미 해결이 되어서 'Ok' 뜬다)
EB 왼쪽 탭 "Configuation"가서 "Load balancer"를 찾는다. 그리고 "Edit"을 눌러준다.
"Processes"를 찾아서 해당 프로세스를 클릭한 다음 "Actions"에서 "Edit"을 누른다.
여기서 "Port"는 "8080", "HTTP Code"는 "200", "Path"는 /actuator/health를 추가해준다. 그리고 확인.
그리고 build.gradle에 다음 디펜던시를 추가해준다.
implementation 'org.springframework.boot:spring-boot-starter-actuator'
아래는 저의 build.gradle이다.
plugins {
id 'org.springframework.boot' version '2.5.7'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.heart-muscle'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
jar {
enabled = false
}
이렇게 하면 헬스가 다시 "Ok"로 뜰 것이다.
Load balancer가 서버 건강을 확인하기 위해 계속 GET 요청을 날리는데, 받을 수 있는 path를 설정 해주는 것이다.
아래처럼 설정해줄 수도 있지만, 복잡해서 그냥 위에 방법을 썼다. 튜터님의 도움 받아서 해결했다. 이거 따라하다가 막히면 댓글 남겨주세요.
https://jojoldu.tistory.com/509?category=635883
----------------------------------------------------------------------------------------------------------------
* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///home/runner/work/heart-muscle-backend/heart-muscle-backend/build/reports/tests/test/index.html
깃 액션 중에 위와 같은 에러가 뜨면
name: heart-muscle-backend
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v2
with:
java-version: '8'
distribution: 'adopt'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build -x test
- name: Get current time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY-MM-DDTHH-mm-ss
utcOffset: "+09:00"
- name: Generate deployment package # (1)
run: |
mkdir -p deploy
cp build/libs/*.jar deploy/application.jar
cp Procfile deploy/Procfile
cp -r .ebextensions deploy/.ebextensions
cp -r .platform deploy/.platform
cd deploy && zip -r deploy.zip .
- name: Deploy to EB # (2)
uses: einaregilsson/beanstalk-deploy@v19
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: heart-muscle
environment_name: Heartmuscle-env
version_label: github-action-${{steps.current-time.outputs.formattedTime}}
region: ap-northeast-2
deployment_package: deploy/deploy.zip
- name: Build with Gradle
run: ./gradlew build -x test
"./gradlew build -x test"로 설정해준다.
build하는데 "test"는 건너뛴다는 이야기다.