TIL

27일차 aws

김영재0412 2022. 5. 30. 00:19

Sprint 1 - 3 Tier Architecture (HTTP)

 

Prerequisite

앞선 슬라이드를 통해 S3, EC2, RDS에 대한 개념 학습을 완료했습니다. 이번 스프린트에서는 코드 작성이 완료된 애플리케이션을 AWS 서비스를 통해 배포하는 스프린트를 진행하겠습니다.

Bare Minimum Requirement

  • Sprint Repository의 소스코드를 이용하여, 어떤 구조로 구성되어 있는지 확인합니다.
  • HTTP 스프린트의 테스트를 모두 통과해야 합니다.
  • 웹 애플리케이션이 배포 상태에서 잘 작동해야 합니다.

Getting Started

  • EC2, S3, RDS와 Repository의 소스코드를 가지고 웹 애플리케이션을 배포하기 위해 어떤 아키텍처를 가져야하는지 이해해야 합니다.
    • 아키텍처에 따라 어떤 과정을 먼저 진행해야 할지 확인합니다.
  • 먼저 각 client , server 디렉토리에서 dependencies를 npm install 을 통해 설치합니다.
  • 클라이언트와 서버 디렉토리에 각각 위치한 .env.example 파일을 보며 어떤 환경변수들이 정의되어 있는지 확인합니다.
  • .env.example 파일을 .env 파일로 생성하여 REACT_APP_API_URL에 EC2에 배포한 서버 주소로 설정합니다.
  • S3를 통해 client 디렉토리에 있는 소스코드를 먼저 정적 웹 호스팅 방식으로 배포합니다.
  • .env 파일의 테스트에 필요한 환경변수를 채워넣습니다.
  • client 디렉토리에서 npm run test1 명령을 사용해 테스트를 전부 통과하는지 확인하고, 웹 애플리케이션이 정상적으로 배포되어 작동하는지 확인합니다.
  • 테스트가 모두 통과되면 제출하고, 다음 HTTPS 스프린트로 넘어갑니다.

 

s3 ec2 rds를 이용해 3티어 아키텍처를 만드는 실습을 하였다. 

 

먼저 깃허브에서 클론을 하여 클라이언트 폴더와 서버를 npm i를 한 후 .env를 수정했다.

 

그후 aws에 들어가 ec2를 만들었다. 

 

SSH로 연결해서 인스턴스를 연결한 뒤 npm, node 등 필요한 파일을 다운 받고 EC2에 돌릴 서버 파일도 다운 받고 설치까지 마쳤다.

 

 

그 후 서버를 실행 시킨 후 EC2의 IP로 들어가니 서버가 잘 실행되는 모습을 확인할 수 있었다.

 

 

이제 S3를 프론트앤드로 만들 차례다.

 

먼저 버킷을 퍼블릭으로 만든 후 정적 웹 사이트 설정과 권한 설정을 해주었다.

 

기본페이지는 index.html로 하였고 권한은 와일드카드를 써서 읽기 권한만 주었고 그 후 EC2의 ip주소를 클라이언트 폴더의 env에 적고 빌드를 하였다. 그 후 빌드에 파일을 s3 버킷에 다 넣었다.

 

그 후 정적 웹 사이트로 가니 s3에 올린 index.html 파일이 기본페이지로 되어있었다.

 

그 다음 데이터베이스랑 백앤드서버랑 연결 할 차례이다. 데이터베이스는 RDS로 구성한다.

 

mysql로 rds를 만들었고 이제 ec2랑 rds를 연결해야하기때문에 ec2에서 환경변수파일에 rds값을 넣어줬다.

 

그 후 s3에 들어가서 로그인하면 성공이 뜬다.

 

 

 

Sprint 2 - 3 Tier Architecture (HTTPS)

 

Prerequisite

  • Sprint1인 HTTP 배포를 완료해야 합니다.
  • HTTPS에 대한 이해와 학습이 선행되어야 합니다.
  • AWS Route53을 통해 구매한 도메인이 있어야 합니다.

Bare Minimum Requirements

  • HTTPS로 웹 애플리케이션을 배포할 수 있어야 합니다.
  • CloudFront, Certificate Manager, Elastic Load Balancer, Route53 등의 서비스에 대해서 이해합니다.
  • 모든 테스트를 통과하고, 제출해야 합니다.

