[aws] 기본 개념: 글로벌 인프라 및 안정성
이전 내용
[aws] AWS 기본 개념 및 클라우드 컴퓨팅
AWS(Amazon Web Service) 소개 ◆ 클라우드 컴퓨팅 배포 모델- 클라우드 컴퓨팅 : IT 리소스를 인터넷을 통해 온디맨드로 제공하고 사용한 만큼만 비용을 지불하는 것. [클라우드 컴퓨팅 모델]이름설
puppy-foot-it.tistory.com
글로벌 인프라 및 안정성
AWS 글로벌 인프라를 구축해서 데이터 센터의 정전이나 자연재해와 같은 일에 대비 → 고가용성과 내결함성 필요
◆ AWS 글로벌 인프라
리전(Regien) : 전 세계 다양한 지역에서 운영되고 있는 대규모 그룹의 자체 데이터 센터
[리전의 특징]
- 각 리전에는 애플리케이션을 실행하는 데 필요한 컴퓨팅, 스토리지 및 기타 모든 서비스가 구비된 다양한 데이터 센터가 존재
(1) 리전 선택 → 4가지 비즈니스 요구사항 적용됨
- 데이터 거버넌스 및 법적 요구 사항 준수(규정 준수)
- 회사와 위치에 따라 특정 영역에서 데이터를 실행해야 하는 경우 (데이터가 특정 위치에서만 실행되어야 하는 경우)
- 대부분의 기업에서는 이런 규제 적용하지 않음
- 고객과의 근접성
- 고객과 가까운 리전을 선택 시 고객에게 콘텐츠를 더 빠르게 전달할 수 있음
- 인프라를 본사와 가까운 리전에서 실행할지, 고객과 가까운 리전에서 실행할지 고려!
- 리전 내에서 사용 가능한 서비스
- 경우에 따라 고객에게 제공하려는 기능이 가까운 리전에 없을 수도 있음
- 이 경우 개발자는 이미 서비스를 제공하려는 리전 중 하나에서 이 플랫폼을 실행
- 가격 (요금)
- 리전에 있는 하드웨어가 동일해도 일부 지역은 운영 비용이 더 비쌈 (이런 경우 다른 국가의 리전 선택)
- 가격은 여러 요인에 의해 결정되므로 AWS에서는 투명하고 세분화된 요금제를 제공함
(2) 가용영역 (Availability Zone)
- 가용영역 : 리전 내의 단일 데이터 센터 또는 데이터 센터 그룹
서로 수십 마일 떨어진 물리적 위치이나 가용영역 간의 지연시간은 짧음
→ 리전 한 부분에서 재해 발생 시 여러 가용영역의 영향받을 가능성을 줄일 만큼 멀리 떨어져 있음
- 가용 영역의 목적 : 장애 계획을 수립하고 여러 가용영역에 애플리케이션을 배포해 복원력 있는 고가용성 아키텍처 구축
- 가용영역에는 예비 전원과 네트워킹을 구비한 하나 이상의 독립적인 데이터 센터
- Amazon EC2 인스턴스 시작 시 **가용영역에 설치된 물리적 하드웨어에서 가상 머신이 시작됨
→ 리전은 특정 지역 내에 서로 격리, 각각의 리전은 여러 가용영역으로 구성 (최소 2개 이상!)
→ 한 가용영역의 가상 머신 동작하지 않아도 다른 가용영역의 가상 머신은 동작 → 비즈니스 운영 유지
→ AWS 권장 : 한 리전에서 두 개 이상의 가용영역 사용
- 리전 수준의 서비스 : 모든 가용영역에서 실행되며 특정 가용영역에서 실행 중인 EC2 인스턴스와 통신 가능 (참고) EC2는 가용영역에서만 배포)
ex) ELB, S3, DynamoDB 등
고가용성 계획 시 리전 수준 서비스로 나열된 확인란에서 이미 선택하게 됨!
◆ 엣지 로테이션
- 엣지 로테이션 : Amazon CloudFront가 더 빠른 콘텐츠 전송을 위해 고객과 가까운 콘텐츠 사본을 캐시하는데 사용하는 사이트
※ 캐시 (Cache) : 데이터나 값을 미리 복사해놓는 임시 장소
※ CDN (Contents Delivery Network): 전 세계 고객과 더 가까운 곳에 데이터 복사본을 캐싱하는 직업, 콘텐츠 전송 네트워크
AWS에서는 이 CDN을 Amazon CloudFront라고 함
(1) Amazon CloudFront
- 데이터, 동양성, 애플리케이션, API를 전 세계 고객에게 짧은 지연시간만으로 빠르게 전달해 주는 서비스
- 엣지 로테이션을 통해 통신 속도를 높임
(2) 엣지 로테이션 (Edge Rotation)
- 리전에 있는 콘텐츠를 전 세계 엣지 로테이션 모음에 푸시 가능
- Amazon CloudFront, Amazon Route 53(DNS)도 실행!
※ DNS (Domain Name Service) : 네트워크에서 도메인이나 호스트 이름을 숫자로 이루어진 IP 주소로 해석해 주는 tcp/ip 네트워크 서비스
캐시는 일종의 복사본 같은 것! 고객은 엣지로테이션에 검색하고 엣지로테이션은 고객에게 전달함, 오리진은 원래의 인스턴스에 있음
(3) AWS Outposts
- AWS가 사용자의 데이터 센터 내부에 정상적으로 작동하는 소형 리전
- AWS가 소유하고 운영하며 AWS의 모든 기능을 사용,하나 단, 사용자의 건물에 격리!
- 기업 내 자체 건물에 머물러야 하는 해결할 수 있는 문제 시 적용함
◆ AWS 리소스를 프로비저닝 하는 방법
※ 프로비저닝(Provisioning): IT 인프라를 설정하고, 사용자가 리소스를 사용할 수 있도록 하는 프로세스
- API: Application programming interface
- 즉, 어떻게 요청으로 보내면 어떻게 응답을 줄 것인지에 대한 약속
- API 호출해서 AWS 리소스를 구성하고 관리 가능
- AWS Management Console, AWS 명령줄 인터페이스, AWS 소프트웨어 개발 키트, AWS CloudFormation 통해 AWS API 전송 요청 만들거나 AWS 리소스를 생성·관리 가능
(1) AWS 서비스와 상호작용하는 방법
- AWS Management Console
- Amazon 서비스 액세스 및 관리를 위한 웹 기반 인터페이스 (=브라우저 기반)
- AWS 리소스를 시각적, 이해하기 쉬운 형태로 관리 가능. 수동 프로비저닝(초보에게 좋음) 오류가 많아 번거로우며 자동화 구축 시 어려움
- 최근에 사용한 서비스에 빠르게 액세스하고 이름, 키워드, 약어로 다른 서비스 검색 가능
- 콘솔에는 작업을 수양하는 프로세스를 단순화할 수 있는 마법사 및 자동화된 워크플로가 포함됨
- AWS Console Mobile Application 사용 → 리소스 모니터링, 경보 보기, 결제 정보 확인 등의 작업 수행 가능
※ AWS Console Mobile Application은 여러 ID가 동시에 로그인 가능함 - 적용 : 테스트 환경 구축, AWS 청구서 보기, 모니터링 확인, 기술과 관련 없는 리소스를 사용해서 작업할 때
- AWS CLI (명령줄 인터페이스)
- 하나의 도구를 통해 명령줄에서 직접 여러 AWS 서비스 제어 가능 (머신의 터미널에서 API 호출)
- API 요청을 수행할 때 시간 절약됨
- Windows, MacOS, Linux 사용자가 사용할 수 있음
- 스크립트를 통해 서비스 및 애플리케이션이 수행하는 작업을 자동화할 수 있음 (스크립트 예약, 다른 프로세스에서 트리거링하는 방식)
※ 자동화 : 다시 명령 실행 가능
- 소프트웨어 개발 키트 (SDK)
- 프로그래밍 언어 또는 플랫폼으로 설계된 API를 통해 AWS 서비스를 보다 간편하게 사용 가능
- SDK를 통해 AWS 서비스를 기존 애플리케이션과 함께 사용하거나 AWS에서 실행할 완전히 새 애플리케이션을 생성할 수 있음
- AWS는 각 프로그래밍 언어에 대한 설명서와 샘플 코드 제공 (C++, JAVA, NET 등)
- 개발자가 굉장히 낮은 수준의 API를 사용하지 않아도 AWS를 사용하는 프로그램을 굉장히 쉽게 만들고 수동적으로 리소스 생성할 필요 없음
(2) AWS 환경 관리하는 방법
- AWS Elastic Beanstalk
- AWS EC2를 기반으로 하는 환경을 프로비저닝할 수 있게 지원하는 서비스
- 사용자가 코드 및 구성 설정을 제공하면 Elastic Beanstalk이 용량 조절 / 로드밸런싱 / 자동 조정 / 애플리케이션 상태
- 모니터링을 수행하는 데 필요한 리소스 배포 (자동으로 환경 구축)
- 장점 : 프로비저닝하고 관리해야 하는 번거로움 X, 리소스에 대한 가시성과 제어 기능 유지
→ 인프라가 아닌 비즈니스 애플리케이션에 집중할 수 있음
- WS CloudFormation
- 인프라를 코드로 취급. 즉, 리소스를 프로비저닝 하는 대신 코드 줄을 작성하여 환경 구축 (코드형 인프라 도구)
- CloudFormation 템플릿 : JSON 혹은 YAML 텍스트 기반 문서를 사용 → AWS 리소스를 정의할 수 있음
- 템플릿 사용 시 정확한 구축 방법이나 세부 사항을 직접 지정하지 않고도 구축할 항목들을 정의할 수 있음
이용 시 원하는 항목을 사용자가 정의할 수 있고 - 추후에 Cloundformation 엔진이 API 호출과 관련된 세부사항들을 모두 처리해서 필요한 모든 것들을 구축해 줌
→ 템플릿에서 리소스를 정의하면 Cloundformation이 템플릿을 분석하고 모든 리소스의 프로비저닝을 알아서 시작함 (AWS 백엔드로 가는 모든 호출과 API를 사용자 대신 관리해 줌) - EC2 기반 솔루션, 스토리지, 데이터베이스, 분석, 기계 학습 등의 굉장한 다양한 AWS 리소스 지원
- 동일한 Cloudformation 템플릿을 여러 계정이나 또 여러 리전에서 동시에 실행 시 여러 계정 또는 리전에서 동일한 환경 생성 (완전한 자동화 프로세스! 오류가 적음!)
- 리소스를 안전하고 반복가능한 방식으로 프로비저닝하므로 수작업을 수행하거나 사용자 지정 스크립트를 작성할 필요 없이 인프라 및 애플리케이션을 빈번히 구축 가능
→ 스택을 관리할 때 수행해야 할 적절한 작업을 결정하고 오류를 감지하면 변경사항을 자동으로 롤백함
- AWS Elastic Beanstalk : 사용자가 코드나 구성을 설정 시 자동으로 환경 구축
- AWS CloundFormation : 템플릿 사용 시 자동 구축, 어느 계정이나 리전이든 동일하게 생성됨
다음 내용