본문 바로가기
Study/AWS

AWS(4)

by 왕방개 2024. 4. 15.

**EC2에 배포한 애플리케이션에 Load Balancer 와 도메인 및 HTTPS 인증서 열기

=>Load Balancer 와 Domian그리고 HTTP 인증서는 배포된 Application이라면 전부 연결할 수 있음

 

1.EC2에 Django 배포하기

1)Django Project 생성

=>가상 환경 생성: 애플리케이션을 다른 곳에 배포할 때 필요한 패키지만 가져가서 실행하기 위해서

-배포할 애플리케이션을 만들 때는 필수

 

-python3 -m venv ./myvenv #윈도우즈에서는 python3 대신에 python,pip

-myvenv/Scripts/activate

 

=>필요한 패키지 설치

pip install django

 

=>코딩

-장고프로젝트 생성:django-admin startproject ec2django

-

-settings.py파일의 ALLOWED_HOSTS부분을 ['*'] 으로 수정

 

=>실행해서 테스트

-python manage.py migrate

 

-python manage.py runserver 0.0.0.0:80

 

=>사용한 패키지 목록을 텍스트 파일에 내보내기

- pip freeze > requirements.txt

 

=>git 에 push: EC2는 Ubuntu Linux 운영체제로 생성할 것인데 Linux 에서 프로젝트를 만들어서 코딩하는 것은 쉽지 않아서 Windows에서 작업하고 clone을 받아서 사용하기 위함

 

-github에 접속해서 repository 생성

-로컬에서 코드를 commit

git init

 

git add .

 

git commit -m "

 

-로컬의 프로젝트와 repository 연결한 후 push

git remote add 이름 github레포지토리이름url  #처음 만들 떄는 이름을 일반적으로 origin으로 설정

git push origin main #코드 업로드, origin은 이름이고 main은 branch 이름

 

-코드가 업로드가 안되는 경우

  1)현재 branch가 main이 아닌 경우: git hub의 기본 branch 는 main인데 첫 브랜치 이름은 master 로 나오는 경우가 종종 있음 => git branc -m master main으로 해도됨 git checkout -b main

 

  2)인증이 되지 않은 경우: 인증을 여러 번 수행해서 현재 기본 인증이 맞지 않는 경우

먼저 git hub에서 토큰을 하나 발급 받고 난 후 아래 명령을 수행하고 첫 push를 할 때 입력

git remote set-url origin https://유저이름@github.com/유저이름/레포지이름.git  

 

  3)github의 commit 과 내 commit 이 맞지 않은 경우

레포지토리 생성시 readme 파일을 생성했거나 다른 곳에서 push를 한 경우인데 이 경우는 먼저 pull 

 

2)EC2에 python과 git 을 설치하고 push 된 코드를 clone해서 실행

=>인스턴스를 생성하는데 되도록이면 22,80.443 을 공개한 형태로 생성

=>접속방법

-원격 콘솔에 접속

-원격으로 pem과 함께 연결

 

=>서버로 사용할 목적이라면 Elastic IP를 할당받아서 연결 해주어야 합니다.

기본적으로 배정된 Public IP 주소는 재부팅 되면 변경될 수 있습니다.

하지만 이경우는 CI/CD 에서 선호하는 방식은 아님

코드를 자주 수정해야 할때는 불편함을 겪음

 

=>git 설치

sudo apt-get update

sudo apt-get install git -y

 

-코드 클론

git clone 레포지토리url

 

-python과 pip 설치

sudo apt-get update python3

 

sudo apt-get install pip3

 

-패키지 설치: pip으로 설치하면 나중에 패키지가 설치되지 않았다고 나옴

sudo pip3 install -r requirements.txt

 

-실행

sudo python3 manage.py runserver 0.0.0.0:80

 

-실행 확인

다른 컴퓨터의 브라우저에서 http://elasticIP 입력

 

2.domain 연결

1)Route53

=>도메인을 발급하고 관리해주는 서비스

=>최근의 Web Service 는 IP 기반이 아니고 도메인 기반이며 https 서비스의 보안 문제 떄문에 https 를 사용하는데 https의 인증서는 IP를 가지고는 발급받을 수 없음

=>도메인은 Route 53 이외의 곳에서 발급받은 것도 사용 가능

Route 53에서는 발급 받을 수 있는 도메인이 한계가 있습니다

 

2)도메인과 EC2 애플리케이션 연결

=>Route 53  서비스에서 호스팅 영역을 클릭해서 도메인이 보이는지 확인

=>레코드 생성 클릭

-도메인을 생성

-값에 EC2의 IP를 설정

=>다른 컴퓨터의 브라우저에서 연결한 레코드의 도메인을 입력해서 확인

 

3.Elastic Load Balancer

1)ELB

=>AWS 가 제공하는 Load Balancer

 

=>Load Balancer 는 집중되는 트래픽을 여러 대나 네트워크에 분배하는 장비

한 대에 집중되는 부하를 분산시키기 때문에 부하 분산 장치라고도 합니다.

 

=>웹 서버의 경우는 nginx와 같은 소프트웨어를 이용해서 구현이 가능하고 public cloud 에서 제공하는 서비스를 이용해서 구현하는 것이 가능

 

2)ELB의 종류

