본문 바로가기

AWS

가상머신을 그냥 준다고? Amazon EC2

728x90

보통의 경우, 온프레미스 서버를 생각해보자.

이를 실행하려면 서버를 구입하고 데이터센터를 구축하고, 직원을 배치하고, 유지관리를 수행해야한다..

피크 워크로드 즉, 서버가 최대로 처리할 수 있는 만큼의 하드웨어를 영구적으로 프로비저닝 해야한다

그러면 하루 대부분의 시간 동안 서버 용량이 사용되지 않아 서버가 낭비된다(돈 아까워!)

 

이와 다른 우리의 AWS EC2를 살펴보자

 

Amazon Elastic Compute Cloud : Amazon EC2

- 온프레미스 서버에서 실행하는 것과 동일한 애플리케이션을 호스팅할 수 있는 가상머신을 제공한다

- 안전하고 크기 조정이 가능한 컴퓨팅 용량을 클라우드에서 사용할 수 있다

- 사용 사례 : 애플리케이션 서버, 웹 서버, 데이터베이스 서버, 게임 서버 등등 수많은 서버로서의 사용이 가능하다

 

 

Amazon EC2

: 클라우드에서 VM(가상 머신)을 제공하는데 이러한 가상머신을 EC2 인스턴스라고 한다

 

  • Windows, Red Hat, SUSE, Ubuntu, Amazon Linux의 최신 버전을 포함한 대부분의 서버 운영체제가 지원됨
  • 전 세계 모든 위치의 원하는 가용 영역에서 필요한 수의 인스턴스를 짧은 시간 안에 시작할 수 있다
  • AMI(Amazon Machine Image)에서 인스턴스 시작
  • 인스턴스 안팎으로 전송되는 트래픽은 보안 그룹을 사용하여 제어할 수 있다

EC2는 AWS Management Console에서 인스턴스 시작을 통해 생성된다

1. AMI 선택

  • EC2 인스턴스를 시작할 때 사용할 Amazon Machine Image(AMI)를 선택해야 한다
  • AMI는 Windows, Linux 운영 체제가 포함되며 추가 소프트웨어가 미리 설치되는 경우가 많다
  • 목적에 따라 다른 AMI를 사용하여 인스턴스를 시작할 수 있다
  • 단일 AMI에서 여러 인스턴스 시작 가능

 

  • Quick Start : AWS에서 제공하는 Linux, Windows AMI 등 AWS가 미리 구축한 AMI가 포함됨
  • 나의 AMI : 사용자가 생성한 모든 AMI
  • AWS Marketplace : AMI에 내장된 수천가지 소프트웨어 솔루션에 대한 카탈로그가 제공됨(서드파티의 사전 구성된 템플릿)
  • 커뮤니티 AMI : 전세계 사용자가 생성한 AMI를 공유. AWS에서 확인하지 않아 사용에 따른 책임은 고객에게 있음

 

AMI 생성하는 법

1단계 : Quick Start같은 스타터 AMI에서 인스턴스 생성 or 온프레미스 데이터 센터에서 AMI로 전환한 후 가져온 가상머신에서 인스턴스 생성

 

2단계 : 수정되지 않은 인스턴스로 레이블이 지정된 인스턴스에 연결하고, 이 인스턴스 일부분을 수정할 수 있다

- 보안패치로 운영체제를 업데이트하는 스크립트를 실행하거나 python, java 등 기타 라이브러리 같은 소프트웨어를 설치하거나 업그레이드 할 수 있다

- 그러면 수정된 인스턴스가 생성됨.

 

3단계 : 수정된 인스턴스를 새 AMI로 캡처할 수 있음

- AMI를 생성할 때 EC2는 인스턴스를 중지하고 루트 볼륨 스냅샷을 생성한 다음 이 스냅샷을 AMI로 등록함

- AMI가 등록되면, AMI를 사용하여 동일한 AWS 리전에서 새 인스턴스 시작 가능

- 이제 새 AMI를 새로운 스타터 AMI로 생각할 수 있다

 

