티스토리 뷰

AWS

[AWS EC2] EC2 간 통신하기

DevBee 2021. 11. 8. 15:58

이전 글들에서 EC2를 생성하고 하나의 EC2에 프론트엔드를 실행하는 Nginx 서버와 백엔드를 실행하는 Node 서버를 같이 운영했었다. 이번 글에서는 프론트엔드 서비스와 백엔드 서비스를 각각 다른 EC2에 배포하고 서로 간 어떻게 통신을 할 수 있는지 알아보겠다.

 

기존 EC2에 그대로 Nginx(프론트엔드)를 실행하고 새로운 EC2를 생성하여 백엔드 소스를 옮겨 실행하는 방법으로 테스트를 진행하겠다.

 

먼저, 두 개의 EC2가 서로 같은 보안 그룹(Security Group)에 속한 경우를 살펴보겠다.

 

1. 새로운 EC2 인스턴스 생성

인스턴스 생성 시 중요한 것은 보안그룹을 기존 EC2와 같게 설정하는 것이다.

또한, 새로운 EC2의 특성상 기본적을 Public IP가 필요하지 않지만 외부에서 ssh로 인스턴스에 접근할 것이기 때문에 편의상 Public IP를 활성화하였다.

 

EC2 생성 시 기존 사용하던 보안 그룹을 선택

 

2. SSH로 새로 생성한 EC2 인스턴스에 접속

기존 pem 파일을 그대로 사용하는 경우 권한 변경이 필요 없지만 새로운 pem 파일을 생성했다면 아래 명령으로 접근 권한을 변경한다.

 

$ chmod 600 pem파일이름.pem

 

키 접근 권한 변경 후 아래 명령으로 EC2에 접속한다. Amazon Linux 2 또는 Amazon Linux AMI의 경우 사용자 이름은 ec2-user 다.

 

$ ssh -i pem경로 사용자이름@ec2의_퍼블릭_IPv4_주소_또는_도메인

 

3. 필요한 패키지 설정 및 백엔드 프로젝트 다운로드, 실행

Git과 yarn을 설치한다. 이때 node도 같이 설치한다.

 

$ sudo yum update
$ sudo yum install git

$ curl -o- -L https://yarnpkg.com/install.sh | bash
$ source ~/.bashrc
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
$ . ~/.nvm/nvm.sh
$ nvm install --lts

 

아래 명령어로 프로젝트를 다운로드 받고 필요한 dependency를 설치 후 실행한다. node server 명령어에서 server는 백엔드 프로젝트의 시작 실행 파일명이 server.js이기 때문에 사용한 것으로 각자의 실행 파일명을 사용하면 된다.

 

$ git clone REPOSITORY_URL
$ cd 프로젝트_디렉토리
$ yarn install
$ node server

 

4. 기존 EC2에서 백엔드 프로젝트 삭제 및 Nginx 설정 변경

기존 EC2에 ssh로 접속하여 아래 명령어를 통해 다운로드 받았던 백엔드 프로젝트를 삭제한다.

 

$ sudo rm -f 백엔드_프로젝트_디렉토리

 

기존에 사용했던 Nginx 설정 파일을 연다.

 

$ cd /etc/nginx/sites-available
$ sudo vi 설정파일명.conf

 

설정 파일에서 기존 /api 로 들어오는 요청을 localhost:9090으로 넘겼다면 이번에는 새로 만든 EC2의 Private IP의 9090 포트로 전달하도록 수정한다.

 

server {
        listen 80;

        location / {
                root /home/ec2-user/***/build;
                index index.html index.htm;
                try_files $uri $uri/ /index.html;
        }

        # node api reverse proxy
        location /api/ {
                proxy_pass http://새로운_EC2_Private_IP:9090/api/;
        }
}

 

파일을 저장하고 symlink를 생성한다. 기존 파일이 있기 때문에 먼저 sites-enabled 디렉토리의 파일을 삭제한 뒤 아래 명령을 실행한다.

 

$ sudo ln -s /etc/nginx/sites-available/#####.conf /etc/nginx/sites-enabled/#####.conf

 

아래 명령으로 Nginx를 실행한다.

 

$ sudo systemctl start nginx

 

5. 보안 그룹의 인바운드 규칙 수정

보안 그룹 자기 자신을 self로 인바운드 규칙에 추가한다.

 

브라우저에서 기존 EC2 인스턴스의 IP 주소로 접속하면 원래대로 서비스가 정상 동작하는 것을 확인할 수 있다. 데이터를 조회, 저장, 삭제하는 기능 또한 이상 없이 동작한다.

 

현재 구성을 그림으로 살펴보면 다음과 같다.

 

 

다음으로 두 개의 EC2가 다른 보안그룹에 있는 경우 통신 방법을 살펴보겠다.

 

1. 새로운 인스턴스를 위한 보안 그룹 생성

새로운 보안 그룹 생성 시 인바운드 규칙에 원래 보안 그룹(프론트엔드 서비스를 운영하고 있는 EC2의 보안그룹)을 추가한다.

 

2. 새로 만든 EC2의 보안 그룹 변경

EC2 검색 후 이전에 만든 새로운 EC2(백엔드 서비스가 배포된 인스턴스)를 선택하고 "작업 > 보안 > 보안 그룹 변경"을 선택하여 위에서 만든 새로운 보안 그룹으로 변경한다.

 

 

3. 기존 EC2의 보안 그룹의 인바운드 규칙 수정

기존 EC2(프론트엔드 서비스가 실행되고 있는 인스턴스)의 보안 그룹에 인바운드 규칙으로 새로 생성한 보안 그룹의 모든 트래픽을 추가한다.

 

4. 기존 RDS의 보안 그룹의 인바운드 규칙 수정

기존 RDS의 보안 그룹 인바운드 규칙 또한 새로 생성한 보안 그룹으로 변경한다.

 

 

브라우저에서 기존 EC2(프론트엔드 서비스가 실행되고 있는 인스턴스)의 IP를 입력하고 제대로 기능이 동작하는지 확인한다.

 

지금까지 구성된 내용을 그림으로 살펴보면 다음과 같다.

 


프론트엔드 서비스의 경우 위와 같이 별도의 웹서버를 띄울 수도 있지만 S3에 파일을 올리는 것만으로도 서비스를 할 수 있다. 다음 글에서는 프론트엔드 서비스를 S3에 올려 운영하는 방법을 살펴볼 예정이다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함