=>ALB

-Application Load Balancer

-요청하는 명령어의 내용을 보고 판단을 하기 때문에 URL 디렉토리 단위로 분배하는 것이 가능

-암호화 가능

-정적 IP 설정 가능

-지원 프로토콜이 HTTP와 HTTPS

 

=>NLB 

-Network Load Balancer

-정적 IP를 이용한 로드 밸런싱이 가능

-지원 프로토콜이 TCP와 TLS

 

3)Load Balancer 사용시 주의사항

=>시간 제한의 문제 발생

- 애플리케이션에서 특정 시간 내에 응답을 받지 못할 경우 504 Error를 발생 시킴

애플리케이션 서버나 데이터베이스 서버 확인

 

-60초라는 응답 시간 제한이 있으므로 대규모 애플리케이션에서는 시간 제한을 늘려줄 필요가 있음

이 경우 애플리케이션을 작은 규모로 분할해서 해결하기도 합니다

되도록이면 작은 규모로 분할해서 해결하는 것을 권장

 

 

4)EC2 인스턴스에 Load Balancer 연결

=>EC2 서비스에 instance 안에 load Balancer 찾기

 

=>들어가서 Load Balancer 클릭

-종류를 선택(ALB)

-대상 그룹 생성을 눌러서 IP나 인스턴스 선택

 

gateway는 서비스 규모가 커지면 사용해야함.

API server <=> Application server <=> Data Server 

 

애플리케이션을 만들어서 배포하면 하나의 region 에서만 배포가 되지만

 

Mappings을 선택하면 여러개 의 region에서도 배포 가능 (최소 2개이상 클릭)

 

 

=>action은 밑에 create 해서 사용하면됨

 

 

=>생성이 완료되면 Load Balancer 의 Domain Name 을 이용해서 접속이 가능

-접속이 안되는 경우 대상 그룹에 대상이 등록이 안되서 접속이 안될 수 있으므로 대상을 확인

 

Client <-> Load Balancer <-> EC2 Application

 

4.HTTPS 인증서 적용

1) SSL /TLS 

=> HTTP를 HTTPS 로 바꿔주는 인증서

 

2)HTTPS 적용

=>AWS Certificate Manager 서비스에 접속

=>인증서 요청 클릭

=>퍼블릭 인증서 요청

-도메인 이름을 설정하고 요청을 클릭

=>인증서가 만들어지면 인증서를 클릭하고 Route53 서비스 생성을 클릭

=>Elastic Load Balancer 에 인증서 등록

-로드 밸런서 상세 화면으로 이동해서 리스너 추가를 클릭

-프로토콜을 HTTPS 로 변경

-대상 그룹을 선택

-보안 리스너 설정에서 인증서를 클릭

 

5.Node Application을 EC2 에서 실행

 1)EC2 에 nodejs 설치

node 설치 및 확인
패키지 정보 업데이트
sudo apt update
GPG key 등록
sudo apt install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
저장소 등록
NODE_MAJOR=20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
패키지 정보 업데이트
sudo apt update
설치 및 확인
sudo apt install -y nodejs
node -v
 
 

2)Spring Boot Application을 EC2 에서 실행

-SpringBoot Application 생성

git clone https://github.com/itstudy001/itstuddyspringboot 

 

-JDK 설치

=>Java 는 Spring Version과 연관되므로 Spring Version을 확인하고 설치

현재는 17버전 설치하면 거의 모든 Spring Version 지원

 

sudo apt-get update

 

sudo apt install openjdk-17-jre-headless

 

java -version:자바 실행 환경 확인

javac -version: 자바 개발 환경 확인

 

 

-SpringBootApplication 빌드 및 실행

-자바 프로그램은 빌드를 먼저 합니다

빌드를 할 떄는 만들어진 프로젝트가 뭔지 알아야 하는데 최근에는 거의 gradle 만 사용합니다.

 

- linux 나 mac에서 현재 디렉토리에 있는 명령어를 실행할 때는 앞에 ./를 붙여야 합니다.
- 파일 경로를 지정할 때는 붙이지 않아도 됩니다.

 

./gradlew clean build

 

- 명령을 수행하고 나면 build/libs 디렉토리에 jar 나 war 확장자를 갖는 파일이 생성되는데 이 파일이 실행 파일입니다.

=>자바 프로그램 실행
sudo java -jar [jar 파일 경로]

=>Spring Boot Application은 별다른 설정이 없으면 8080 포트로 서비스를 시작합니다.

=>서버 구동 후 확인
다른 컴퓨터에서 IP:8080 으로 테스트 가능
- 서버가 제대로 구동 중인데 404 에러가 발생하면 보안 그룹에서 8080 포트에 대한 접속을 허용하지 않기 때문일 수 있습니다.
- 보안 규칙의 인바운드 편집을 눌러서 8080 포트를 추가해주면 됩니다.

 

'Study > AWS' 카테고리의 다른 글

AWS(6)-S3에 파일 upload(Django, Spring Boot, react)  (2) 2024.04.17
AWS(5) - DataBase  (0) 2024.04.16
AWS(3)  (0) 2024.04.13
AWS(2)-EC2 를 활용해 MySQL 접속  (0) 2024.04.11
AWS  (0) 2024.04.09