⚙️ DevOps

[AWS/EC2] AWS EC2 + RDS + S3 생성하고 배포하기 #1 EC2

별이⭐ 2024. 10. 21. 12:34
EC2 + RDS + S3 + GitHub Actions를 이용해서 배포 및 CI/CD를 하기 위해 하나씩 정리해보자✏️

 

EC2 인스턴스 생성 및 보안 그룹 연결

인스턴스 이름 및 AMI 선택

 

EC2에 접속할 키 페어 생성

키 페어 생성
키 페어 선택

 

네트워크 설정 및 스토리지 구성

 

보안 그룹 생성 및 인바운드 규칙 설정

 

인스턴스에 생성한 보안 그룹 연결

 

EC2에 연결(접속)

AWS 웹 페이지의 EC2 인스턴스를 선택하고 연결을 누르면 명령어가 적힌 화면이 나타난다!

git bash가 설치되어 있으면, git bash를 열고 pem key를 저장해둔 폴더로 가서 예: 에 적힌 명령어를 실행하면 ec2에 연결된다.

 

EC2 설정

스왑메모리 설정

💡스왑 메모리
RAM이 부족할 경우, 디스크의 일정공간을 RAM처럼 사용하는 것
속도면에서는 실제 메모리가 아닌 하드디스크를 이용하는 것이기 때문에 속도는 떨어진다.

 

프리티어로 사용하기 때문에 RAM이 1GB밖에 안 된다. 사용하다 보면 메모리 부족 때문에 서버가 뻗는 현상이 자주 발생한다.

EC2에 docker도 설치할 것이기 때문에 메모리 부족 현상을 방지하기 위해 EC2 서버에 스왑 메모리를 설정했다.

 

1. 스왑 파일 할당

dd 명령어를 통해 16개의 128MB 크기의 블록으로 스왑 파일을 할당. /swapfile 이라는 이름으로 2GB 크기의 스왑 파일을 생성한다.

sudo dd if=/dev/zero of=/swapfile bs=128M count=16

2. 스왑 파일 권한 설정

스왑 파일의 읽기 및 쓰기 권한을 600(rw-/---/---)으로 설정한다.

💡600으로 설정? 리눅스에서 파일에 대해 owner/group/others가 갖는 read, write, execute 권한을 숫자로 나타내는데 r=4, w=2, x=1 으로 매핑함.

600을 6/0/0으로 나눠서 보면, owner/group/others가 갖는 권한이 되는데, owner=4+2=6/group=0/others=0이니까 owner에게만 read와 write 권한이 있는 것.

sudo chmod 600 /swapfile

3. 스왑 영역 생성

mkswap 명령어를 사용해 /swapfile을 스왑 영역으로 포맷해 해당 파일을 스왑 공간으로 사용할 수 있게 한다.

sudo mkswap /swapfile

4. 스왑 파일 활성화

swapon 명령어를 사용해 스왑 파일을 활성화한다.

sudo swapon /swapfile

5. 스왑 상태 확인

정상적으로 활성화 되었는지 확인한다.

sudo swapon -s

6. 부팅 시 자동으로 스왑 파일을 활성화하도록 설정

/etc/fstab 파일을 편집해서 스왑 파일을 추가하고 저장하면 완료!

sudo vi /etc/fstab

/swapfile swap swap defaults 0 0

 

타임존 변경

date

date 명령어를 입력하면 타임존이 UTC로 되어있는 것을 확인할 수 있다.

sudo timedatectl set-timezone Asia/Seoul

위 명령어를 입력해 타임존을 KST로 변경했다.

 

Java 21 설치하기

https://docs.aws.amazon.com/ko_kr/corretto/latest/corretto-21-ug/amazon-linux-install.html

위 문서 참고해서 설치하고 java -version으로 설치 확인해보기!

sudo yum install java-21-amazon-corretto-headless

java -version

 

Git 설치 후 clone 하기

1. git 설치

sudo yum install git

2. git repository clone 하기

난 EC2에 app 폴더를 만들어서 app 폴더 내에 clone 해왔다.

mkdir app
cd app
git clone https://github.com/~~.git

 

EC2 내부 프로젝트 파일에 application.yml 작성

yml 파일에 비밀키들이 있어서 깃허브에 올리지 않았으니 직접 작성해야한다.

프로젝트 폴더 내부로 들어가서 생성하고 yml 파일 그대로 복사해서 붙여넣고 저장하자!

cd ~
cd app/프로젝트명
cd src/main/resources
vi application.yml

 

 

EC2 보안 그룹 인바운드 규칙 편집

⭐ application.yml에 작성한 포트 번호들을 다 열어줘야한다!

 

 

Docker 설치하고 Docker Compose로 컨테이너 띄우기 (필요 시 설치)

Amazon Linux 2에 설치하는 방법이다!

Docker 설치하기

1. yum 업데이트 후 docker 설치

sudo yum update -y
sudo yum install docker -y

2. docker 버전 확인

docker -v

3. docker 실행

sudo service docker start

4. docker 그룹 생성 후 사용자 추가

sudo 없이 docker 실행할 수 있게 해준다.

sudo groupadd docker

sudo usermod -aG docker $USER

5. 리눅스 재부팅 후 테스트 (exit 하고 재연결)

docker container run hello-world

 

Docker Compose 설치하기

1. Docker Compose 설치

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2. 실행 권한 부여

sudo chmod +x /usr/local/bin/docker-compose

3. 설치 확인

docker-compose --version

아래와 같은 출력이 나오면 설치가 완료된 것!

docker-compose version 1.29.2, build 5becea4c

❗만약 에러 뜨면서 안 되면

[300762] Error loading Python lib '/tmp/_MEImKEyQN/libpython3.7m.so.1.0': dlopen: libcrypt.so.1: cannot open shared object file: No such file or directory

아래 명령어 입력 후 다시 version 확인해보기

sudo dnf install libxcrypt-compat

 

docker-compose.yml 작성하기

docker 폴더를 만들고 내부에 redis 폴더를 만들어서 redis 폴더 내부에 컴포즈 파일을 작성했다.

cd ~
mkdir docker
cd docker
mkdir redis
cd redis
vi docker-compose.yml

docker-compose.yml

services:
  redis:
    image: redis:latest
    container_name: redis
    command: ["redis-server", "--requirepass", "1234", "--appendonly", "yes"]
    ports:
      - "6379:6379"
    volumes:
      - ./redis-data:/data

volumes:
  redis-data:
docker-compose 실행
docker-compose up -d
컨테이너 확인
docker ps

 

 

일단 이렇게 EC2 초기 설정은 끝!
#2 게시글에서는 RDS 생성과 설정을 알아보자.