AWS 클라우드 (TIL 21)

석형원·2024년 4월 29일

TIL

목록 보기
21/52

✏️ 오늘 학습한 내용

1. AWS란?
2. 클라우드 컴퓨팅이란?
3. AWS 기본용어
4. EC2
5. EC2 생성해보기
6. Elastic Beanstalk


🔎 AWS란?

Amazon Web Services (AWS)

  • 전 세계적으로 분포한 데이터 센터에서 200개가 넘는 완벽한 기능의 서비스를 제공하는, 세계적으로 가장 포괄적이며, 널리 채택되고 있는 클라우드 플랫폼

  • 빠르게 성장하는 스타트업, 가장 큰 규모의 엔터 프라이즈, 주요 정부 기관을 포함하여 수백만 명의 고객이 AWS를 사용하여 비용을 절감하고, 민첩성을 향상시키고 더 빠르게 혁신함.

비용적인 측면이나 빠르게 DevOps의 애자일 방식의 개발 및 배포를 하기 위해선 AWS와 같은 클라우드 방식이 유리하다.

🔎 클라우드 컴퓨팅이란?

  • 클라우드 컴퓨팅 IT 리소스를 인터넷을 통해 온디맨드로 제공하고 사용한 만큼만 비용을 지불하는 방식

  • 물리적 데이터 센터와 서버를 구입, 소유 및 유지 관리하는 대신, AWS와 같은 클라우드 공급자로부터 필요에 따라 컴퓨팅 파워, 스토리지, 데이터베이스와 같은 기술 서비스에 액세스한다.

전통적으로, 예전에는 별도의 물리적인 서버실을 구성해서 운영했으나 조직이 굉장히 크지 않는 이상 서버 관리, 네트워크 관리 등을 하나씩 할 수 있는 엔지니어를 보유하기 힘들기 때문에 클라우드를 사용하는 것이 유리하다.

  • 클라우드 컴퓨팅의 이점

    • 민첩성
      -> 빠르게 배포하고 운용할 수 있음

    • 탄력성
      -> 탄력적으로 서버 운영 가능
      ( CPU나 메모리를 추가하고 싶으면 탄력적으로 리소스를 할당 받을 수 있음 )

    • 비용절감
      -> 안쓰는 서버들을 내려놔서 할당받은 리소스를 반납해서 비용절감이 가능

    • On demand

    • 관리 용이성
      -> 전반적으로 관리가 용이

  • 클라우드 유형

    • On Premises (own server)

      • 물리적인 서버 구성
        ( 클라우드를 이용하지 않는 일반적인 서버 )
    • IAAS (virtual machine)

      • 하드웨어를 가상화한 영역을 할당 받아서 서비스를 제공
        ( O/S, Middleware 정도는 직접 설치 )
    • PAAS (app service)

      • Middleware와 OS도 제공
        ( Data와 Application만 관리하겠다 )
    • SAAS(0365)

      • 전부 맡기고 서비스만 제공받겠다.

출처 : https://www.dataweavers.com/insights/defining-paas-iaas-saas-onprem

