[#1 AWS Cloud Technical Essential] Amazon Elastic Compute Cloud(EC2)

JinSeob·2022년 3월 18일
0

AWS

목록 보기
1/4

모든 내용은 Cousera의 'AWS Cloud Technical Essentials' 강좌 내용을 기반으로 정리하였습니다.

Amazon EC2란 무엇일까?

Amazon Ec2는 클라우드에서 안전하고 유연한 컴퓨팅 수행능력을 제공하는 웹서비스 입니다.

  • 사용자는 AWS Management Console, the AWS Command Line Interface (CLI), AWS Software Development Kits (SDKs)를 통해 이러한 인스턴스들을 만들거나 관리합니다.

AMI

Amazon EC2를 통해 가상서버인 EC2 인스턴스를 프로비저닝할 수 있는데요, EC2 인스턴스를 생성하기 위해서는 CPU, 메모리, 네트워크 및 스토리지와 같은 하드웨어 사양이나 사용자가 원하는 리소스를 포함하고 있는 네트워크를 설정하는 Logical Configuration(networking location, firewall rules, authentication, and the operating system)를 정의해야 합니다. 이 때, 사용자는 어떤 운영체제를 설정할 것인가를 정해야 하는데, 이때 Amazon Machine Image(AMI)를 선택해야 합니다.

그렇다면 AMI란 정확히 어떤 것일까요?

AMI가 왜 필요하고 얼마나 유용한지 알려면, 기존 인프라 환경을 구축하는 방식을 이해해야 합니다. 일반적으로 서버를 구축하는 방법은 설치 드라이브나 설치 마법사를 통해 운영체제를 설치하고, 스토리지 매핑, 아키텍쳐 유형, 추가적인 소프트웨어 등 고려해야할 요소들이 많은데요. 사용자가 사용목적에 맞는 AMI를 선택하기만 하면 이러한 프로세스를 단축할 수 있습니다.

EC2 인스턴스와 AMI의 관계

  • EC2 instances가 김치찌개라면 AMI는 김치찌개를 만드는 방법이라 할 수 있습니다. 즉 개발자라면, 클래스와 객체와의 관계랑 유사하다고 생각하시면 됩니다. Class는 무언가를 설계하고 정의한 것이라면, 객체는 서로 교류하는 것이라고 볼 수 있는데. EC2 instance는 웹서버를 설치하거나 컨텐츠를 유저에게 제공하는 장소로서, 상호작용하는 Entity라고 생각하면 된다.

인스턴스 실행 과정

https://d3c33hcgiwev3.cloudfront.net/imageAssetProxy.v1/uKHYVtl7R0Sh2FbZe6dESw_e92f04dcceed4d23862545b3ccc4f759_f5b8552a9bc44aebb2f2c3c3a54948cd_b-61-b-3-ee-6-29-e-3-4-edd-8-f-81-3-a-1-aa-8919-c-21.png?expiry=1647734400000&hmac=C3dpyq4Td1ReD7KZXatciTLcHHHxsKxgoNnqyRDhEnU

  • 새로운 인스턴스를 실행하면 AWS는 하이퍼바이저에 Virtual Machine을 할당합니다.
  • AMI는 Root device volume에 복사되어 그 Volume을 실행하는데 사용하는 이미지를 가지게 됩니다.
  • 그 이후에 연결할 수 있는 서버를 구축하고, 패키지나 추가적인 소프트웨어를 설치할 수 있다.
  • 이 경우, 각 이미지에 따라 적절하게 구성된 소스 코드로 웹 서버를 설치한다.

https://d3c33hcgiwev3.cloudfront.net/imageAssetProxy.v1/NEmoC0r9SeOJqAtK_cnjbQ_79d49431aca94885872f98957aaf84d2_image-9-.png?expiry=1647734400000&hmac=zpfnNFYm6jIq2fZK_WaMyvrEBQYrX0e6Oiq8tT64WIw

AMI의 장점

  • 재사용성
    만약 사용자가 같은 환경의 EC2 Instance를 만들고 싶다면 어떤 프로세스를 거쳐야 할까요? 우선 전체적인 인스턴스를 형성 과정이나 환경 설정 프로세스를 기존의 인스턴스와 최대한 같은 방식으로 구성하는 것도 하나의 방법입니다. 하지만 이런 방식은 시간이 많이 소비될 뿐만 아니라 오류가 날 수도 있습니다. 또 다른 방식은 AMI를 이용하는 것입니다.
    우선 실행 중인 인스턴스에 AMI를 형성(create Image)합니다. 그 다음에, 형성된 AMI를 통해 새로운 인스턴스를 실행합니다(Launch Instance). 이런 방식으로 새로운 인스턴스를 만들면 기존의 인스턴스와 똑같은 환경이 구축됩니다.

Amazon EC2 Instance Lifecycle

EC2 인스턴스의 운영체제를 선택한 다음에 무엇을 해야할까요? 그 다음에는, 인스턴스 유형, 네트워크, 스토리지와 같은 환경 설정을 해야 합니다. 어플리케이션를 만들 때, 고객 요청을 처리하기 위한 충분한 용량의 인스턴스가 필요한데요. on-premise 앱의 경우 서버 용량을 예측하려면 선행 자본 지출을 고려하는 등 어려운 결정들을 필요로 하지만 AWS 모델은 간단한 API 호출을 통해 클라우드 기반 서비스를 할당하여 어플리케이션 수요에 따른 인프라 용량을 맞출 수 있습니다.

EC2 인스턴스 구성요소

EC2 인스턴스는 가상프로세서, 메모리, 네트워크, 인스턴스 스토리지, 그래픽 처리 장치를 조합하여 구성할 수 있습니다. EC2 인스턴스를 만들 때, 이러한 구성 요소에 맞는 configuration이 필요합니다.
https://d3c33hcgiwev3.cloudfront.net/imageAssetProxy.v1/XcYIwNOlTlqGCMDTpR5aZg_98c7357638de4ad0bac00230536a94ba_image-14-.png?expiry=1647734400000&hmac=eDi-1hS--rz3VL5MRmF5MhLsE8ZjCTc5JIGpk0k3PYw

  • 위 그림은 각 모델에 따른 가상 프로세서의 개수, 메모리 용량, 인스턴스 용량, 네트워크 bandwith(일정 시간 내에 정보량의 척도)를 목록화한 테이블입니다.

위 인스턴스 유형의 이름(c5.large)를 세부적으로 나누어서 그 뜻을 자세히 알아보겠습니다.
우선 c5는 인스턴스 패밀리 및 세대 번호를 결정합니다. 해당 인스턴스는 5세대 인스턴스에 속합니다. large는 인스턴스 용량의 크기를 결정합니다.

Instance 패밀리란 무엇인가?

isntance FamilyDescriptionUse Cases
일반적인 목적컴퓨팅, 메모리 및 네트워킹 리소스의 균형을 제공하고 다양한 워크로드에 사용할 수 있습니다.웹 서버, 컨테이너화된 마이크로서비스, 캐싱 플릿, 분산데이터 저장소 및 개발환경과 같은 확장 워크로드
Compute 최적화고성능 프로세서의 이점을 활용하는 컴퓨팅 기반 애플리케이션에 이상적고성능 웹서버, 과학 모델링, 일괄처리, 분산 분석, 고성능 컴퓨팅, 딥러닝, 광고 게재, 게임
Memory 최적화메모리에서 대용량 데이터 세트를 처리하는 작업에 빠른 성능을 제공하도록 설계고성능 데이터 베이스, 분산 웹 규모 인메모리 캐시, 중간 규모 인메모리 데이터 베이스, 실시간 빅데이터 분석 및 기타 엔터프라이즈 애플리케이션
컴퓨팅 가속화하드웨어 가속기 또는 보조 프로세서를 사용하여 부동 소수점 수 계산, 그래픽 처리 또는 데이터 패턴 일치와 같은 기능3D 시각화, 그래픽 집약적인 원격 워크스테이션, 3D 렌더링, 애플리케이션 스트리밍, 비디오 인코딩
스토리지 최적화로컬 스토리지의 대용량 데이터 세트에 대한 높은 순차 읽기 및 쓰기 액세스 권한이 필요한 작업으로 설계, 다른 인스턴스 간에 데이터를 복제하는 애플리케이션에 대기 시간이 짧은 수만 개의 임의 I/O를 제공하도록 최적화Cansandra, MongoDB 및 Redis와 같은 NoSQL 데이터 베이스, 인 메모리 데이터베이스, 스케일 아웃 트랜젝션 데이터베이스, 데이터 웨어하우징, ElasticSearch 및 분석

EC2 인스턴스를 어떻게 배치하는가?

EC2 인스턴스는 Amazon Virtual Private Cloud(VPC)라는 네트워크에 배치된다. 이 네트워크는 VPC 생성 및 구성방법을 배우지 않고도 Amazon EC2를 쉽게 시작할 수 있도록 생성되었다.
기본 VPC에 넣은 모든 리소스는 공개되고 인터넷에서 액세스할 수 있으므로 내부에 고객 데이터나 개인 정보를 두어서는 안된다.

고가용성을 위한 아키텍처

https://d3c33hcgiwev3.cloudfront.net/imageAssetProxy.v1/aFHCJYeqQwuRwiWHqiMLng_eb25568628d748958316042f1b95a409_image-12-.png?expiry=1647734400000&hmac=vqtJ7vBHsJGbrCjOOB1MPF7G9VeImSbwR3zI-nMT8Mw

  • AZ 수준에서 범위가 지정된 aws 서비스는 고가용성 즉, 어떤 event가 발생하는 경우에도 지속적으로(Seamlessly) 어플리케이션이 작동되어야 한다는 것을 염두에 두고 설계해야 합니다.
  • 단일 인스턴스만 있는 경우 해당 인스턴스가 fail되면 어플리케이션이 다운 되지만 10개의 인스턴스가 분산되어 있는 경우 하나가 실패하면 플릿의 10%만 손실되지만 애플리케이션을 지속적으로 사용할 수 있습니다. 또한 아키텍처를 설계할 때 EC2 인스턴스의 크기를 지정한다면, 몇 개의 큰 인스턴스 대신 더 작은 인스턴스를 사용하여 가용 자원을 효율적으로 사용할 수 있습니다.

EC2 Instance LifeCycle

https://d3c33hcgiwev3.cloudfront.net/imageAssetProxy.v1/vgBOJqw6TMyATiasOizM8g_8d882217f0044106a24b7d6c69549207_image-11-.png?expiry=1647734400000&hmac=1Lba5Fz2lKVBmehAWAgVrSapqJKhXOc6dHY6bIKYs7c

EC2 인스턴스는 생성되는 순간부터 종료될때 까지 다양한 상태로 전환됩니다.
(1) 보류상태(Pending) : 인스턴스가 실행상태로 들어갈 준비를 하는 단계로 AWS가 AMI 콘텐츠를 Root Device에 복사하고 필요한 네트워킹 구성 요소를 할당하는 것과 같이 인스턴스를 설정하는데 필요한 모든 작업을 수행하는 상태입니다
(2) 실행중(Running) : 사용할 준비가 된 상태로, 과금이 시작되는 단계이기도 합니다. 실행 중 상태에서 즉시 재부팅, 종료, 중지 및 최대 절전 모드 중지와 가틍ㄴ 인스턴스에서 다른 작업을 수행할 수 있습니다
(3) 재부팅(rebooting) : 운영 체제를 재부팅하는 것과 같습니다. 인스턴스는 동일한 호스트 컴퓨터에 남아있고, 모든 데이터는 유지 및 관리됩니다.
(4) 중지(stopping) : 인스턴스를 중지하고 시작하면 인스턴스가 새로운 물리적 서버에 배치될 수 있습니다. 따라서 이전 호스트 컴퓨터에 있던 인스턴스 스토어의 모든 데이터를 잃어버립니다.
(5) 종료(terminiated) : 인스턴스 스토어가 지워지고 퍼블릭 IP 주소, private IP 주소를 잃게 됩니다. 인스턴스가 종료되면 더 이상 시스템에 엑세스할 수 없습니다.

Stop과 Stop-Hibernate의 차이

인스턴스를 중지한후 인스턴스에 대한 사용 및 데이터 전송 요금을 내지는 않지만 Amazon EBS 크기에 대한 스토리지는 계속 청구됩니다. 인스턴스가 중지된 경우에는 인스턴스 유형과 같은 일부 속성을 수정할 수 있으며, 메모리에 저장된 데이터가 손실됩니다
하지만 최대절전 모드 중지(Stop-Hibernate)를 하면 AWS는 최대 절전 모드(디스크 일시 중단)를 수행하도록 운영 체제에 신호를 보내 인스턴스 메모리(RAM)의 콘텐츠를 Amazon EBS root Volume에 저장합니다.
Stop-hibernate(최대 절전 모드 중지 기능)은 스토리지를 유지하는데 유용합니다. 예를 들어, 애플리케이션을 지원하는 데이터베이스에 대한 병목현상을 완화하기 위해 메모리(RAM)에 데이터베이스 정보를 캐시하는 사용자 백엔드 레이어를 구현하려합니다. 이 때, Amazon EC2에서 이 사용자 지정 백엔드 캐싱 솔루션을 실행한다면, 최대 절전모드 중지기능을 사용하여 서버를 종료하기 전, 이 데이터를 저장하기 위한 스크립트를 수동으로 만들 필요가 없습니다.


Terminology

부팅(Boot) : 컴퓨터를 동작시키는데 필요한 프로그램을 실행하는 과정을 의미합니다.

프로비저닝 : 가상 머신(VM)을 생성하고 실행하는 프로세스입니다. 

하이퍼바이저 : 컴퓨터의 리소스를 가상으로 공유하여 호스트 컴퓨터가 여러 게스트 가상 머신을 지원할 수 있도록 합니다.

스케일 아웃(scale out) : 접속한 서버의 대수를 늘려 처리 능력을 향상시키는 것

Cache(캐시) : 데이터의 원본이나 원본 데이터를 통해 연산된 값을 미리 저장(복사)해두는 임시 저장소를 의미한다.

profile
Data Scientist, Data Engineer

0개의 댓글