전통적인 데이터 센터 및 서버룸의 기능을 AWS에서는 EC2 (Elastic compute cloud) 를 통해서 제공한다. 전통적인 서버의 기능 뿐만 아니라 인스턴스 운영에 필요한 각종 지원 서비스 및 기능 강화요소를 통합적으로 제공하며, 리소스 모니터링, 리소스 할당 및 관리, 컨테이너 오케스트레이션 등의 기능이 포힘된다.
사용자는 인스턴스를 통해 스토리지, 메모리, 네트워크 인터페이스 등에 접근할 수 있으며 자신이 원하는 스펙과 운영체제등을 결정 할 수 있다. 또한 비용 역시 자신이 사용한 리소스 양에 따라서 부담하면 된다.
기본적으로 이미지는 어떤 리전에서나 동일한 기능을 제공하는것이 일반적이지만. 특정 AMI는 하나의 리전에서만 사용할 수 있는 경우도 있다.
AMI : amazon machine Image 로 런칭할 인스턴스의 루트 데이터 볼륨에 어떤 OS와 어떤 소프트웨어가 포함되어야 하는지 설명하는 정보가 담긴 템플릿 문서
(AWS ec2 사용에 필요한 OS들은 여기에 정의 되어있다.)
EC2 인스터스 실행에 따른 비용 외에 본인이 선택한 AMI 소프트웨어에 대한 시간당 비용 또는 라이센스 비용이 청구 될 수 있다.
AWS는 인스턴스 타입에 따라서 하드웨어 리소스를 할당한다.
인스턴스 타입 선택 시 , 컴퓨트 파워, 메모리, 스토리지 용량 등이 균형을 이루고 있는 것이 좋다.
사용자의 니즈는 시간에 따라 변할 수 있기 때문에 기존에 사용하는 인스턴스를 중지시키고 새로운 인스턴스 타입으로 변경하거나, 기존 인스턴스 사양의 수정 또는 복사본을 만들어서 다시 시작할 수도 있다.
AWS 리전
EC2 리소스는 해당 리전 내에서만 관리 될 수 있다.
기본적으로 사용자와 가장 가까운곳을 선택한다. 리전 선택시 리전별로 비용과 기능 특징들이 다를 수 있다는 것에 주의하여 선택하자.
VPC(Virtual private cloud)
사용이 간편한 AWS 네트워크 생성 및 관리도구이자 클라우드 인프라 관리 도구다. VPC를 통해 인스턴스를 다른 환경 요소와 쉽게 격리시킬 수 있다. 참고로 VPC를 추가하더라도 NAT 게이트웨이 또는 VPN에 연결하지 않으면 별도의 비용이 발생하지 않는다.
테넌시(tenancy)
AWS의 인스턴스는 기본적으로 서버 인프라를 다양한 목적에 광범위하게 사용될 수 있게 설계되었지만. 상황에따라서 요구사항이 다른 경우 있을 수 있다.
EC2 플레이스먼트 그룹(placement groups)은 사용자의 니즈를 반영한 서버 프로필을 정의할 수 있는 도구 이다.
EC2는 온디멘드, 예약, 스팟 등 세가지 가격 모델 가운데 하나를 구매해서 사용 할 수 있다.
온디멘드
- 12개월 이내 기간 계속해서 서버를 운영을 해야하는 경우 사용하기 적합
- 인스턴스 실행 시간단 비용을 지불할 수 있다.
- 필요에 따라 인스턴스를 시작 및 중단시킬 수 있다.
- 시간당 비용은 가장 비싼 모델이다.
예약 인스턴스
- 1년 이상의 기간 동안 항상 서버를 운영할 계획에 적합
- 1~3년 단위로 갱신하는 예약 인스턴스를 구매하면 할인 혜택 크다.
- 전체 비용은 일시에 지불하거나, 기간 내 점증형으로 비용을 부담하거나 할 수 있다.
스팟 인스턴스
- 평소 업무와는 다른 고성능의 인스턴스가 필요한 경우
- 특정 리전의 인스턴스에 최고가로 입찰한뒤 입찰 가격 혹은 그 이하의 가격으로 시간 단위로 사용이 가능 하다.
- 작업을 끝날때 혹은 입찰한 시간당 최고가를 넘어선 금액으로 누군가가 입찰하기 전까지 사용할 수있다.
인스턴스를 종료하면 서버 기능이 중지되고 관련 리소스는 AWS 리소스 풀 속에 재할당 된다. 인스턴스 종료시 대부분의 경우 1차 스토리지에 저장된 모든 데이터가 삭제된다. 하지만 EBS 볼륨을 스토리지로 사용하는 경우 인스턴스가 종료돼도 볼륨 내 데이터는 유지 된다.
EBS (Elastic Block Storage)
AWS 클라우드의 Amazone EC2 인스턴스에 사용할 영구 블록 스토리지 볼륨
인스턴스 시큐리티 그룹 정책은 언제든 업데이트 할 수 있으며, 인스턴스 실행중에도 가능하다.
인스턴스 타입을 변경하면 컴퓨트, 메모리, 스토리지 용량을 업그레이드 할 수 있으며. 인스턴스를 중지시키고 변경사항을 적용한 뒤 다시 시작한다.
AWS에 배포된 다수의 리소스를 관리하기 위하여 일관된 명명 규칙을 지닌 태그를 부여할 수 있다. EC2뿐만이 아니라 AWS 계정으로 접근할 수 있는 거의 모든 요소에 AWS 리소스 태그를 붙일 수 있으며, 하나의 태그는 키와 연관 값으로 작성한다.
태그를 통해서 리소스의 가시성을 높일 수 있고, 좀 더 쉽게 효과적으로 관리가 가능하다.
AWS 에서는 사용 목적에 따라 다양한 볼륨을 제공하며, 인스턴스를 잘 활용하기 위해서는 이들 볼륨의 특징과 각각의 장단점을 이해할 필요가 있다.
EBS 볼륨
하나의 인스턴스에는 다수의 EBS를 부착할 수 있으며 이들 스토리지 볼륨은 기존의 물리적인 서버에 있는 드라이브처럼 사용 가능하다.
EBS 볼륨에 저장된 데이터의 신뢰성은 최소 99.99%로 작동 실패를 걱정할 필요는 없다.
모든 EBS 볼륨은 스냅샷 생성 방식으로 복제할 수 있으며 기존의 스냅샷으로 다른 인스턴스에 부착할 수 있는 볼륨을 만들거나 AMI 생성을 위한 이미지로 변환할 수 있다.
또한 EBS 볼륨은 저장 중이거나 EC2 호스트 인스턴스에서 이동중인 데이터 보호를 위해 암호화 할 수 있다. 암호화 키는 EBS가 자동으로 관리하거나 AWS key Management Service 를 통해 사용 및 관리할 수 있다.
인스턴스 스토어 볼륨
인스턴스 스토어 볼륨은 EBS와 다르게 비지속형 스토리지이며, 인스턴스를 종료시키면 저장된 데이터가 소실된다.
그럼에도 사용하는 이유는 다음과 같다.
EC2인스턴스도 유일한 IP 주소로 네트워크 상의 위치를 표시한다. 모든 인스턴스는 최소 하나 이상의 프라이빗 IPv4주소를 지닌다.
처음으로 인스턴스를 생성하면 서브넷 내에서만 인스턴스를 연결할 수 있으며, 인터넷과 인스턴스를 바로 연결할 수는 없다. 인스턴스를 외부 리소스와 연결하기 위한 다중 네트워크 인터페이스 환경설정에서 인스턴스 하나 이상의 가상 네트워크 인터페이스를 부착할 수 있다.
이들 인터페이스는 기존의 서브넷 또는 시큐리티 그룹과 반드시 연결돼야 하고, 필요에 따라 서브넷 범위 내에 정적 IP주소를 할당해서 사용할 수 있다.
인터넷과 연결하기 위해서는 인스턴스에 퍼블릭 IP를 할당해서 사용할 수 있다.
애플리케이션 실패 및 복구 상황을 방지하기 위한 서비스로서 실패 상황 발생시 사용자가 미리 지정한 수만큼의 EC2 인스턴스를 프로비저닝하고 시작하며, 요구 수준에 맞춰 인스턴스 수를 동적으로 추가할 수 있다.
-> 인스턴스 실패 또는 예기치 못한 종료 발생시 Auto scaling 이 자동으로 해당 인스턴스를 대체한다.
인스턴스 직접생성할때는 다양한 환경설정이 필요하다. 론치 환경설정은 인스턴스를 직접 프로비저닝 할 때 지정하는것과 동일한 정보를 담은 문서라고 할 수 있다.
론치 환경설정은 기존 EC2인스턴스의 설정 내용을 복사해서 생성하거나 처음부터 새롭게 작성할 수 있다.
EC2 Auto Scaling에서만 사용할 수 있으며, 이것만으로 직접 인스턴스를 론칭할수는 없으며 한번 설정된거는 수정이 안되며 수정을 원하면 새로 생성이 필요하다.
설정 방식 측면에서는 론치 환경설정과 유사하지만 좀 더 직관적이고 이해하기 쉽다. 론치 템플릿은 Auto Scaling 작업시에도 사용할 수 있지만 EC2 인스턴스 사본 생성 또는 스팟 플릿 생성 목적으로도 사용할 수 있다.
론치 템플릿은 버전기능 제공으로 생성 후에도 수정이 가능하다.
Auto Scaling 이 관리하는 EC2 인스턴스 그룹이며, Auto Scaling 그룹 생성에 앞서 론치 템플릿을 생성해야 한다.
인스턴스에 유입되는 트래픽을 분산시키려는 경우 로드밸런서 설정을 하면 되며, Auto Scaling그룹 생성 시 로드 밸런서 타겟 그룹에 연결하면 된다.
Auto Scaling 그룹을 생성하면 사전에 정의한 최소 또는 희망 용량의 인스턴스가 항상 유지되며, 생성된 인스턴스의 헬스 상태가 좋지 못하면 Auto Scaling이 이를 삭제하고 새 인스턴스로 대체한다.
인스턴스 헬스에 대한 판단 기준은 EC2 헬스 체크를 따른다.
이를 통해 메모리 고갈, 파일시스템 오류, 네트워크 오류등을 확인할 수 있다.
(애플리케ㅔ이션에 특화된 문제점은 발견하지 못할 수 있다)
Auto Scaling 그룹 생성 시 몇개의 인스턴스를 프로비전하고 실행할 것인지 지정해야하며 희망하는 인스턴스의 수를 지정하는 것 도 가능하다.
Auto Scaling 옵션
동적 스케일링 정책
Auto Scaling 조정 작업 종료 후에는 관련 정책을 다시 실행하기전 휴식기를 갖게 된다. 기본적으로 300초이며 0으로 설정해서 휴식기를 안가질 수 도 있다.
단계별 스케일링 정책
애플리케이션에 대한 요구 수준이 급속히 증가하는 경우 단순 스케일링 정책만으로는 수요에 적절히 대응할 수 없다. 단계별 스케일링 정책은 리소스 사용량의 누적 지표에 따라 인스턴스를 추가할 수 있다.
예를 들어서 CPU 활성화율이 50%를 초과하면 2개를 추가하고 60%를 초과하면 4개를 추가하는 방식이다.
목표 추진 정책
특정 지표와 타겟 값을 선택하면, Auto Scacling이 CloudWatch Alarm 생성, 인스턴스 개수 조정을 위한 스케일링 정책 생성 등 제반업무를 처리한다.
선택되는 지표는 인스턴스에 추가되는 업무 부하와 비례적으로 변경되는 것이여야한다. (ex, 평균 CPU 활성화율)
목표 추적 정책에서는 스케일아웃/스케일인 정책도 추가할 수 있다.
예약된작업
워크로드 패턴이 예측 가능한 경우나 용량 변화에 선제적으로 대응해 수요 증가 이전에 충분한 인스턴스를 확보하고자 할 때 유용하다.
반복설정도 가능하며 예양된 정책을 삭제하기 위한 종료 시점도 설정할 수 있다.
- 최소, 최대, 희망 용량 값
- 시작 날짜 및 시간
AWS 리소스 및 온프레미스 서버의 자동 및 수동 작업을 관리한다.
수작업 및 스크립트 작성 등이 필요한 유지보수 작업을 돕는 도구로서 온프레미스와 EC2인스턴스의 패키지 업그레이드, 설치 소프르웨어 목록 생성, 새 어플리케이션 설치 등의 업무등을 돕는다. 결국 크게 보면 액션과 인사이트라는 주요기능을 가진다.
액션
인사이트
AWS 리소스에 대한 헬스, 컴플라이언스, 운영 세부사항 정보를 AWS System manager라는 단일 영역에 집약시킨다.
인스턴스가 생성되고 난 이후에는 높은 실행 속도를 제공하지만, 실행 여부와 상관없이 항상 일정 수준의 리소스를 점유하고 있다는 면에서 유연성 및 경량화의 필요성이 제기 되었으며 자연스럽게 컨테이너 기반의 컴퓨트 모델이 대세가 되었다.
컨테이너 이미지 기반의 분산화된 모듈 아키텍처를 이용해 로딩 타임을 기존의 수분에서 수초로 줄일 수 있게 되었으며, 기존의 인스턴스와 다르게 OS 와 각종 소프트웨어가 필요하지 않도 바이너리 이미지 생성을 위한 (dockerfile) 텍스트 파일만 관리하면 된다.
컨테이너 기술의 가장 큰 장점 중 하나는 컴퓨트 리소스 실행을 스크립트화해 좀 더 효율적으로 처리할 수 있다는 것이다. 이를 통해 사용자는 수천 개의 컨테이너를 클러스터 형태로 구성하여 복잡한 아키텍처를 구현해 낼 수 있다.
컨테이너가 많아지며 관리의 복잡성이 문제가 되게 되었고 ECS 를 통해서 효율적인 오케스트레이션이 가능해졌다.
ECS는 대규모 컨테이너 클러스터 실행을 위한 서비스이며, 컨테이너 실행을 위한 인스턴스, 스토리지, 네트워크 리소스의 프로비저닝을 관리하고, 컨테이너 생에 주기 동안 컨테이너의 모니터링 및 관리 작업을 지원한다.
또한 ECS Anywhere는 ECS 플랫폼을 온프레미스 인프라로 확장할 수 있도록 지원하기 떄문에 하이브리드 환경에서 사용하기 적합하다.
기능과 사용 목적등은 ECS와 대체로 비슷하지만 특정 컨테이너 플랫폼에 구애받지 않고 사용할 수 있다. Kubernetes는 글로벌레벨에서 가장 인기 있는 컨테이너 및 오케스트레이션 도구 중 하나이다.
k8s 기반의 환경에 익숙한 경우 EKS가 좋은 선택지가 될 수 있다.
참고로 EKS Anywhere도 존재하기 때문에 온프레미스 환경에서도 사용 가능하다.
정리가 잘 된 글이네요. 도움이 됐습니다.