4단계 : AMI를 다른 AWS 리전으로 복사하여 이러한 리전에서도 EC2 인스턴스를 시작한다

 

 

2. 인스턴스 유형 선택

인스턴스를 시작할 때 사용할 AMI를 선택한 후에는 인스턴스 유형을 선택해야 한다

 

인스턴스 유형 : CPU, 메모리, 스토리지, 네트워크 성능이 있다

 

인스턴스 유형 범주 : 범용, 컴퓨팅 최적화, 메모리 최적화, 스토리지 최적화, 가속화된 컴퓨팅 인스턴스가 포함됨

 

인스턴스 유형 정보

ex. t3.large

- T : 패밀리 이름

- 3 : 세대 번호

- large : 크기

-> 세대가 높을수록 인스턴스가 강력, 더 우수한 가격 대비 가치를 제공

 

인스턴스 크기

ex. t3.2xlarge

처리 성능, CPU, 메모리가 t3.xlarge 3배보다 높은 8이다. 메모리는 32GB

 

인스턴스 유형 선택

CPU 유형, CPU 또는 코어 수, 스토리지 유형, 스토리지 용량, 메모리 용량, 네트워크 성능 등 몇가지 기준에 따라 다름

  범용 컴퓨팅 최적화 메모리 최적화 가속화 컴퓨팅 스토리지 최적화
인스턴스 유형 a1, m4, m5, t2, t3 c4, c5 r4, r5, x1, z1 f1, g3, g4, p2, p3 d2, h1, i3
사용 사례 범용 고성능 인 메모리 데이터베이스 기계학습 분산 파일 시스템

 워크로드의 CPU, RAM, 스토리지 요구 사항을 고려하는 것 외에 네트워크 대역폭 요구 사항을 고려하는 것도 중요

 

 

3. 네트워크 설정 지정

이제 EC2 인스턴스를 배포할 네트워크 위치를 지정해야함

리전을 올바르게 선택했는지 꼭 보기!

 

- 인스턴스 생성 시 새 VPC를 생성하거나 원하는 경우 새 서브넷을 생성할 수 있는 링크 제공(서브넷 속성에 따라 퍼블릭 IP를 수신할지 여부가 달라짐)

- 인스턴스를 시작할 때 VPC를 지정하지 않는 경우 인스턴스가 기본 VPC에 배치됨(기본적인 퍼블릭 IP주소가 할당됨)

 

 

4. IAM 역할 연결(선택 사항)

EC2 인스턴스는 소프트웨어가 다른 AWS와 상호 작용하려고 사용되는데, 이때 AWS에서 IAM역할을 생성하고, EC2 인스턴스에 연결 가능하다

주의할 점) EC2 인스턴스에 AWS 자격 증명을 저장해서는 안됨! 대신 IAM역할을 EC2에 연결해야함

 

인스턴스 프로파일 : IAM 역할에 대한 컨테이너

AWS Management Console을 사용하면 콘솔이 자동으로 인스턴스 프로파일을 생성해 해당 역할과 동일한 이름을 부여함

 

 

5. 사용자 데이터 스크립트(선택 사항)

EC2 인스턴스 생성 시 사용자 데이터를 인스턴스에 전달할 수 있는 옵션 사용 가능

사용자 데이터를 사용하여 인스턴스 시작 시 설치 및 구성 작업을 자동으로 완료할 수 있음

 

ex) 사용자 데이터 스크립트를 실행하여 인스턴스 운영체제를 패치 및 업데이트 or 소프트웨어 라이선스 키를 가져와 설치 

#!/bin/bash
yum update -y
yum install -y wget

위 사용자 데이터 스크립트에는 간단한 Linux Bash Shell Script가 있다

 

1줄 : 스크립트를 bash shell에서 실행해야 함을 의미

2줄 : 많은 Linux 배포판에서 온라인 리포지토리에서 소프트웨어를 검색하고 설치하는데 일반적으로 사용되는 yum 유틸리티를 호출. yum에 설치된 모든 패키지를 최신 버전으로 업데이트 하라는 의미

