이 글은 24년 하반기 AWS Certified Solutions Architect - Associate(이하 AWS SAA-C03) 자격증 취득을 위해서 아래 유데미 강의를 보고, 공부한 내용을 정리하였습니다.
https://www.udemy.com/course/best-aws-certified-solutions-architect-associate
AWS 예산 설정
Billing and Cost Management : 초기에 IAM 유저가 못보게 제한되어 있음 -> Root 에서 권한을 풀어줘야함
Bills : 서비스별 월 별 요금 확인 가능
Free Tier : 무료로 사용 가능한 양과 지금 쓴 양을 비교 가능
Budgets : 설정한 예산에 따라 이메일 오게 만듬
EC2 기초
EC2(Elastic Compute Cloud)
IaaS... EC2는 하나의 서비스가 아닌 아래의 것들을 포함하는 개념.
- 가상 머신을 EC2에서 임대할 수 있음 : EC2 인스턴스
- 데이터를 가상 드라이브에 저장 가능 : EBS 볼륨
- 로드를 분산시킬 수 있음, 로드밸런싱 : ELB(일래스틱 로드 밸런서)
- 서비스 확장 가능 : ASG(오토 스케일링 그룹)
클라우드는 필요할 때마다 컴퓨팅을 대여할 수 있다
EC2에서 선택할 수 있는 것
OS : 리눅스, Window, MAC
CPU : compute power & cores
RAM : memory 양
storage space : Network-attached( EBS & EFS ) / Hardware (EC2 Instance Store)
Network card : speed of the card, public IP
Firewall rules : security group
Bootstrap script (첫 시작 때 설정) : EC2 User Data
bootstrapping : 시작할 때 한번만 실행되는 commands로 EC2 User data script 를 사용할 수 있다.
- EC2 User Data Script는 root 계정에서 실행됨
EC2 instance type 선택 가능.. 본인 어플리케이션에 적합한 것으로 주문
EC2 인스턴스 생성 : EC2 - Instances - launch an instance
- 키페어 : .pem(리눅스, win10+, mac) .ppk(win7,8)
- 기본적으로 EBS는 인스턴스 삭제시 같이 삭제되게 세팅됨
- 사용자 데이터 : 시작할 때 세팅될 shell script임
Instance Stop 하면 AWS는 Stop한 시간에 대해서는 요금 부과 X.. 단, 다시 시작시 public IP는 바뀌게 됨(private IP는 안바뀜)
Terminate Instance 하면 삭제가 됨
`EC2 Instance Types - Overview
- 7개의 Instance Type이 있고, 각 Type에는 여러 제품 군이 있음
- naming convention : ex) m5.2xlarge
- m : instance class
- 5 : generation
- 2xlarge : instance class 안에서 크기(클 수록 더 많은 메모리와 CPU를 가짐)
General Purpose(범용 인스턴스) : 웹 서버나 코드 저장소와 같은 다양한 작업에 맞음, 컴퓨팅/메모리/네트워크 간의 밸런스가 좋음 (ex. t2.micro)
Compute Optimized(컴퓨팅 최적화 인스턴스, 'C'로 시작하는 Naming) : 고성능 프로세서로 일부 데이터의 일괄처리(Batch processing), Media transcoding, 고성능 웹서버, 고성능 컴퓨팅(HPC), 머신 러닝, 전용 게임 서버
Memory Optimized(메모리 최적화, 'R'로 시작하는 Naming+X1,Z1) : 대규모 데이터셋을 처리하는 유형에 빠른 성능을 가짐... 고성능의 관계형/비관계형 데이터베이스, 일라스틱 캐시(분산 웹스케일 캐시 저장소), BI(business intelligence), 대규모 비정형 데이터 실시간 처리
Storage Optimized(스토리지 최적화, 'I', 'D', 'H1'으로 시작하는 Naming) : 로컬 스토리지에서 대규모의 데이터셋에 액세스할 때 적합함... 고주파 온라인 트랜잭션 처리(OLTP) 시스템, 관계형 & NoSQL 데이터베이스, in-memory DB(Redis), 데이터 웨어하우징 어플리케이션, 분산 파일 시스템
Security Groups(보안 그룹)
네트워크 보안의 기본, EC2 안밖으로 트래픽 허용방식 결정
- allow rule만 있음, IP나 다른 security group을 참조함
- Inbound traffic (밖 -> 안) / Outbound traffic(안 -> 밖)
- Ports, IP범위(IPv4, IPv6) 제어
- 0.0.0.0/0 는 모든 것 의미
보안그룹과 인스턴스 사이에는 N:M 관계
보안 그룹은 특정 지역과 VPC 조합에서만 제한됨 -> 다른 지역이나 VPC에서는 보안그룹을 다시 생성
SG는 EC2 밖에 있어서 트래픽이 차단되면 EC2인스턴스는 트래픽을 볼 수도 없음
- SSH 액세스를 위해서 별도의 보안 그룹을 하나 유지하는게 좋음
Time out 나면 SG 문제일 가능성 높음, 연결 거부되면 SG는 통과했고 내부 어플리케이션 error일 가능성 높음
다른 SG를 참조하기
EC2 인스턴스의 IP와 관계없이 올바른 보안 그룹을 연결해서 다른 인스턴스와 직접 통신 가능
ex) A인스턴스에서 SG1을 갖고 있고, SG1에서 SG1, SG2를 허용하고 있다면, SG2가 연결된 B인스턴스에서 인스턴스 IP와 관계없이 직접 통신이 가능함... SG1이 연결된 C인스턴스도 마찬가지
Well Known Ports : 22(SSH), 21(FTP), 22(SFTP, 안전한 파일전송 프로토콜), 80(HTTP), 443(HTTPS), 3389(RDP, 윈도우 인스턴스에 연결)
SSH 요약
터미널이나 명령줄을 이용하여 원격 머신이나 서버를 제어할 수 있게 해줌
SSH : Mac, Linux, Win10+
Putty : 모든 버전 Windows
EC2 Instance Connect : 모든 OS에서 웹 브라우저를 이용함(Amazon Linux에서만 동작)
접속 방법 : ssh -i key_pair.pem ec2-user@public_IP
* 초기에 Amazon Linux OS에는 ec2-user라는 사용자 존재
* 이때 pem permission은 chmod 0400 으로 바꿔줘야함
EC2 Instance Connect 로 웹에서 접속도 가능
EC2 인스턴스 IAM Role
- EC2 인스턴스 내부에서 aws configure를 통해 개인정보 입력시, 누구라도 EC2에 접속해서 자격 증명 정보를 획득할 수 있음 (즉, 좋지 않은 방법)
- IAM Role을 부여해서 자격 증명을 할 수 있게 해야함
IAM Role 추가 방법 : EC2 - 인스턴스 선택 - Action(작업) - Security - IAM 역할 수정
EC2 인스턴스 구매 옵션
On-Demand 인스턴스 : 단기적 워크로드에 좋음, 필요한 대로 인스턴스 실행, 비용 예측 가능, 초 단위 요금 지불
- linux, windows : 1분 이후에 초 단위로 쓴만큼 청구됨 / 나머지 OS : 1시간 단위로 청구됨
- 초기 비용 X, 장기 약정도 X
- 단기적이고 중단없는 워크로드가 필요할 때, 애플리케이션의 거동을 예측할 수 없을 때 사용
Reserved 인스턴스 (예약 인스턴스) : 장기간의 워크로드를 위한 것, 오랫동안 DB를 실행할 계획
- 온디맨드에 비해 72% 할인 제공
- 특정한 인스턴스 속성(type, region, tenancy, OS) 예약
- 1년/3년 단위로 선결제/부분선결제/선결제없음 선택할 수 있음, 전체 선결제시 최대할인
- 범위를 특정 리전이나 zone으로 할 수 있음
- 사용량이 일정한 DB와 같은 애플리케이션에 사용하는게 좋음
- 마켓플레이스에서 사고 팔 수 있음
- Convertible Reserved 인스턴스(전환형 예약 인스턴스) : 유연한 인스턴스 타입 가능
- 속성 변경 가능.. 할인은 약간 적음(최대 66%)
Saving Plans: 달러 단위로 특정한 사용량을 약정, 장기 워크로드(즉, 돈을 픽스해두는거)
- 장기간 사용하면 72%까지 할인
- 1 or 3년을 시간당 10$로 약정
- 사용량이 한도를 넘으면 온디맨드 가격으로 청구
- 특정 인스턴스, 패밀리, 리전으로 고정됨 / instance size, os, tenancy는 전환 가능
Spot Instance : 초단기 워크로드, 저렴하지만, 인스턴스들이 손실될 수 있어 신뢰성 낮음
- 최대 90%까지 할인
- Spot 인스턴스에 지불할 최대 가격을 정의하고, 만약 그 가격보다 높아지면 인스턴스 손시로딤
- 가장 비용 효율적이고, 고장에 대한 회복력이 있다면 유용함
- Batch jobs, Data analysis, Image processing, 분산형 워크로드, 시작과 종료가 유연한 작업
`- 단 중요한 작업이나 DB에는 적절하지 않음
Dedicated Host(전용 호스트) : 물리적 서버 전체를 예약해서 인스턴스 배치를 제어 가능
- 온디맨드, 예약 둘 다 가능
- 가장 비싼 옵션
- 활용 사례 : 라이센싱 모델과 함께 제공되는 SW의 경우 즉 BYOL(Bring Uour Own License, ex) 소켓, 코어, VM 소프트웨어 ), 법규를 반드시 준수해야하는 회사
Dedicated Instance(전용 인스턴스) : 다른 고객과 하드웨어를 공유하지 않음
- 전용 하드웨어에서 실행.. 물리적 서버와는 다름
- 같은 계정에서 다른 인스턴스와 함께 하드웨어 공유 가능
- 인스턴스 배치에 관한 통제권이 있음
`Dedicated Host : 물리적 서버 자체에 대한 접근권을 갖고, 낮은 수준의 하드웨어에 대한 가시성 제공
`Dedicated Instance : 자신만의 인스턴스를 자신만의 하드웨어에 갖는다는 것
Capacity Reservations(용량 예약) : 원하는 기간 동안 특정 AZ에 용량 예약 가능
- 필요할 때마다 용량에 접근 가능
- 기간에 대한 약정은 없어서, 언제라도 용량을 예약하고 취소할 수 있음
- 청구할인도 없어서, 그저 용량을 예약하는게 유일한 목적임
- 인스턴스 실행여부와 무관하게 온디맨드 요금 부과
- 할인받고 싶으면 예약 인스턴스나 절약 플랜과 결합해야함
- 특정한 AZ에 있어야하는 단기적이고 중단없는 워크로드에 적합
Spot Instance 요청
최대 스팟 가격을 정의하고, 지금 가격이 그보다 낮다면 해당 인스턴스를 유지함
- 시간당 스팟은 오퍼와 용량에 따라 달라짐
- 만약 현재 스팟 가격이 최대 가격 초과시 2분의 유예기간을 주고 양자 택일 가능
- 인스턴스를 중지(가격이 내려가면 다시 시작) / 인스턴스 종료(다음엔 새로운 EC2로 시작)
- [Deprecated] 스팟 인스턴스를 회수당하지 않으려면, 스팟 블록 이용 가능 : 스팟 블록은 지정 기간동안 스팟 인스턴스를 차단하는 것.. 1~6시간 까지 가능하고, 그동안 중단 없이 해당 블록 사용 가능, 드물게 회수되는 경우 있음
- AZ에 따라 스팟 가격은 달라짐
스팟 인스턴스 종료 방법
스팟 인스턴스는 일회성 요청을 하거나, 영구 인스턴스 요청을 할 수 있음
일회성 요청 : 스팟 요청 완료되는 즉시 인스턴스 시작(스팟 요청은 사라짐)
영구 요청 : 스팟 요청이 유효한 기간 동안 스팟 인스턴스가 중단되어도 다시 스팟 요청이 생성됨
` - 영구요청시 스팟 인스턴스를 종료하는게 아닌, 스팟 요청을 먼저 취소하고나서 스팟 인스턴스를 종료해야 완전히 종료가 됨
Spot Fleets
* 스팟 플릿을 사용하면 여러 개의 런치 풀과 여러 인스턴스 유형 정의 가능
스팟 인스턴스 세트를 정의하는 방법 (optional, + 온디멘드 인스턴스 세트도 같이 정의 가능)
정의한 가격 제한으로 목표 용량을 줄이기 위해 노력함
- 가능한 런치 풀을 정의 : instance type, OS, AZ
- 플릿이 가장 적합한 런치 풀을 선택함
- 스팟 플릿이 예산에 도달하거나, 원하는 용량에 도달하면 인스턴스 시작을 중단함
- 장점 : 스팟 플릿은 스팟 인스턴스를 기반으로 추가 비용 절감 가능
`스팟 플릿에 스팟 인스턴스를 할당하는 전략
- 1. lowestPrice(최저가격) : 스팟 플릿은 가장 낮은 가격인 풀에서 인스턴스를 시작 (비용 최적화, 워크로드가 짧을 때 좋은 옵션)
- 2. diversified(* 다양한) 다양한 방법으로 스팟 인스턴스 실행 : 정의한 모든 풀에 분산 (가용성과 긴 워크로드에 적합.. 한 풀이 사라져도 다른 풀이 활성화되있기 때문)
- 3. capacity Optimized(용량 최적화) : 원하는 인스턴스 수에 맞는 최적의 용량을 가진 풀을 가짐
- 4. priceCapacity Optimized(가격 용량 최적화) : 먼저 사용 가능한 용량이 가장 큰 풀을 선택하고 그 중 가격이 가장 낮은 풀을 선택하는 방식(대부분 워크로드에서 적합한 방법)
* Spot Instance 요청 하는 경우 : 원하는 인스턴스 유형과 AZ를 정확히 알고 있는 경우
* Spot Fleets 요청하는 경우 : 조건(ex. 낮은 가격)을 만족하는 모든 인스턴스 유형과 모든 AZ를 선택하라는 것..
spot instance는 온디맨드 만들 때처럼 하다가 옵션에서 spot instance 선택하면 되고, spot request에서 요청하면 Spot Fleet으로 요청됨
EC2 - SAA level
공용 IP vs 사설 IP
AWS는 IPv4, 6을 둘 다 지원함(IPv6은 주로 사물 인터넷에 많이 쓰임)
IPv4는 3.7B(37억)개의 서로 다른 주소 허용.. 거의 고갈되어감
사설 네트워크 내에서는 사설 IP를 써서 서로 통신 가능
공용 게이트웨이인 인터넷게이트 웨이를 이용해서, 사설 망에서 www으로 액세스 가능
Public IP : 기기가 인터넷 상에서 식별될 수 있음을 의미, 전체 웹에서 유일함
Private IP : 오직 사설 네트워크 안에서 식별되고, 그 안에서만 유일하면 됨
- NAT 장치와 프록시 역할을 할 인터넷 게이트 웨이를 통해서 인터넷에 연결됨
- 지정된 범위의 IP만 사설 IP로 사용 가능
Elastic IP
- EC2 인스턴스를 시작하고 중지할 때 공용 IP를 바꿀 수 있음
- 인스턴스에 고정된 공용 IP를 쓰려면 Elastic IP(공용 IPv4)가 필요
- 삭제하지 않으면 계속 유지되고, 한번에 한 인스턴스에서만 연결 가능
- 탄력적 IP 주소를 쓰면, 한 인스턴스에서 다른 인스턴스로 빠르게 이동시켜, 인스턴스나 소프트웨어의 오류를 마스킹할 때 사용 가능..
- 계정당 5개까지만 쓸 수 있음(AWS에 더 달라고 할 수 는 있음)
Elastic IP는 지양하는게 좋음
- 좋지않은 아키텍쳐 결정으로 언급됨
- 임의의 공용 IP를 써서 DNS 이름을 할당하는게 좋음
- 로드 밸런서를 사용해서 공용 IP를 사용하지 않을 수도 있음(최상이 패턴)
VPN이 없다면 공용 IP만 사용 가능
기기가 멈췄다가 재시작하면 공용 IP가 바뀔 수 있음
- 탄력적 IP는 이런 경우에 공용 IP를 유지할 수 있음
- 단, 탄력적 IP는 쓰던 안쓰던 생성만해도 약 3.5$/월 의 비용발생(프리티어에서 1달 750시간은 무료)
EC2 Placement Groups(배치 그룹)
EC2 인스턴스가 AWS 인프라에 배치되는 방식을 제어할 때 사용
배치 그룹을 이용해서 전략 정의 가능
- 1. Cluster(클러스터) : 단일 AZ에서 지연 시간이 짧은 하드웨어 설정으로 인스턴스를 그룹화
- 모든 EC2가 동일한 AZ에 있음.
- 장점 : 인스턴스간 좋은 네트워크가 장점(10Gbps 대역폭), 지연 시간이 짧고 처리량이 많은 네트워크 확보 가능
- 단점 : AZ에 장애가 발생하면, 모든 인스턴스 동시에 장애
- 사례 : 빠른 네트워킹이 필요한 빅데이터 작업, 애플리케이션의 각 인스턴스 간 지연 시간이 매우 짧고 처리량이 많은 네트워크가 필요할 때
- 2. Spread(분산) : 모든 EC2 인스턴스가 다른 하드웨어에 분산됨
- AZ별로 분산된 배치그룹 당 7개의 인스턴스만 가질 수 있다는 제약 존재
- 크리티컬 애플리케이션이 있을 때, 분산 배치 그룹을 이용함
- 장점 : 동시 실패의 위험이 감소
` - 단점 : 배치 그룹의 AZ 당 7개의 인스턴스로 제한(배치 그룹 규모에 제한)
- 사례 : 가용성 극대화, 위험 최소화 애플리케이션, 인스턴스 오류를 서로 격리해야하는 크리티컬 애플리케이션
- 3. Partition(분할) : 분산과 비슷하지만, 여러 파티션에 인스턴스가 분할되어 있고, 파티션은 AZ 내의 다양한 하드웨어 랙 세트에 의존하게 됨
- 인스턴스가 분산되어 있지만, 다른 실패로 부터 격리되지 않음, 하지만 파티션은 다른 오류 파티션과 격리됨
- 그룹 당 수백 개의 EC2 인스턴스를 통해 확장 가능(하둡, 카산드라, 카프카와 같은 애플리케이션 실행 가능)
- AZ 당 최대 7개의 파티션(=AWS의 HW 랙)이 있을 수 있음(파티션 안에 인스턴스 수는 100개+), 리전 내 여러 AZ에 생성 가능
- metadata 서비스를 이용해 각 인스턴스가 어느 파티션에 위치하는지 알 수 있음
- 사례 : 파티션들 전반에 거렻 데이터와 서버를 퍼뜨려 두도록, 파티션 인식이 가능한 애플리케이션의 경우에 사용할 수 있음(HDFS, HBase, Cassandra, Apache Kafka : 빅데이터 어플리케이션)
배치 그룹 사용 : EC2 - 배치 그룹 - 배치 그룹 생성.. - 인스턴스 - 인스턴스 생성 - 고급 - 배치 그룹 이름 선택
ENI(탄력적 네트워크 인터페이스)
VPC의 논리적 구성요소이며, 가상 네트워크 카드를 나타냄
ENI는 EC2 인스턴스가 네트워크에 액세스할 수 있게 함
ex) 한 AZ에 EC2 인스턴스가 기본 ENI인 Eth0에 연결되어, 사설 IP로 네트워크 연결을 제공함
언제든지, 다른 사설 IP로 새로운 ENI인 Eth1 추가 가능
ENI 속성
- primary 사설 IPv4를 가지고, 하나 이상의 secondary IPv4를 가질 수 있음
- 각 ENI는 사설 IPv4당 탄력적 IPv4를 갖거나, 하나의 공용 IPv4를 가질 수 있음
- 즉, 사설/공용 IP가 하나씩 제공됨
- 한 개 이상의 SG를 연결할 수도 있음
- MAC 주소도 연결 가능
EC2 인스턴스와 독립적으로 ENI를 생성하고 즉시 연결하거나, 장애 조치를 위해 EC2 인스턴스에서 땔 수도 있다. ENI는 특정 AZ에 바인딩됨(다른 AZ에서는 못씀)
즉, 장애가 생겼을 때 사설 IP 자체를 다른 인스턴스로 이동시킬 수 있는 것
사설 정적IP로 EC2에 접근할 때 장애 조치를 위해 유용함
EC2 Hibernate(절전모드)
- EC2 Stop : EBS 디스크는 다시 시작할 때까지 그대로 유지
- EC2 Terminate : root 볼륨이 삭제되게 설정되었다면 삭제됨
EC2 최초 시작 : OS boots & EC2 User Data Script 런 -> 시간이 걸림
EC2 Hibernate
- 인메모리(RAM) 상태가 보존됨 == 인스턴스 부팅이 더 빨라짐(OS가 멈추거나 재시작하는게 아니라 그대로 멈춘거임)
- 백그라운드에서 RAM에 기록되었던 인 메모리 상태는 root 경로의 EBS 볼륨에 기록됨
- 루트 EBS 볼륨은 암호화됨
- 단, RAM을 기록할만큼 EBS 용량 충분해야함
- 과정 : EC2 중지 -> RAM 내용은 EBS 볼륨에 덤프됨 -> EC2 종료 -> 재시작시 디스크에서 RAM을 불러와 EC2 인스턴스 메모리로 가져옴
- 사례 : long-running processing, RAM 상태를 저장하고 싶을 때, 빠르게 재부팅하고 싶을 때
- 많은 인스턴스 제품군에서 지원함
- 인스턴스 RAM 크기는 150GB 이하여야함
- 베어 메탈 인스턴스는 불가능
- AMI는 리눅스, 윈도우 등등
- 루트볼륨은 무조건 EBS여야하고, 암호화 필요, 충분한 용량 필요
- 온디맨드, 예약, 스팟 인스턴스 다 가능
- 최대 60일까지 사용 가능
인스턴스 생성시 Stop - Hibernate behavior을 활성화하고, EBS 볼륨의 암호화를 Yes해야 절전 모드로 둘 수 있음