What is AWS? _2

Sonny__·2023년 5월 10일
post-thumbnail

인프라 관련 요소들에 대해 알아보았다면 이번 시간에는 서버에 관련된 요소들을 배워보도록 하자.

컴퓨팅 파워(서버)

1) AWS EC2(Amazon Elastic Cloud Compute)

  • 가장 기본적인 형태의 클라우드 컴퓨팅(= 클라우드 컴퓨터 한 대)

  • 콘솔 혹은 CLI를 통해 통신한다.

  • 가격 플랜

    • 온디맨드
      • 선 결제 금액이나 장기 약정 없이 저렴하고 유연하게 Amazon EC2를 사용하기 원하는 사용자가 이용.
      • 즉, 사용한 만큼 결제한다.
    • 스팟 인스턴스
      • 온디맨드와 비슷하지만, 종료가 자유롭지 않다.
      • 안정성이 중요한 서버는 사용할 수 없다.
      • 배치나 머신러닝에서 사용한다.
      • 돌리다가 꺼지면 다시 돌려도 되는 것들에 이용한다.
    • 세이빙 플랜(Saving plans)
      • 일정 사용량 약정을 조건으로 사용량에 대해 저렴한 요금을 제공하는 제도
      • 1년 또는 3년 동안 시간당 일관된 사용량을 약정을 조건으로 EC2및 Fargate 사용량에 대해 저렴한 요금을 제공
      • 온디맨드와 유사
    • 예약 인스턴스
      • 1년 또는 3년 동안 인스턴스 유형 및 지역을 포함한 특정 인스턴스 구성에 대해 약정
  • 서버 비용 뿐만 아니라 네트워크 비용, 스토리지까지 포함된다.

  • 가장 대중적인 것은 : t2.micro 인스턴스

  • 오토 스케일링(Auto Scaling)을 기본적으로 제공한다.

    Amazon EC2 Auto Scaling :
    Auto Scaling 그룹이라고 하는 EC2 인스턴스 모음을 생성
    각 Auto Scaling 그룹에서 최대 인스턴스 수와 최소 인스턴스 수를 지정할 수 있으며 Amazon EC2 Auto Scaling은 해당 그룹의 크기보다 작거나 커지지 않도록한다.

  • EC2가 떠있을 때, 트래픽이 몰리면 오토 스케일링이 켜져 있으면, 서버 부하를 분산하여 다른 EC2를 키고 끄고를 진행한다.

  • 탄력적 IP : 임의의 IP가 제공되는 데, 고정적인 IP를 사용하고 싶으면 신청하면 된다.

  • 인스턴스 중지는 일시정지

  • 인스턴스 종료는 저장해 두었던 모든 것을 포맷한다.

  • 당장 사용하지 않을 거면, 중지를. 앞으로 사용하지 않을 것은 종료를 진행하면 된다.


2) AWS ELB(Elastic Beanstalk)

  • AWS 클라우드에서 애플리케이션을 빠르게 배포하고 관리할 수 있는 서비스

  • 애플리케이션을 업로드하기만 하면 Elastic Beanstalk가 용량 프로비저닝, 로드 밸런싱, 조정 및 애플리케이션 상태 모니터링의 세부 정보를 자동으로 처리

    Elasic Beanstalk = EC2 + 배포 버전 관리(롤백) + Elastic Load Balancer + 모니터링 + 로그 트래킹 + 오토 스케일링

  • 다양한 언어 지원 : Go, Java, .NET, Node.js, PHP, Python 및 Ruby

  • 코드를 압축해서 beanstalk에 올리면 알아서 배포한다.

  • 서버를 디플로이 하기 위한 모든 설정을 진행하고 올리면 버전이 올라간다.

  • 애플리케이션 생성 -> 애플리케이션 소스 번들 형식의 애플리케이션 버전(.war파일) Elastic Beanstalk에 업로드 -> 환경 시작 -> 코드 실행 -> 버전 배포


출처 : https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html

  • 깃헙 액션과 ELB를 연동해서 사용할 수 있다.
  • 도커로 말지 않은 소스 코드를 사용하여 배포한다고 생각하자
  • AMI를 사용하여 EC2설정을 복사하여 ELB에 사용할 수 있다.


3) AWS Fargate

  • 도커 파일을 서버에 올릴 수 있게 하는 서비스
  • Fargate를 사용하면 더 이상 컨테이너를 실행하기 위해 가상 머신의 클러스터를 프로비저닝, 구성 또는 조정할 필요가 없다.
  • 도커 파일을 올리는 것이기 때문에 배치를 올릴때도 많이 사용한다.
  • 왜 Fargate 대신 EC2와 ELB를 사용할까?
    • Fargate가 상대적으로 간단하긴 하다.
    • 하지만 가격이 더 비싸다.
    • EC2는 CPU에 관해 칩셋까지 설정할 수 있으나 Fargate는 정해져 있다. 그러므로 같은 가격 대비 성능의 차이가 발생한다.
    • Fargate를 사용함으로써 안정성과 편리함을 얻을 수 있으나 도커 파일을 세세히 설정하면 굳이 사용할 필요가 없다.



