AWS/aws CICD-metacoding

배포v5 엘라스틱빈스톡+RDS -기본 설정

MDanderson 2024. 8. 20. 15:45

시작전 준비사항

엘라스틱빈스톡 환경종료, 애플리케이션종료

RDS종료

EC2, elastic IP 삭제

Elastic Block Store 스냅샷 삭제

보안그룹 default보안그룹만 남기고 삭제 (B보안그룹에 C보안그룹이 의존하게되면 B가 삭제가안됨. C부터 삭제해야함)

리전을 서울로 맞추기

 

비용개념

 

엘라스틱빈스톡

EC2 - 750시간무료  2대

S3 - (파일저장소)

RDS - 750시간 무료  1대

로드밸런서 - 750시간 무료    2대 

 

v5절차

 

기존 v3,v4 는  window개발환경에서 테스트,빌드하고  리눅스 환경에서 실행하는  위험이있다.

그래서 v5에서 github에 배포하면 CI 서버에서 테스트하고 빌드하여 실행파일 생성한다.

단 CI서버는 aws환경과 동일해야한다. 

이대로 AWS에 배포하면 CI에서 실행했으면 무조건 AWS에서도 실행됨

CI에서 AWS로 배포하는게 CD라함

 

aws웹사이트에 로그인하지않고 CI서버에서 AWS에 배포하려면  access key 가 필요함

 

 

IAM 개념

 

사용자  : 직원

정책 : 권한의 모임 

그룹 : 사용자의 모임

역할 : 사용자한테 주는게 아닌 권한들의모임 (서비스의 역할)

 

 

 

 

정확한건 아래와 같이 보안그룹을 2개 사용해야하는데 편의상 1개만 사용한다

 

 

1.보안그룹 생성 

 

 

2.RDS생성

-  외부에서(내 로컬) 접속 가능하게 퍼블릭액세스 예 선택, 보안그룹 위에서 만든걸로 설정

-heidiSQL로 접속후

 

CREATE DATABASE metadb;
USE metadb;

-- 마리아 db는 대소문자 구분함 
CREATE TABLE Book(
 id BIGINT AUTO_INCREMENT PRIMARY KEY,
 title VARCHAR(255),
 content VARCHAR(255),
 author VARCHAR(255)
 
);

SHOW VARIABLES LIKE 'c%';

ALTER DATABASE metadb CHARACTER SET= 'utf8mb4' COLLATE='utf8mb4_general_ci';

SELECT * FROM Book;

SELECT @time_zone, NOW();

SET GLOBAL time_zone='Asia/Seoul';

 

타임존셋팅이 오류날텐데 RDS에서 파라미터그룹에서 그룹생성 눌러주고 그룹 생성.

파라미터 편집 눌러서 zone검색  Asia/Seoul입력 후

db인스턴스로 와서 수정 눌러서  파라미터그룹을 위에서 생성한 그룹으로 변경하고 수정 시켜줌

db인스턴스 재부팅 해야 적용됨

 

3.엘라스틱빈스톡 생성

단일인스턴스가 아닌 사용자 지정 구성으로 생성

환경속성추가

RDS_HOSTNAME <RDS의 엔드포인트>
RDS_PORT

RDS_DB_NAME

RDS_USERNAME

RDS_PASSWORD

입력 (이 부분은 스프링application.yml과 맞춰줘야함  스프링에선 _를  .으로 대체 가능 ) 

 

로드밸런서 설정

오토스케일링 - ec2 최소 2대 최대4대로 설정

..

로드밸런서가 리스너설정에서 80포트를 리스닝하고  프로세스설정에서 80포트를 라우팅 하게 설정했으니

리스너가8080포트를 리스닝해도 ec2로 8080포트요청은 전달이 안된다.

 

 

롤링업데이트및 배포에서 배포방식- 변경 불가로 설정

 


 

 

 

 

실제에선 두 ec2의 보안그룹과 rds의 보안그룹을 따로 설정되며

rds의 보안그룹에서 3306포트를 ec2의 보안그룹이 접근 가능하게 허용설정 해준다

그리고 rds의 보안그룹에서 80포트 여는것은 삭제해줌

 

로드밸런서는 DNS주소만 보이는데 ,    ip주소가 있는데 컨트롤 불가능 (주기적으로 변경됨)

ip주소는 브라우저에서 f12- 네트워크 창에서 확인가능하다.

 

nginx서버를 ALB앞에 구성해서 elastic ip를 부여하는 방법도있는데 복잡함 그래서 NLB를 ALB앞에 둘것이다. 이건 고정ip를 받을 수 있어서 도메인 입혀서 외부 클라이언트가 접속가능

 

브라우저에서 EC2의 ip주소로 다이렉트 접속이 불가능하다 왜냐하면 ec2의 보안그룹이 ALB의 보안그룹만 80포트를 허용해놨기때문