🔎 AWS 기본용어

  • 가상화 : 물리적 컴퓨터 하드웨어를 보다 효율적으로 활용할 수 있도록 해주는 프로세스이며, 이는 클라우드 컴퓨팅의 기반을 제공하는 기술

  • 가상머신(VM) : 가상 머신은 소프트웨어 형식으로 물리적 컴퓨팅을 시뮬레이션하는 가상 환경이다. 이들은 일반적으로 VM의 구성, 가상 하드 드라이브의 스토리지, 그리고 특정 시점에 해당 상태를 유지하는 VM의 일부 스냅샷을 포함한 다수의 파일들로 구성되어 있다.

  • 스냅샷

    • 마치 사진 찍듯이 특정 시점에 스토리지의 파일 시스템을 포착해 보관하는 기술

    • 장애나 데이터 손상 시 스냅샷을 생성한 시점으로 데이터를 복구

    • 스냅샷은 원본 데이터를 그대로 복사해 다른 곳에 저장하는 백업과 달리 초기 생성 시 혹은 데이터의 변경이 있기 전까지는 스토리지의 공간을 차지하지 않는다.

    • 메타데이터(데이터에 대한 부가적인 정보)의 복사본에 해당하기 때문에 생성하는 데 오랜 시간이 걸리지 않고 장애 상황이 발생해도 빠르게 데이터를 복원

  • 정리

    가상 머신 :
    물리적 컴퓨팅을 시뮬레이션하는 가상환경

    가상 머신의 구성 :
    일반적인 VM 구성 + 가상 하드 드라이브 스토리지 + 스냅샷

    스냅샷 :
    스토리지의 파일 시스템을 포착해두었다가 장애나 손상 시 포착했던 시점으로 되돌리는 기술

    스냅샷과 백업의 차이 :
    백업은 원본 데이터를 그대로 복사하지만, 스냅샷은 메타 데이터를 복사한 것이기에 스토리지의 공간을 적게 차지하고 빠르게 복원이 가능하다.

  • 데이터 센터

    • 수 많은 서버들을 한데 모아 네트워크로 연결해 놓은 시설
  • Region(지역)

    • Region은 Data Center가 위치한 지역
    • IT 리소스를 생성할 Region은 선택 가능
    • Region마다 서비스가 다를 수 있다
    • 대상 고객의 지역과 최대한 가까워야함
    • 국가마다 자원사용 비용이 다르다
  • Availability Zone(가용영역)

    • 하나의 Region은 2개 이상의 Availability Zone으로 구성됨

    • 줄여서 AZ로 표시

    ( AWS의 경우 Region:Seoul에 AZ가 4개 )

🔎 EC2

EC2 서비스란

  • 논리적인 리소스 서버를 할당받는 것
  • AWS에서 가장 보편적으로 사용되는 서비스

AWS EC2 기능

  • EC2는 하나의 인스턴스마다의 별도의 서비스를 이용할 수 있음

  • 인스턴스 : 가상 컴퓨팅 환경을 의미

  • Amazon 머신 이미지(AMI)

    • 서버에 필요한 운영체제와 여러 소프트웨어들이 적절히 구성된 상태로 제공되는 템플릿

    • 인스턴스를 쉽게 만들 수 있도록 도와줌

    -> 특정 서버나 리소스를 저장해둔 이미지

  • 인스턴스 유형

    • cpu, 메모리, 스토리지, 네트워킹 용량 등 여러 가지 구성

    • 키 페어를 사용하여 인스턴스 로그인 정보 보호
      ( AWS의 경우, 퍼블릭 키를 저장하고 사용자는 개인 키를 안전한 장소에 보관하는 방식 )

  • 인스턴스 스토어 볼륨

    • 인스턴스는 스토어 볼륨이라는 각각의 스토리지 볼륨으로 저장해서 서비스를 이용할 수 있음

    • 임시 데이터를 저장하는 스토리지 볼륨
      ( 인스턴스 중단, 종료 시 삭제됨 )

    • Amazon EBS 볼륨을 사용해 영구 스토리지 볼륨에 데이터 저장

  • 보안 그룹

    • 인스턴스에 연결할 수 있는 프로토콜, 포트, 소스 IP 범위를 지정하는 방화벽 기능
  • 탄력적 IP 주소(EIP)

    • 각각의 인스턴스들은 별도의 IP와 도메인들을 제공하고 있음

    • 인스턴스를 재시동하게 되면 다른 도메인과 다른 IP로 설정이 됨

    • 이를 고정적으로 제공해주는 그런 서비스가 Elastic IP(EIP)

    • 동적 클라우드 컴퓨팅을 위한 고정 IPv4 주소

    인스턴스를 만들 때, 고정적으로 IP를 할당하고 싶으면 EIP를 이용하면 된다.

  • 태그

    • 사용자가 생성하여 Amazon EC2 리소스에 할당할 수 있는 메타 데이터
  • Virtual Private Clouds(VPC)

    • AWS 클라우드에서 논리적으로 격리되어 있지만, 원할 때마다 고객의 네트워크와 간편히 연결할 수 있는 가상 네트워크