4) AWS ECR(Elastic Container Registry)

  • 안전하고 확장 가능한 안정적인 AWS 관리형 컨테이너 이미지 레지스트리 서비스
  • 즉, 도커 파일을 저장하는 곳(도커 이미지)
  • 동일한 도커 이미지를 가지고 오기 위함
  • 지정된 사용자 또는 EC2 인스턴스가 ECR 및 이미지에 엑세스 할 수 있도록 IAM을 사용하여 리소스 기반 권한이 있는 프라이빗 레파지토리를 지원한다.(퍼블릭도 지원)
  • 도커 허브의 역할을 대신 할 수 있음
    • 보안적으로 이점이 있고, 호환이 좋기 때문에 주로 사용한다.

같은 VPC안에서의 서버간의 통신이 훨씬 빠르고 관리면에서 용이하기 때문에 호환성이 좋은 서비스를 사용하는것은 이점이 있다.



5) AWS ECS(Elastic Container Service)

  • 큰 서비스는 주로 ECS나 쿠버네티스, 아니면 ELB를 사용한다.

  • 컨테이너화된 애플리케이션을 쉽게 배포, 관리 및 확장하는 데 도움이 되는 완전 관리형 컨테이너 오케스트레이션 서비스.

  • 복잡한 관리 없이 클라우드와 on-premise AWS리전에서 컨테이너 워크로드를 실행하고 확장 할 수 있다.

  • Fargate는 하나의 도커 파일의 개념이라면, ECS는 도커 파일을 여러 개 묶은 개념

    출처 : https://www.freecodecamp.org/news/amazon-ecs-terms-and-architecture-807d8c4960fd/

  • Task : Task안에는 한 개 이상의 컨테이너들이 포함되어 있으며, ECS에서 컨테이너를 실행하는 최소 단위 -> 인스턴스 화

  • Task Definition : 컨테이너의 이미지, CPU/메모리 리소스 할당 설정, port 매핑, volumn설정

  • Service : Task등의 라이프 사이클을 관리하며, 오토스케일링 과 로드 밸런싱을 관리

  • Cluster : Task가 배포되는 컨테이너 인스턴스 들의 논리적인 그룹

  • 도커 컴포즈 하나가 Task라고 생각하면 좋을 것 같음 : 여러개의 도커를 킨 것을 여러 개 관리한다


6) AWS Lambda

  • 서버를 프로비저닝하거나 관리하지 않아도 코드를 실행할 수 있는 컴퓨팅 서비스.
  • 서버 없이도 코드를 실행시킬 수 있는 서버리스 컴퓨팅 서비스 : Fargate와 비슷한 느낌(도커만 올리면 실행이 되므로)
  • 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버 빛 운영 체제 유지 관리, 용량 프로비저닝 및 자동 조정, 로깅을 포함하여 컴퓨팅 리소스의 모든 관리를 수행.
  • 코드를 돌리기 위한 리소스를 임의로 지정할 수 있으며, 사용 리소스가 아닌 사용시간에 따라 과금된다.
  • 최대 15분만 돌아간다. / 최대 10GB/ 최대 6코어 -> 명확한 한계가 있으며 제한사항이 있음.
    • 빠르게 확장하고 수요가 없을 때 0으로 축소해야하는 애플리케이션 시나리오에 이상적인 컴퓨팅 서비스이다.
  • 비동기 처리에 적합하다.

왜 람다를 ECS나 EC2대신 사용하지 않는가?

  • EC2와 같은 인스턴스보다는 Latency가 높다.
  • 콜드 스타트 이기 때문..
    • 콜드 스타트 : 배포 패키지의 크기와 코드 실행시간 및 코드의 초기화 시간에 따라 새 실행 환경으로 호출을 라우팅 할 때 지연 시간이 발생하는 람다 호출 시작(겨울에 자동차 시동거는거랑 비슷)
    • 5분정도 warm하게 유지하고 계속 warm하게 유지하기 위해서 지속적으로 사용해야 하는 방법밖엔 없음
    • 15분마다 새로 실행된다. 람다는 계속 떠있는 개념이 아니다.
  • 언어 별로 콜드 스타트 시간이 다르다.
    • python, javascript가 빠른 편
  • AWS의 아키텍쳐 이기 때문에 콜드 스타트를 단축하는 방법은 없다.
  • 그러므로 람다를 서버로 사용하기에는 좋지 않지만, 서비스를 많이 하지 않은 API를 람다로 하는 것이 비용적으로 이득이 된다.
    • 병렬처리(유튜브에 영상올리면 해상도에 따라 인코딩 되는 경우)
    • 하루에 Request가 10000개 정도만 되는 서비스 또는 API



7) AWS Lambda - Serverless

  • 람다를 쉽게 실행시킬 수 있는 오픈소스 프레임워크
  • node베이스 이기 때문에 node가 깔려있어야 한다.
  • 함수(코드 뭉치)를 실행시키는 것을 넘어서 람다를 실행시키는 환경을 정의할 수 있다.
  • 사용가능 서버
    • Node계열 - ExpressJS, NextJS..
    • JAVA계열 - Spring(Spring cloud Function)
    • Python계열 - FastAPI, Flask..
  • 소규모/ 이용자가 많지 않은 서비스에서 가격 효율적으로 이용 가능

출처 및 참고 : https://docs.aws.amazon.com/index.html
원티드 프리온보딩 5월 백엔드과정

profile
오늘도 즐거운 하루 보내세요:)

0개의 댓글