내일배움캠프 D+9(AWS 기초2)

enyo9rt·2022년 4월 25일

TIL-S

목록 보기
7/79

☁️ AWS클라우드 배포환경 구축 기초 2주차


  ✅ Check Point
1. 	클라우드 개념을 알고 내가 어떤 서비스를 쓰는지 이해하기

2. 	클라우드 설정들이 비슷하므로 계속해서 숙지하는 것이 좋다.

2-1

      AWS는 왜 만들어졌을까?

  • MSA의 등장
    • Monolithic vs MSA
      스파르타코딩클럽
      - Monolithic: 프로젝트에 관한 모든 부분을 하나의 서버에 배치하는 방법
      - MSA: 간단하게는 프론트, 백엔드를 물리적으로 다른 서버에 배치하는 방법
        잘게 쪼갠다고 생각하면 된다. 현재 http 속도가 빠르기 때문에 이러한 변화가 가능케 된 것.

  • 2001년 아마존은 주요한 아키텍쳐 변화가 있었는데 2 티어 기반(데이터베이스, 애플리케이션)에서 서로 다른 애플리케이션 기능을 제공하는 분산 서비스 플랫폼으로 변화했다.
    • AWS는 매우 다양한 서비스를 제공하며, 그러한 서비스들을 레고 조립하듯 다양한 조합으로 쓸 수 있게 구성했다.
  • 현재 개발 산업의 추세는 클라우드 서비스를 이용하는 것이므로 개발 방식도 그에 맞게 변해야 한다. 분리해야 할 부분은 분리하는 것이 의존성을 줄일 수 있다.

2-2

      CloudFront 글로벌 콘텐츠 전송 네트워크

  • 세계 어디에서 접속해도 속도가 거의 비슷하도록 만들어주는 CDN(Content Delivery Network) 서비스

    • CloudFront와 S3를 연결, 버킷 내 콘텐츠들을 캐시 서버에 저장한다.

    • S3 버킷에 파일 업로드 -> CloudFront distribution이 edge location들로 배포하여 S3 버킷의 리전, 배포 리전, 접속 리전에 구애받지 않고 가까운 캐시 서버 네트워크와 연결
      스파르타코딩클럽

    • 참고

CF - Create Distribution 배포 생성

  • 기본값 루트 객체(Defalut Root Object) 지정해주기
    • 특정 객체 대신 루트 URL(/)을 요청할 때 반환할 객체(파일 이름)
      ex) index.html
  • 생성된 이후 접속은 CloudFront 내의 Domain ID로 접속하면 됨
    • 기존 S3 버킷 웹사이트 엔드포인트로 접속하지 않으므로 S3 과금 x

2-3

      Git 분산형 형상 관리 도구

  • clone > pull > commit > push 순서를 최대한 지키자!

      GitHub Git 엔진을 외부로 서비스해주는 웹사이트

  • MS로 인수되면서 GitHub action (배포 서비스) 지원
    • DevOps 플랫폼으로 발전 (Develpment + Operation 형상 관리 + 배포)


      CI/CD (배포 파이프라인) Continuous Integration / Continuous Delivery

  • Github만 사용한다면 CI 이고, 서버와 인프라에 배포 Delivery하는 것은 CD
  • 요즘 트렌드는 소스 저장소와 배포 시스템 통합
    • MSA 아키텍쳐로 트렌드가 변화하면서 확장성이 크게 늘어나 독립적인 서비스 배포가 쉬워졌으므로 그에 맞춰 배포 시스템도 변화.


      .yml

  • 배포 설정이나 인프라 설정 파일들에 많이 쓴다.
  • 데이터를 주고 받을 때 정하는 형식 중 기존의 xml, json보다 가독성이 좋다.
  • GitHub는 marketplace에서 yml 파일 작성 형식을 참고할 수 있다.
  • yml과 yaml?
  • 참고