🔎 EC2 생성해보기

EC2 대시보드

( AWS 화면에서 EC2를 검색 )
( Region : Seoul로 선택 )


키 페어 설정

( 네트워크 및 보안 -> 키페어 -> 키페어 생성 )

  • 키 파일 형식

    • .pem
      -> MAC, Linux를 직접 사용하는 경우

    • .ppk
      -> Window를 사용하는 경우

  • 키 페어 생성 시, Private Key를 다운로드하여 안전한 곳에 보관


인스턴스 생성

( EC2 -> 인스턴스 -> 인스턴스 시작 )

  • AMI 선택 ( OS + 추가 서비스 )
    e.g.) 더 많은 AMI 찾기 선택
    ( OS에 jenkins가 설치된 이미지를 찾으려 하는 경우 -> jenkins를 검색 )

  • 인스턴스 유형

    • Demo의 경우 : t2.micro
  • 키 페어
    ( 위에서 생성한 키 페어를 등록 )

  • 보안 그룹
    ( 네트워크 설정 -> 방화벽(보안그룹) )

  • 스토리지
    ( 필요한 적정량의 크기 지정 )

  • 설정 완료 시 인스턴스 시작.


인스턴스 생성 후 대시보드

  • 퍼블릭 IPv4 주소
    -> 이 IP 주소를 통해 접속

  • 프라이빗 IPv4 주소
    -> 내부적으로 존재하는 프라이빗 주소

  • 퍼블릭 IPv4 DNS
    -> 도메인을 별도로 입히지 않으면 나오는 기본적인 도메인
    ( 도메인을 구입해서 특정 도메인을 연결한다고 하면 Route 53을 통해 도메인을 연결시킬 수 있음 )

  • 탄력적인 IP 주소
    -> 위의 IP주소들은 서버를 재가동시킬 때마다 변경이 되기에, 고정적인 IP를 지정하고 싶은 경우 설정

  • 인스턴스 상태 ( 우측 상단에 위치 )

    • 인스턴스 시작, 중지, 재부팅, 종료 등의 옵션을 지원

    • 이때, 중지를 해놓아도 비용이 부과될 수 있음
      ( 완전히 사용하지 않을 땐, 종료를 눌러야 비용이 부과되지 않는다. )


인스턴스 연결

( 일반적으로 Terminal을 통해 연결 )

  • ssh -i "키이름" 계정@도메인주소 혹은 IP
    ( 기본적으로 AWS Linux를 이용하면 EC2-user라는 계정으로 접속이 가능 )

  • 연결을 위해 위에서 생성한 키 페어를 조정

    • .ssh 경로 밑에 다운로드한 key를 옮긴다.

    • key에 대한 실행 권한을 맞춰준다.
      chmod 400 key_name

    • 서버(인스턴스)와 연결


인스턴스 보안

  • 인바운드 규칙

    • 인스턴스에 도달하도록 허용된 수신 트래픽을 제어

    • 위에서 ssh로 접속을 할 수 있었던 이유가 포트 22가 열려있었기 때문이다.

    • 인바운드 규칙 추가 예시 ( 80 포트 )
      ( 0.0.0.0/0 : 모든 IP에 대해 허가 )

  • 아웃바운드 규칙

    • 서버에서 나갈 수 있는 데이터에 대한 규칙
      ( 다운로드 허용 여부 )

탄력적 IP 주소

( 네트워크 및 보안 -> 탄력적 IP )

  • 탄력적 IP 주소 할당

  • 탄력적 IP 주소 연결 (우측 상단)
    ( 만든 인스턴스를 선택 )

  • IP가 고정된 것을 확인

할당 제한 갯수가 있으니 꼭 필요한 곳에 효율적으로 할당해서 사용할 것!

🔎 Elastic Beanstalk

Elastic Beanstalk이란?

  • 애플리케이션을 만들 수 있는 환경을 빠르고 신속하게 구성해서 관리할 수 있는 서비스

  • EC2도 복잡한 서비스는 아니였지만 보다 더 간단하게 만들 수 있는 서비스