3줄 : wget 유틸리티가 설치되어야 함을 의미. wget은 웹에서 파일을 다운로드 하기 위한 일반적인 유틸리티이다

* windows 인스턴스의 경우 사용자 데이터 스크립트는 명령 프롬프트 창 or windows PowerShell과 호환되게 작성되어야 함

 

EC2 인스턴스가 생성될 때 부팅 프로세스의 마지막 단계에서 사용자 데이터 스크립트가 실행됨

기본적으로 사용자 데이터는 인스턴스가 처음 시작될 때만 실행됨 -> 이를 전략적으로 사용해 구축 및 유지 관리가 필요한 사용자 지정 AMI의 수를 줄일 수 있음

 

ex. 소프트웨어 설치, 구성과 사용자 지정 AMI를 유지 관리하는 대신, 인스턴스 시작 시 이러한 작업을 처리하는 별도의 사용자 데이터 스크립트를 유지 관리하는 것이 좋다

 

 

6. 스토리지 지정

EC2 인스턴스를 시작할 때 스토리지 옵션 구성 가능

 

  • Windows나 Linux 같은 게스트 OS가 설치된 루트 볼륨의 크기 구성 가능
  • 인스턴스 시작 시 추가 스토리지 볼륨 연결 가능(일부 AMI는 기본적으로 2개 이상의 스토리지 볼륨을 시작해 루트 볼륨과 분리된 스토리지 옵션을 제공하도록 구성됨)
  • 인스턴스에 사용될 각 볼륨에 대해 볼륨 크기 및 볼륨 유형과 인스턴스가 종료된 경우 스토리지의 보존 여부를 지정할 수 있음 + 암호화 사용 여부 지정 가능

EC2 스토리지 옵션

- Amazon Elastic Block Store(Amazon EBS) : EC2와 함께 사용하도록 설계된 사용이 간편하고 내구성이 뛰어난 고성능 블록 스토리지 서비스

  • EBS는 다양한 볼륨 유형을 제공해 가격 대비 성능의 균형을 유지할 수 있다.
  • 인스턴스를 중지한 후 다시 시작할 수 있으며 데이터가 그대로 유지된다

- Amazon EC2 인스턴스 스토어 : 인스턴스에 블록 수준의 임시 스토리지를 제공함

  • 이 스토리지는 호스트 컴퓨터에 물리적으로 연결된 하드 디스크에 위치
  • 버퍼나 캐시와 같이 자주 변경되는 정보를 임시로 저장해야하는 경우에 효과적
  • 사용자 오류나 오작동으로 인해 인스턴스가 중지되면 인스턴스 스토어의 데이터가 삭제됨
  • 그래서 장기 데이터는 넣지 말 것.. 대신 EBS, EFS, S3 등을 사용하는 걸 권장

추가로,

- 루트 볼륨은 EBS나 인스턴스 스토어에서 실행되어야함

- 확장 가능하고 탄력적인 관리형 네트워크 파일 시스템을 제공하는 Amazon Elastic File System이 포함된 옵션 선택 가능

- S3는 확장성, 데이터 가용성, 보안, 성능을 제공하는 객체 스토리지 서비스

등을 사용할 수도 있다

 

 

7. 태그 추가

태그 : EC2 인스턴스와 같은 AWS 리소스에 할당하는 레이블

- 사용자가 정의하는 키와 값(선택사항)으로 구성

-> AWS 리소스를 다양한 방식으로 분류 가능

ex. 용도, 소유자, 환경별로 인스턴스 태그 지정 가능

 

태깅 : EC2 인스턴스에 메타데이터를 연결하는 방법

ex. EC2 인스턴스에 일반적으로 Name 태그 키와 인스턴스를 설명하는 Value 태그 값

Name 태그는 EC2 콘솔 인스턴스 페이지에 기본적으로 표시됨. 일관된 태그 키 세트를 사용하여 리소스 생성이나 관리를 용이하게 함

 

 

