AWS의 IaaS(Infrastructure as a Service) 중 가장 많이 사용하는 것 중 하나인 EC2가 속해있는 AWS Computing의 대표적인 것들에 대한 간단한 정리 글이다.
EC2
Elastic Compute Cloud
클라우드에서 컴퓨팅 파워의 규모를 자유자재로 변경할 수 있는 웹 서비스
- S3로 클라우드에서 스토리지 사용
- 컴퓨팅 수행
- 간단한 웹 서비스 인터페이스를 통해 간편하게 필요 용량 구성
- 리소스 포괄적 제어권 제공
- 인프라 실행
- 새로운 서버 인스턴스 획득/부팅 > 시간 단축
- 신속하게 용량 확장/축소 (:exclamation: 탄력적)
- 실제 사용한 만큼만 요금 지불
Auto Scaling
쉽고 안전하게 여러 AWS 리소스의 규모를 조정
:point_right: 인프라 비용 감소, 애플리케이션 성능 최적화
- 리소스 모음 조정 > 규모 조정 경험 간소화
- 리소스 규모 자동 조정
✔ POINT
- 빠른 규모 조정
- 애플리케이션을 지원하는 확장 가능한 모든 리소스에 대해 통홥된 규모 조정 환경 제공
- 직관적인 단일 인터페이스
- 확장 가능한 모든 리소스의 평균 사용량 > 리소스 그룹의 목표 사용량 수준 신속하게 정의
- 똑똑한 규모 조정 의사 결정
- 서로 다른 리소스 그룹이 수요 변화 대응에 자동화
- 이해하기 쉬운 규모 조정 전략 > 가용성, 비용, 최적화
- 모든 규모 조정 정책 자동 생성/목표 설정
- 서로 다른 리소스 그룹이 수요 변화 대응에 자동화
- 자동 성능 유지
- 앱의 기본 리소스 모니터링 > 원하는 성능 수준 작동 확인
- 수요 급증 시 리소스 용량을 자동으로 늘림
- 비용 예측 및 초과 지출 방지
- 사용률과 비용 효율성 최적화
- 필요한 리소스에 대해서만 비용 지불
사용
-
확장 가능한 리소스 사용
-
변동이 심한 애플리케이션 보유
-
CloudFormation 스택에 따라 애플리케이션 선택
규모 조정
- EC2 Auto Scaling
- 애플리케이션의 로드를 처리하는 정확한 수의 EC2 인스턴스 유지
- 인스턴스가 비정상 상태일 때 감지하여 종료
- 내결함성, 가용성, 비용 관리 개선
- Application Auto Scaling API
- 규모 조정 정책 정의
- AWS 리소스 규모 자동 조정, 일회성 반복 규모 조정 작업 일정 예약
- ECS, EC2 스팟 플릿, EMR 클러스터, DynamoDB 등등
Predictive Scaling
트래픽 패턴 기록 검토, 미래 예측하여 적절한 시간에 EC2 인스턴스 수 변경 예약
- 기계학습 모델 사용
규모 조정 계획
여러 AWS 리소스에 대한 일련의 규모 조정 지침
- EC2 리소스 선택
- 추적할 리소스 사용 지표 & 추적할 값 설정
- 입력 트래픽 흐름을 나타내는 CloudWatch 지표 선택
Elastic Beanstalk
개발자가 손쉽게 AWS 클라우드에서 애플리케이션을 신속하게 배포하고 관리
개발자가 애플리케이션을 업로드하면 자동으로 용량 프로비저닝, 부하 분산, Auto-Scaling, 애플리케이션 상태 모니터링 등 배포 세부 정보 처리
- 여러 개발 스택과 프로그래밍 언어 지원, 확장 가능
이미지를 통해 배포에 초점
✔ POINT
-
관리 플랫폼
-
세부 정보 자동 처리 > 애플리케이션 버전 실행 환경
-
배포 가능한 코드 업로드 > 나머지 처리
-
컨테이너, Paas는 프로그래밍 부담 ⬇, but 개발자가 유연성과 제어력을 활발히 발휘하기 어려움
제어
- 운영 체제 선택
- EC2 인스턴스 선택 (온디맨드, 예약, 스팟)
- 사용 가능한 여러 데이터베이스 및 스토리지 선택
- HTTPS 프로토콜 >보안 강화
- 서버 설정(JVM 등) 조정, 환경 변수 전달
- 메모리 캐시 서비스와 같은 다른 애플리케이션 구성 요소 EC2 나란히 실행
저장 (to S3)
- 애플리케이션 파일
- (선택) 서버 로그 파일
- 이미지(애플리케이션 데이터)
ECS
:cloud: Clastic Container Service
컨테이너를 실행하는 고도로 안전하고, 안정적이고, 확장 가능한 방식
완전 관리형 컨테이너 오케스트레이션 서비스
Docker 컨테이너를 지원하는 확장성과 성능이 뛰어난 컨테이너 관리 서비스
- EC2 인스턴스의 관리형 클러스터에서 애플리케이션을 손쉽게 실행
Docker에 맞춰 이미지 조정
성능
- 자체 클러스터 관리 인프라 설치, 운영, 확장 :x:
- 간단한 API 호출 > 컨테이너가 활성화된 애플리케이션 실행/중지
- 여러 기능 액세스 :o:
- 리소스 필요 사항과 가용성 요구 사항에 따라 클러스터 전체 컨테이너를 배치할 일정 수립 :o:
이유
- 간편하게 컨테이너를 애플리케이션의 빌딩 블록으로 사용
- Docker컨테이너 사용 > 장기 실행 앱, 서비스 및 배치 프로세스 예약
- 가용성 유지 관리
- 애플리케이션 용량 요구 사항에 따라 컨테이너 규모 확장/축소
- DBS, DLB, VPC, IAM 등 기능 통합
Lambda
백엔드 서비스, 서버를 프로비저닝하거나 관리할 필요 없이 코드 실행
코드 업로드하면 Lambda에서 높은 가용성으로 코드 실행 및 확장에 필요한 것 처리
서버리스 컴퓨팅
서버를 고려하지 않고 애플리케이션과 서비스 구축
- 모든 서버 관리를 AWS에서 수행
- 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있도록 지원 (Lambda)
사용
-
S3 버킷 변경, DynamoDB 테이블 업데이트, 애플리케이션이나 디바이스에서 생성한 사용자 지정 이벤트에 대한 응답으로 손쉽게 코드 실행
-
자체 인스턴스를 프로비저닝 :x:
-
용량 프로비저닝, 서버 상태 모니터링, 기본 컴퓨팅 리소스에 보안 패치 적용, 코드 배포, 웹 서비스 프런트엔드 실행, 코드 모니터링과 로깅
:point_right: 모든 운영 및 관리 작업 수행
-
코드 확장 용이, 고가용성, 사용자가 별도의 작업:x:
✔ POINT
- 인프라 액세스 :x:
- 코드 분리
- 자체 리소스와 파일 시스템 보기 실행
- 인프라와 실행 수준에서 보안과 분리 제공
- 코드 보호
- S3에 코드 저장, 저장된 데이터 암호화
- 코드를 사용하는 동안만 추가 무결성 검사 수행
Lambda 함수
- Lambda에서 실행하는 코드는 'Lambda 함수'로 업로드
- 함수에는 이름, 설명, 진입점, 리소스 요구 사항 등 연관된 구성 정보 포함
- 코드 = '상태 비저장' 스타일 :point_right: 기본 컴퓨팅 인프라에 대한 선호도가 없다고 가정
- :grey_question: 상태 비저장
- AWS Lambda에서 필요한 만큼 함수 사본을 빠르게 시작
- 수신 이벤트 비율에 따라 조정
- 코드에서 S3 등 다른 웹 서비스 호출하면 상태 저장 데이터에 엑세스
- :grey_question: 상태 비저장
- 아티팩트 요청 수민 기간 이상 확장 :x:
- S3, DynamoDB, 인터넷 사용 스토리지 서비스에 지속 상태 저장
- 라이브러리 포함 :o:
- 인스턴스 재사용 :o:
✔ POINT
-
가용성 :+1:
- 복제 및 중복성 사용
-
스레드와 프로세스 사용 :o:
-
제한 사항
- 인바운드 네트워크 연결 차단 > 아웃바운드 연결 전용 TCP/IP 및 UDP/IP 소켓만 지원
- 디버깅 시스템 호출 차단
- TCP 포트 25트래픽 차단
-
Lambda 콘솔의 코드 편집기를 사용해 Node.js 또는 Python을 사용하여 코드 작성 및 테스트 가능
-
환경 변수 지원 :o:
- 민감한 정보는 암호문으로 저장하는 것이 좋음 (Key Management Service 사용)
-
콘솔의 대시보드 사용
-
함수 간 코드 공유 가능 :point_right: Lambda Layer
-
CloudWatch를 통해 모니터링
-
자동 확장
-
함수에 사용할 메모리 양 선택 :point_right: 컴퓨팅 리소스 자동 할당
-
버전 관리 :o:
이벤트 처리
이벤트 소스
Lambda 함수를 실행하도록 트리거하는 이벤트를 생성하는 AWS 서비스나 앱
- Lambda에 이벤트를 게시하지 않는 다른 서비스에서 리소스 폴링 :o:
- Lambda 함수에 이벤트 입력 파라미터로 전달
- 이벤트가 배치로 수신되는 이벤트 소스
- 요청한 배치 크기에 따라 이벤트 파라미터가 단일 호출에 여러 이벤트 포함
- 이벤트가 배치로 수신되는 이벤트 소스
서버리스 애플리케이션
이벤트에 의해 트리거되는 함수로 구성
- S3로 객체 업로드, SNS 알림 또는 API 작업과 같은 이벤트에 의해 트리거되는 하나 이상의 함수로 구성
- 독립적으로 함수 실행, DynamoDB 테이블 또는 S3 버킷과 같이 다른 리소스 활용 가능
- Serverless Application Model (SAM)을 사용해 배포/관리
- 배포 자동화
- CodePipeline
- CodeDeploy
프로비저닝된 동시성
서버리스 애플리케이션 성능을 강력하게 제어, 극도의 준비 상태
- 대기 시간에 민감한 애플리케이션 구축에 좋음
Lambda용 EFS
온디맨드로 확장할 수 있는 탄력적인 완전관리형 NFS 시스템을 사용하여 대요량의 데이터를 읽고, 쓰고, 유지 가능
:point_right: 관리 할 필요 :x:
-
개발자는 처리할 데이터를 임시 스토리지로 다운로드하기 위한 코드 작성 :x;
-
VPC의 서브넷과 연결
Lambda@Edge
서버를 프로비저닝하거나 관리하지 않고 글로벌 AWS 엣지 로케이션에서 코드 실행 :o:
가장 짧은 네트워크 지연 시간으로 최종 사용자에게 응답
- 최종 사용자가 전 세계에 분산되어 있고 지연 시간에 민감한 사용 사례에 최적화
- CloudFront 엣지에서 제공 필요
'IT > AWS' 카테고리의 다른 글
Serverless with AWS Lambda (1) (0) | 2021.01.26 |
---|---|
AWS Python 연결 - Boto3 (1) | 2021.01.25 |
AWS Storage 종류 (0) | 2021.01.20 |
AWS Network 종류 (0) | 2021.01.20 |
Landing Zone (0) | 2021.01.19 |