2-4

    IAM을 사용해서 GitHub Action이 push받은 수정된 파일을 내 S3에 업로드 할 수 있도록 권한을 준다.

    repo 생성 
    > 파이참에서 repo clone 
    > 파이참 내에서 리소스 생성 
    > yml 파일 생성 (.github/workflows/main.yml) 
    > GitHub 내 repo Settings에서 yml 파일이 요구하는 access key값이나 배포 ID 등 입력하기
    (소스에 입력해두면 보안적으로 안전하지 않기 때문에 변수로 지정해준다.)

      .yml 설정값

  • S3에 업로드
  • CloudFront에 앞서 캐싱되어 있는 파일을 invalidation (다시 새롭게 캐싱되도록)

2-5

      VPC Virtual Private Cloud

  • 사용자의 AWS 계정 전용 가상 네트워크로, 지정한 가상 네트워크에서 AWS 리소스를 시작할 수 있도록 프로비저닝하는 것.
  • IPV4 CIDR: IP의 범위를 지정하는 방법
  • 참고

      서브넷 연결되는 서버 컴퓨팅 자원들에 내부 IP를 할당

      라우팅 테이블 연결된 서브넷들을 라우팅

      인터넷 게이트웨이 외부와 통신할 수 있도록 인터넷과 VPC를 연결


2-6

      보안그룹

  • S3나 CF는 포트 조절할 필요가 없음

  • 백엔드는 포트 지정해줘야할 일들이 생김 (mongoDB등 지정 포트)

  • 아웃바운드: 내가 어떤 api를 호출할 때 나가는 포트

  • 인바운드: 내 서비스, 서버 리소스로 들어오는 트래픽에 대한 포트

  • CIDER가 0이면 0.0.0.0 IP대역에 모든 대역들을 허용
    /0 모든 대역대를 해당 포트로 들어오는 것을 허용

  • Ubuntu 는 리눅스, 리눅스는 파이썬 작업을 하려면 ssh 프로토콜의 포트 22 지정해 주어야 함.
    (ex. http 80 https 443)

  • 로컬에서 확인할 수 있도록 포트 5000 열어주기


      탄력적 IP

  • IP가 필요한 리소스(인스턴스, RDS 등)에 고정된 IP를 부여할 수 있게 한다.

2-7

      리눅스 명령어

  • rm -f [지울 파일]
    rm -rf [지울 폴더]
    (복구 불가 주의!)

  • 확인 http://[내 EC2 퍼블릭 IP]:5000/


2-8

      ELB

  • 여러 대의 EC2를 묶어서 사용
  • LB 로드발란서는 클라우드 사용 이전에도 구입해서 사용했다.
  • EC2 한 대가 트래픽 감당하기 어려울 때 가장 간단한 방법이 EC2에 LB 연결, 실시간 대응이 가능.
  • 기본적으로 Application LB를 사용.
  • 확인 http://[ELB DNS 이름]/


      Auto Scaling

  • 구성을 직접 하면 이미지 복사해서 생성한 인스턴스 내에 스크립트를 실행해 주어야 한다.
    -> 번거로움

2-9

      Elastic Beanstalk 통합 관리 서비스 (ELB+Auto Scaling+EC2)

  • s3는 파일 저장 뿐 아니라, 저장된 파일들을 가지고 호스팅하는 기능도 있다.
    웹사이트 소스(html,css 등)을 웹호스팅 업체에 전달하면 사이트를 띄워주는 거.
  • 버킷 정적호스팅 기능 활성화할 때, 오류 문서의 경우 그걸 관리하는 쪽에서도 index.html을 쓰면 그렇게 설정해주면 됨.

2-10

      ⚙ EB 배포

      EB로 배포할 때는 application.py 로 기본 이름 설정.
      yml 파일 내 변수들 EB에서 체크!
      1. application_name 
      2. environment_name


      requirements.txt 라이브러리 모음 파일

  • EB로 배포하는 경우 직접 접속해서 하는 것이 없기 때문에 라이브러리 목록을 만들어 자동으로 설치하게끔 해준다.
  • pip freeze > requirements.txt

SAVE 💾

대상 그룹에 추가 안하면 503 뜸

에러나면 확인해야할 것!
1. branch 명
2. EB 변수
3. 파일 자체 코드 확인
4. 보안 그룹

0개의 댓글