8. 보안 그룹 설정

보안 그룹 : 하나 이상의 인스턴스에 대한 발신이나 수신 네트워크 트래픽을 제어하는 가상 방화벽 역할

- 인스턴스 시작 시 하나 이상의 보안 그룹 지정 가능. 그렇지 않으면 기본 보안 그룹이 사용됨

 

- 각 보안 그룹에 규칙 추가 가능. 규칙은 연결된 인스턴스 수신이나 발신 트래픽을 허용한다

트래픽이 인스턴스에 도달하려고 시도하면 해당 인스턴스와 연결된 모든 보안 그룹의 모든 규칙이 평가됨

규칙을 정의할 때 네트워크 통신(인바운드 규칙)이나 대상 위치(아웃바운드 규칙)의 허용 가능한 소스 지정 가능

 

소스 : IP주소, IP주소 범위, 다른 보안 그룹, VPC 엔드포인트, 모든 위치(모든 소스가 허용됨) 등

 

기본적으로 보안 그룹은 모든 아웃바운드 트래픽을 허용하는 아웃바운드 규칙을 포함

규칙을 사용해 허용할 출발지(IP주소나 다른 보안 그룹) 지정이 가능

 

 

9. 키 페어 식별과 생성

인스턴스 시작 시 기존 키 페어를 지정하거나 새 키 페어 생성 가능

키 페어 : 퍼블릭 키와 프라이빗 키로 구성. EC2 인스턴스에 대한 보안 연결 지원

 

EC2 인스턴스를 생성할 때 기존 키 페어를 선택하거나, 키 페어 없이 진행하거나 새 키 페어 생성 가능

- 새 키 페어 생성 : 다운로드 하여 안전한 위치에 저장(생성 시에만 가능)

- 새 프라이빗 키를 다운로드 하여 저장할 수 있는 windows 인스턴스에 연결하려면 프라이빗 키를 사용하여 관리자 암호를 획득한 다음 RDP라고 하는 원격 데스크톱 프로토콜을 사용하여 EC2 인스턴스의 Windows 데스크톱에 로그인한다

윈도우 시스템에서 EC2 인스턴스로의 SSH 연결을 설정하려면 PuTTY와 같은 도구 사용 가능 -> 동일한 프라이빗 키 필요

리눅스 인스턴스에 SSH를 사용하여 로그인 하는 경우, 연결을 설정할 때 프라이빗 키를 제공해야 함

 


 

AWS CLI에서 EC2 인스턴스 시작

aws ec2 run-instances \
--image-id ami-1a2b3c4d \
--count 1 \
--instance-type c3.large \
--key-name MyKeyPair \
--security-groups MySecurityGroup \
--region us-east-1
  • aws는 AWS 명령줄 유틸리티를 호출, ec2는 EC2 서비스를 호출, run-instances : 실행할 하위 명령
  • --image-id는 AMI ID
  • --count : 단일 명령으로 2개 이상의 인스턴스 시작 가능
  • --instance-type : 생성할 인스턴스 유형
  • --key-name : 이미 생성된 키페어 이름 
  • --security-groups : 이미 생성한 보안그룹
  • --region : AWS 리전에 AMI가 있으므로 AWS CLI에서 AMI나 다른 참조된 리소스를 찾을 수 있는 리전 지정. 인스턴스가 시작될 리전

위 명령이 성공적으로 실행되면, API는 애플리케이션이 후속 API 요청에 사용할 인스턴스 ID나 기타 관련 데이터로 명령에 응답한다

 

 