세부 내용

  • Elastic Beanstalk를 사용하면 애플리케이션을 실행하는 인프라에 대해 자세히 알지 못해도 AWS 클라우드에서 애플리케이션을 신속하게 배포하고 관리할 수 있다.

    요약 : 인프라를 몰라도 APP을 쉽게 배포 관리할 수 있다.

  • Elastic Beanstalk를 사용하면 선택 또는 제어에 대한 제한 없이 관리 복잡성을 줄일 수 있다. 애플리케이션을 업로드하기만 하면 Elastic Beanstalk에서 용량 프로비저닝, 로드 밸런싱, 조정, 애플리케이션 상태 모니터링에 대한 세부 정보를 자동으로 처리한다.

    요약 : 관리 복잡성이 현저히 낮고, 로드 밸런싱과 같은 세부 내용을 자동으로 처리해준다.

  • Elastic Beanstalk는 Go, Java, .NET, Node.js, PHP, Python 및 Ruby에 개발된 애플리케이션을 지원한다. 애플리케이션을 배포할 때, Elastic Beanstalk가 선택된 지원 가능 플랫폼 버전을 구축하고 Amazon EC2 등의 AWS 리소스를 하나 이상 프로비저닝하여 애플리케이션을 실행한다.

    요약 : 상당 수의 프로그래밍 언어를 지원하며, 플랫폼을 구축, 프로비저닝을 통해 환경을 구성하여 APP을 실행해준다.


Elastic Beanstalk 생성

( AWS 웹페이지에서 Elastic Beanstalk 검색 )

  • Create Applications

  • 플랫폼 설정

    • VPC ( 네트워크 )

      • VPC : 가상 네트워크 망
        ( 여러 개의 네트워크를 하나의 망으로 묶는 것 )

      • 서비스 네트워크에 대해 접근 제어, 역할 제어가 필요한 경우, VPC를 구성

    • 보안
      ( 인스턴스 생성할 때 만든 키 페어를 등록 )

    • 앱 생성하기

  • Elastic Beanstalk 생성과 동시에 EC2가 생성됨
    ( 인스턴스에서 생성된 것을 확인 )

  • 탄력적 IP를 통해 Console로 접속
    ssh -i 저장된키의경로 계정@ip

  • 기본적인 실행 파일이 var/app/current에 올라감

  • 로그는 var/log에 올라감

    • web.stdout.log가 웹 로그 파일
      ( 웹 개발을 통해 생기는 로그들)
    • eb-engine.log가 Elastic Beanstalk 자체에 대한 로그

내부적으로 Elastic Beanstalk은 Nginx 웹 서버가 있고, 안쪽에 WAS가 있는 구조

예를 들어, Spring boot를 8080포트로 띄웠다고 한다면

EC2의 경우 :
8080포트로 다이렉트로 실행이 됨

Elastic Beanstalk의 경우 :
앞단에 Nginx 80포트가 대기하고 있고 안쪽에 만든 애플리케이션의 포트 (8080포트)로 연동이 되어있음
( Nginx 웹 서버의 80포트가 기본적으론 5000번 포트로 연동이 되어있음 )

-> 5000번 포트로 통신을 한다.

  • 애플리케이션 배포
    ( Elastic Beanstalk -> 환경 -> ~.env )

    • 만들어둔 애플리케이션 (.jar) 파일이 있다면 업로드하여 배포가 가능
  • Elatic Beanstalk 옵션
    ( ~.env -> 구성 )
    업로드중..

  • 로드 밸런싱
    ( 구성 -> 용량 수정 -> Auto Scaling 그룹 )

    • EC2 서버(인스턴스)가 과부하가 일어나 서버에 영향이 생기면 자동으로 서버를 늘려줌
      업로드중..

결론 :
Elastic Beanstalk을 통해 간단하게 .jar 파일 하나만으로 애플리케이션을 배포, 관리할 수 있다.

profile
데이터 엔지니어를 꿈꾸는 거북이, 한걸음 한걸음

0개의 댓글