Getting Started

  • HTTPS를 적용하기 위해서는 어떤 아키텍처와 어떤 AWS 서비스가 필요한지 구상합니다.
    • 구상한 내용을 draw.io 등을 이용해 다이어그램으로 그리고, 해당 이미지파일을 S3에 httpsdiagram 이라는 이름으로 업로드합니다.
    • 이때 해당 객체에 대한 퍼블릭 액세스를 허용해야 테스트를 통과할 수 있습니다.
  • .env파일에 HTTPS 적용을 위한 환경설정으로 적절하게 작성합니다.
  • npm run test2 명령을 사용해 테스트가 통과하는지 확인합니다.
  • 실제로 웹 애플리케이션이 브라우저 상에서 HTTPS 프로토콜로 작동하는지 확인합니다.

1. Certificate Manager를 통한 도메인 인증서 발급

  • 구매한 도메인을 기준으로 인증서를 발급 받습니다.
    • 인증서는 프론트엔드 Cloudfront 사용 리전인 us-east-1과 백엔드 Load Balancer 사용리전인 ap-northeast-2에서 발급 받아야 합니다.
    • 발급 시, DNS 검증 가이드로 레퍼런스를 참고하세요.
    • 이후에 DNS 공급자로 Route53을 이용합니다. Route53에 레코드 생성과정을 반드시 거쳐야합니다.
  • 인증까지 최소 30분의 시간이 소요될 수 있습니다.

2. 백엔드 HTTPS 적용

  • 애플리케이션 로드밸런서(Application Load Balancer)를 생성합니다.
  • ALB의 리스너, 가용영역, 인증서를 설정합니다.
  • 대상 그룹(target group)을 등록합니다.
  • 로드밸런서 DNS 주소로 접속해, 테스트를 진행합니다.
  • 아래 레퍼런스를 참조하여, 스프린트를 진행합니다.

3. 프론트엔드 CDN 및 HTTPS 적용

  • Cloudfront는 서울 리전을 지원하지 않습니다.
  • Origin Domain을 설정해야 합니다.
  • Viewer protocol policy는 Redirect HTTP to HTTPS로 지정해야 합니다.
  • Certificate Manager에서 발급받은 인증서를 사용해야 합니다.
  • Default root object 부분에 index.html을 작성해야 합니다.
  • 대체도메인과 인증 받은 도메인의 이름이 같아야 합니다.
  • 생성된 배포의 Distribution domain name으로 접속이 되는지 확인합니다.
  • 아래 레퍼런스를 참조하여, 스프린트를 진행합니다.

4. Route53 레코드 등록

  • 백엔드와 프론트엔드의 별칭 레코드를 Route53 호스팅 영역에 생성합니다.
  • 백엔드는 https://api.yourdomain.click으로 접속 시, 로드밸런서로 연결되어야 하며, 프론트엔드는 https://www.yourdomain.click으로 접속 시, Cloudfront로 연결되어야 합니다.

 

 

 

 

먼저 시간이 오래 걸리는 인증서를 신청한 후 서울리전과 cloud front 사용 리전인 버지니아에 각각 신청을 한 후 로드밸런서를 만들었다.

 

그 후 로드밸런서 주소로 들어가보니 백앤드서버랑 잘 연결 된 것을 확인 할 수 있었다.

그 후 cloud front에 가서 조건에 맞게 생성하였다.

그 후 route53에 가서 레코드 정의를 하였다.

왼쪽은 백앤드, 오른쪽은 프론트앤드며 각각 해당 레코드 이름으로 들어가면 

접속이 잘 되는 것을 볼 수 있으며 마지막으로 데이터베이스 연결까지 해보겠다. 일단 클라이언트에 가서 env 파일을 수정 후 새로 빌드하여 s3 버킷에 올리면 된다.

'TIL' 카테고리의 다른 글

29일차 docker  (0) 2022.05.30
28일차 Docker  (0) 2022.05.30
26일차 aws  (0) 2022.05.23
25일차 AWS  (0) 2022.05.22
24일차 AWS  (0) 2022.05.19