인스턴스 수명주기

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html

  • AMI에서 인스턴스를 시작한 후 인스턴스는 대기 중(pending)에 있다가 실행(running) 상태에 도달한다. 실행 중인 인스턴스는 완전히 부팅되어 EC2 인스턴스에 액세스할 준비가 된 인스턴스이다
  • 실행 중인 모든 인스턴스를 재부팅(rebooting)할 수 있다. 재부팅된 인스턴스는 동일한 물리적 호스트에 유지되며 인스턴스의 퍼블릭 DNS 이름과 퍼블릭 IP 주소가 동일하게 유지된다. 인스턴스 스토어 볼륨이 있는 경우 데이터는 볼륨에 유지가 된다
  • 실행 중인 인스턴스는 종료되기 전에 임시 종료(shutting-down) 상태로 전환된다
  • 종료된(terminated) 인스턴스는 가상 머신이 실제로 삭제되기 전에 EC2 콘솔에 잠시 표시된다. 종료된 인스턴스에 연결하거나 복구는 불가능
  • EBS 기반 인스턴스를 중지할 수 있다. 인스턴스는 완전히 중지된 상태가 되기 전에 중지(stopping) 상태로 전환되고 중지된 인스턴스에서 발생하는 비용은 실행 중인 인스턴스와 같지 않다
  • 중지된(stopped) 인스턴스를 시작하면 보류 상태로 전환되고 해당 인스턴스는 새 호스트 머신으로 이동한다

 

 

탄력적 IP 주소 사용

- 퍼블릭 IP 주소는 인터넷을 통해 연결할 수 있는 IPv4 주소이다. 퍼블릭 IP 주소가 할당된 각 인스턴스에는 외부 DNS 호스트 이름이 할당된다. 

- EC2 인스턴스가 중지나 종료 상태가 되면, 인스턴스에 할당된 퍼블릭 IP 주소가 해제됨

- 인스턴스가 다시 시작되면 새 퍼블릭 IP주소가 할당됨

- 인스턴스에서 퍼블릭 IP 주소의 연결이 해제되면 해당 퍼블릭 IP 주소가 퍼블릭 IP 주소 풀로 다시 해제되지만, 해당 주소를 재사용하도록 지정할 수는 없다

->> 영구 퍼블릭 IP 주소가 필요한 경우에는 탄력적 IP 주소를 인스턴스에 연결할 것

 

인스턴스가 있는 리전에 새 탄력적 IP 주소를 할당한다. 그러고 탄력적 IP주소를 인스턴스에 연결할 수 있다

퍼블릭 인터넷 주소가 부족해 기본적으로 모든 AWS 계정에서 사용할 수 있는 탄력적 IP 주소는 리전당 5개로 제한된다->한도 증가 요청 가능

 

 

EC2 인스턴스 메타데이터

: 인스턴스에 대한 데이터

실행 중인 인스턴스를 구성하거나 관리하는데 사용

ex) 메타데이터 정보에 액세스하고, 해당 정보를 필요에 따라 사용하여 애플리케이션이나 OS 설정을 구성하는 구성 스크립트를 작성할 수 있다

 

인스턴스에 연결되어 있는 동안 브라우저에서 http://IP주소/latest/meta-data/ 를 통해 메타데이터를 볼 수 있다

터미널 창에서는 curl http://IP주소/latest/meta-data/ 를 통해 볼 수 있음

 

인스턴스 메타데이터는 실행 중인 인스턴스와 관련하여 AWS 콘솔에서 제공되는 것과 거의 동일한 정보를 제공한다.

ex) 퍼블릭 IP주소, 프라이빗 IP주소, 퍼블릭 호스트 이름, 인스턴스 ID, 보안 그룹, 리전, 가용영역 등을 확인 가능!

 

인스턴스 시작 시 지정된 모든 사용자 데이터는 https://IP주소/latest/user-data에서도 액세스 가능

 

 

Amazon CloudWatch

: EC2에서 원시데이터를 수집하여 실시간에 가까운 지표로 처리하는 CloudWatch를 통해 모니터링

- 15개월 동안 유지됨

-> 기록 정보에 액세스하여 웹 애플리케이션이나 서비스 성능에 관한 유용한 정보를 얻을 수 있다

- EC2는 5분마다 CloudWatch로 지표 데이터를 전송하는 기본 모니터링을 제공함

- 세부 모니터링을 통해 인스턴스에 대한 지표 데이터를 전송 시간 변경 가능

728x90