aws - ec2
udemy의 aws-certified-solutions-architect-associate-saa-c03 강의 내용 정리
EC2
인스턴스가 시작될 때 실행할 EC2 User Data Script를 정의할 수 있다. 이 스크립트는 root권한으로 실행된다.
인스턴스를 만들때는 보안그룹을 할당하거나 생성하는데, ssh 트래픽을 허용/ 특정 ip에서 허용하거나, 인터넷에서 http 트래픽 허용 / 인터넷에서 https 트래픽 허용 등의 옵션을 사용할 수 있다.
“고급 세부 정보” 메뉴에 User Data Script를 정의할 수 있는데, 다음과 같은 시스템 시작시 실행될 스크립트이다.
yum update -y
yum install httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello world from $(hostname -f)</h1>" > /var/www/html/index.html
참고로 인스턴스를 재시작할 때마다 공개 ip는 변경된다. 비공개 ip는 변경되지 않는다.
ec2 인스턴스 타입
- t: general
- C: compute-optimized(연산 최적화)
- R, x1, high memory : memory-optimized(메모리 최적화, 메모리 내에서 대량 데이터 처리하는 데에 적합)
보안 그룹
- 인바운드 규칙과 아웃바운드 규칙이 있음
- 하나의 규칙은 적용할 대상 ip와 포트를 지정할 수 있음
- 하나의 ssh 연결에 하나의 보안그룹을 만드는게 좋음
보안 그룹 인바운드 규칙에서 다른 보안 그룹을 참조할 수 있음. 이렇게 하면 ip를 직접 설정하지 않아도 해당 보안 그룹을 사용하는 인스턴스들을 허용하게 됨. 참고로 프로토콜에 따라서(SSH, FTP, SFTP, HTTP) 기본 포트가 할당되어 있다.
SFTP는 SSH를 사용한 파일 전송 프로토콜이므로 알아두자
만약 ec2 인스턴스에 접근할 때 타임아웃이 걸린다면, 이는 거의 100% 보안 그룹의 문제이다.
인스턴스 형태
- 온디맨드 - 사용한 만큼 결제
모든 할인은 온디맨드에 대한 비율임
- Reserved - 72%가량 할인, 특정 인스턴스 타입을 지정하여 정해진 기간 사용하는 형태. 1년 혹은 3년 기간을 사용하며 장기간 사용일 수록, 선불로 지급 할 수록 할인율이 높아짐
- Saving Plan - 한시간에 $10 으로 3년 사용 등으로, 사용 형태를 지정하여 장기간 결제하는 것. 인스턴스 패밀리 와 aws 리전을 고정함. 그러나 인스턴스 크기, OS, 소유권 형태 등을 변경할 수 있음
- Spot Instance - 가장 비용 효율적인 인스턴스 형태. 그러나 지정한 최대 가격 이상의 spot price가 발생하면 인스턴스가 종료됨. 배치 , 이미지 프로세싱 등의 ‘결과가 크리티컬하지 않은’ 작업에 적합함
spot request
는 단일 spot instance를 요청할 수 있으며, 정해진 개수의 spot instance를 기간 동안 유지하도록 계속해서 요청할 수 있다 이 경우 request를 먼저 중지한 후 인스턴스를 직접 종료해야 한다(먼저 종료할 시 request가 새롭게 인스턴스를 다시 생성하므로)
spot fleet
은 스팟 인스턴스 의 그룹을 요청하는 것으로 원하는 인스턴스 타입 , OS, AZ등을 설정하여 capacity를 일정하게 유지할 수 있다. launch pool을 여러개 요청할 수도 있다.
private IP -> www(인터넷)과 NAT+게이트웨이를 합친 프록시를 통해 연결. NAT란 public ip를 private ip로 변환해주는 기기, 게이트웨이는 패킷을 실제로 연결해주는 역할
public ip-> www(인터넷)에서 식별가능한 ip.
기본적으로 ec2 인스턴스를 시작,종료할 때마다 공개 ip는 변경된다. 이 때, 고정된 public ip를 사용하고 싶다면, aws의 Elastic IP를 사용할 수 있다. Elastic IP는 계정당 5개 사용이 가능하며, 개수를 더 늘리도록 요청할 수 있다. 하지만 elastic ip는 사용하지 않는 것이 좋으며, route 53과 별도의 도메인 이름을 사용하거나, 로드 밸런서를 사용하면 아예 ip를 신경쓰지 않을 수도 있다.
ec2 배치 그룹 placement group 2가지 유형
Clustered
- 단일 AZ에 저지연률의 인스턴스 그룹을 배치. 동일 rack에서 작동하므로 네트워크 효율이 높으나 하드웨어 고장에 취약하다. 가용서잉 낮음Spread
- 여러 AZ 인스턴스들을 나누어 배치하여 가용성을 높일 수 있으나, 배치 그룹에서 AZ당 7개의 인스턴스 제한이 존재함. 모든 인스턴스는 별도의 rack에 배치됨Partition
- 하나의 rack에서 (동일 하드웨어) 구동하는 여러 인스턴스들을 하나의 Partition이라고 하고, 하나의 AZ에 최대 7개의 파티션을 배치가능. 서로 다른 Partition에 있는 인스턴스들은 고장에 영향받지 않음.
ENI
elastic network interface의 약자
- 여러 프라이빗 ip, (primary는 1개)
- 하나의 퍼블릭 ip
- 하나의 엘라스틱 (동적) ip
- 여러 보안 그룹
- MAC 주소
등을 가질 수 있고, ec2 인스턴스에 자유롭게 적용할 수 있음. 따라서 고정된 ip를 사용하는 ec2 인스턴스의 failover의 경우 ENI를 다른 인스턴스에 적용하여 가용성을 높임. AZ에 귀속된다. 기본적으로 인스턴스를 생성할 때 ENI가 자동으로 적용된다. ENI는 하나의 인스턴스에 여러개 사용할 수도 있다.
EC2 Hibernate
인스턴스의 ram 상태(OS 포함)를 루트 EBS 볼륨에 덮어 씀으로써 인스턴스 종료에 관계없이 상태를 유지한다. 인스턴스의 부팅 속도가 향상된다. 단 이 때 루트 EBS 볼륨은 암호화 설정이 적용되어 있어야 한다. 이 때 루트 EBS 볼륨의 크기가 인스턴스 RAM 크기보다 커야 하며, 생성시에 hibernate 동적을 enable 해야한다. 생성된 인스턴스를 작업 칸에서 hibernate하면 ebs에 램 상태가 덤프된다. 유일한 제한사항은 램 크기가 150gb, 루트 볼륨 타입이 EBS 여야 한다는 점 뿐이다.
EBS 볼륨
인스턴스 데이터의 영속화를 위해 사용되는 네트워크 드라이브로, Elastic Block Store의 약자. EBS 볼륨은 AZ에 귀속된다. 프리티어는 30GB의 SSD 타입이다. 네트워트 드라이브의 특성상 약간의 지연율이 있으며, 인스턴스에서 자유롭게 연결 및 분리할 수 있다. 하나의 인스턴스에 여러 볼륨을 연결하는 것도 가능하다. 인스턴스의 루트 EBS 볼륨은 디폴트로 인스턴스 종료시 삭제되고, 기타 부착된 볼륨은 삭제되지 않지만 설정에서 이를 변경할 수 있다.
EBS 스냅샷
EBS 볼륨의 백업을 원하는 시점에 생성하는 기능. 이 때 볼륨을 분리할 필요는 없지만 분리하는 것이 권장되는 프랙티스이다. EBS 스냅샷을 ‘아카이브 티어’ 로 사용할 수 있다. 이를 사용하면 스냅샷을 저장할 때 아카이브를 사용하며 스냅샷 비용이 75% 절감되지만 저장 완료에 24~72시간이 소요된다. 또한 EBS 스냅샷은 삭제 후 이를 복구할 수 있다. FSR(빠른 스냅샷 복구) 기능을 사용하면 큰 크기의 스냅샷 이미지를 빠르게 초기화할 수 있지만 비용이 적지 않게 발생한다.
EBS AMI
Amazon Machine Image의 약자로, 원하는 EC2 인스턴스의 이미지를 커스텀하는 기능이다. 원하는 소프트웨어, OS, 라이브러리 등이 미리 설치된 이미지를 만듦으로써 인스턴스 부팅 속도를 높일 수 있다. AWS가 제공하는 AMI, 직접 커스텀한 AMI, 마켓에 있는 타인이 만든 AMI를 구매하여 사용할 수도 있다.
EC2 인스턴스 스토리지
EBS는 네트워크 드라이브로 네트워크 지연율에 따라 성능이 제한된다. 따라서 그보다 더 높은 디스크 및 I/O 성능을 원할 때는 실제 하드웨어 서버에 생성되는 EC2 instance store 스토리지를 사용할 수 있다. 가상 드라이브이지만 실제 하드웨어에서 생성된다. 그러나 EC2 인스턴스 스토어는 영속성이 없고 인스턴스 종료와 함께 삭제되며, 하드웨어 고장에 따라 같이 고장나기 때문에 백업과 복제가 전적으로 유저의 책임이다. 따라서 캐시/버퍼 등의 용도로만 사용된다.
EBS 볼륨 유형
SSD/HDD 유형이 모두 있으며, 크기/처리량/I/O속도 등으로 구분된다.
-
gp2/gp3 -> 균형잡힌 SSD EBS볼륨
-
io1/io2 -> 높은 비용, 높은 처리량의 SSD EBS
-
st1 -> 저비용 높은 처리량의 HDD EBS
-
sc2 -> 가장 낮은 비용 낮은 처리량의 HDD EBS 루트 볼륨으로는 SSD만 선택할 수 있다.
-
gp3 와 gp2의 차이점 gp3는 i/o 성능과 처리량을 독립적으로 설정할 수 있지만 gp2는 불가(iops가 볼륨 사이즈에 비례함)
특정 수치 이상의 IOPS를 보장해야하거나 gp2 최대 iops인 16000iops 이상을 보장해야할 경우, 프로비저닝된 iops를 갖는 SSD인 io1 / io2를 사용해야함. io1/io2는 Nitro EC2에 대해 64000iops, 그 외의 ec2 유형에 대해서 32000iops를 보장하며, gp3처럼 저장용량과 관계없이 iops를 설정할 수 있다. 이보다 높은 io2 Block Express 유형도 있다.