EC2는 Elastic Compute Cloud로 AWS에서 제공하는 서비스형 인프라스트럭처(IaaS)이다.
가상머신을 임대할 수 있는데 이를 EC2인스턴스라고 한다.
데이터를 가상 드라이브 또는 EBS 볼륨에 저장할 수 있고, 일래스틱 로드밸런서(ELB)로 로드분산이 가능하다. 오토 스케일링 그룹(ASG)를 통해 서비스를 확장할 수 있다.
EC2 User Data를 이용하면 인스턴스가 처음 실행될 때 자동으로 특정 명령을 실행할 수 있다. 예를 들어, 아래와 같은 작업이 가능하다.
모든 명령은 sudo 권한으로 실행되며, 최초 실행 시에만 적용된다.
모든 인스턴스 유형: https://aws.amazon.com/ko/ec2/instance-types/
주요 인스턴스 타입
범용 인스턴스 (General Purpose)
균형 잡힌 성능 제공 (웹 서버, 애플리케이션 서버 등)
컴퓨팅 최적화 인스턴스 (Compute Optimized)
고성능 프로세싱이 필요한 작업 (게임 서버, 머신러닝 등)
인스턴스 이름이 c로 시작
메모리 최적화 인스턴스 (Memory Optimized)
대규모 데이터셋을 처리하는 작업 (데이터베이스, BI 등)
인스턴스 이름이 r, x, z로 시작
스토리지 최적화 인스턴스 (Storage Optimized)
대량의 데이터 저장/처리가 필요한 경우 (NoSQL DB, 캐싱 등)
인스턴스 이름이 i, d, h1으로 시작
참고 웹사이트: https://www.ec2instances.info/

프리티어는 t2.micro , t3.micro 를 사용할 수 있다.
🚨프리티어 EC2의 Public IPv4는 하나는 무료지만 프리티어를 넘어가면 과금이 된다.
자동으로 Public IPv4를 할당받지 못하도록 설정하면 EC2 생성시 Public IPv4를 자동 할당받지 않는다. (ALB에 적용X)
VPC > 서브넷 > 작업 > 서브넷 설정 편집에서 아래와 같이 체크해제한다.

선택한 후 인스턴스 이름을 설정한다.

검색해서 찾을 수도 있고 퀵스타트로 빠르게 선택할 수도 있다.
나는 레드햇을 선택했고 프리티어가 가능한지 꼭 확인해야한다.

현재는 t2.micro만 프리티어가 가능해 해당 타입을 선택해주었다.
SSH유틸리티를 사용하려면 키페어가 필요하다.

새로운 키페어를 생성해준다.
키페어의 이름을 입력하고 키페어타입은 RSA를 선택한다.
키파일 포맷은 리눅스, 맥, 윈도우10이라면 .pem 형식을 사용할 수 있고
윈도우7, 8이라면 .ppk를 사용할 수 있다. 이는 PuTTY와 함께 사용된다.
윈도우 7,8이 아니라면 .pem을 선택한다.
다운받은 키페어 파일의 공백은 제거해준다.

네트워크 설정은 우선 아무것도 수정하지 않고 넘어간다.
🚨여기서 Auto-assign public IP를 Enable하면 퍼블릭IP하나가 자동 할당되는데 인스턴스가 하나이면 프리티어지만 여러개면 과금되니 주의하시라.
기본 vpc도 퍼블릭 엑세스를 허용하기 때문에 로드밸런서에 연결될 경우 프라이빗 VPC에 연결되는 것이 좋다.
인스턴스에 접속하기 위해 보안 그룹이 설정된다. 그것이 인스턴스를 오가는 트래픽을 관리할 것이다. 그러면 규칙을 추가할 수 있다.
생성되는 보안그룹 이름인 launch-wizard-1는 콘솔에 의해 직접 생성된다.
http, https 트래픽을 허용할 것인지는 어떤 서비스를 할 것인지에 따라 설정하면 된다.

스토리지는 프리티어에서 30GB까지 사용가능하다. 기본 설정을 그대로 둬 10GB의 볼륨을 하나 생성한다.
Advenced 를 선택하면 위 사진과 같이 세부적으로 설정할 수 있는데 Delete on termination 은 EC2인스턴스를 종료하면 그 볼륨도 삭제될 것이라는 것을 의미한다.
profile을 통해 인스턴스에 Role을 할당할 수 있다.

Advenced Detail에서 나머지 내용은 다 넘기고 스크롤을 내리다보면 유저 데이터를 입력할 수 있다.
유저데이터는 스크립트로 약간의 명령을 EC2 인스턴스에 제공한다. EC2인스턴스를 처음 생성할 때만 실행된다. 즉 인스턴스 전체 생명주기에서 단 한번만 실행된다.
요약을 검토하고 생성을 마치면 된다.
첫해에는 월 프리티어 계층 AMI에서 750시간의 t2.micro(또는 t2.micro를 사용할 수 없는 지역은 t3.micro) 인스턴스 사용, 월 750시간의 공용 IPv4 주소 사용, 30GiB의 EBS 저장소, 2백만 IO, 1GB의 스냅샷 및 100GB의 인터넷 대역폭이 포함된다고 한다.

instances 란에서 내가 만든 인스턴스를 눌러보면 정보를 확인할 수 있다.
공용 IPv4주소로 나의 EC2인스턴스에 접근할 수 있고 사설 IPv4주소는 AWS네트워크에서 내부적으로 인스턴스에 접근하는 방법이다.
공용 IPv4주소는 인스턴스를 중지하고 다시 실행하면 변경되지만 사설 IPv4주소는 변경되지 않는다.

security를 선택하면 보안그룹에 대한 정보를 볼 수 있다.

보안그룹을 클릭하면 인바운드 룰을 볼 수가 있는데, 확인해보면 현재 22번, 80번 포트는 누구나 접근할 수 있다.

아웃바운드 룰을 보면 모든 아웃바운드 통신을 허용하고 있다. 이를 통해 인스턴스가 인터넷에 접근할 수 있게 된다.
인스턴스의 웹서버에 접근하려면 공용IP주소 앞에 http://를 붙여 브라우저에서 열면 된다.

위 인바운드 규칙을 보면 접근 가능한 포트를 규정하고 승인된 IP범위(IPv4 or IPv6)가 표시된다. 소스는 트래픽의 출발지 IP주소로 0.0.0.0/0은 모든 출발지의 트래픽을 허용한다는 뜻이다.

보안그룹은 EC2 > Network & Security > Security Groups 에서 확인할 수 있다.
보안그룹명을 선택하면 인바운드룰, 아웃바운드룰, 태그, 상세사항을 확인할 수 있고 룰을 수정하는 것이 가능하다.
SSH(Secure Shell)는 네트워크를 통해 원격 시스템에 안전하게 접속할 수 있도록 해주는 프로토콜이다. AWS EC2 인스턴스에 접근할 때 주로 사용되며, 암호화된 연결을 제공하여 보안성을 보장한다. 맥, 리눅스, 윈도우 10이상에서 사용할 수 있다.
-> Putty는 윈도우의 모든 버전을 지원한다.
-> EC2 Instance Connect를 사용하면 모든 버전의 윈도우와 맥, 리눅스에서 연결할 수 있다.
EC2 Instance Connect 지원 AMI 목록
Amazon Linux, macOS Sonoma, macOS Ventura, macOS Monterey 또는 Ubuntu의 최신 버전
EC2 Instance Connect가 지원되지 않는 AMI는 EC2 Instance Connect를 직접 설치해 사용할 수 있다.
EC2 Instance Connect를 직접 설치
SSH로 인스턴스에 접근하려면 보안 그룹의 인바운드 규칙의 22번 포트를 열어둬야 한다. 또 앞서 받아둔 키페어 파일이 필요하다.
ssh -i <키파일.pem> ec2-user@<EC2 공용 IP>
쉘에서 키파일.pem이 있는 디렉토리로 이동한 다음 명령어를 입력해준다.
ec2-user라고 하는 이유는 이미 EC2 인스턴스에 설정된 사용자의 이름이 ec2-user이기 때문이다.
여기서 키파일에 대한 권한 에러가 뜨면 아래와 같이 권한을 수정해주고 다시 위 명령어를 입력해준다.
chmod 0400 <키파일.pem>
정상적으로 입력되면 인스턴스를 신뢰하는지 묻는 프롬프트가 나올 것인데, 이 때 yes를 입력해준다.
인스턴스에서 나가고 싶다면 exit라고 입력해주면 된다.
Putty는 Windows용 무료 SSH 클라이언트이다.
1. 구글에 putty를 검색해 다운로드해준다.
2. 다운로드를 마치면 PuTTY와 PuTTYjen이 설치되어 있을 것이다.
.pem만 있고 .ppk가 없는 경우:
-> PuTTYjen을 실행해 Load를 눌러 .pem파일을 불러오면 성공적으로 import한다.
-> Save private key를 눌러 프라이빗 키로 저장한다. (패스프레이즈 경고창이 뜨면 Yes를 눌러 넘어감)
PuTTy를 실행해 Session의 Host Name에 ec2-user@<공용 IPv4 주소>를 넣고 포트는 22번으로 해주고 아래에서 인스턴스 이름을 설정한 뒤 Save해준다.

SSH > Auth > Credential에서 키를 설정한다.

.ppk 포맷의 키파일을 불러오면 된다.
다시 Session으로 가서 save를 해주면 다음부터는 저장한 인스턴스를 open해서 인스턴스에 접속할 수 있다.

접속에 성공하여 현재 유저이름과 작업디렉토리 등을 확인할 수 있다.
ssh -i .\<키파일명.pem> ec2-user@<공용 IP주소>
.pem 파일이 있는 디렉토리로 이동하여 명령어를 입력해야한다.
계속할 지 물어보면 yes를 입력한다.
🛠️ 실행중 키파일에 대한 권한 문제가 발생한다면
1. 파일디렉토리에서 키파일을 오른쪽 클릭 > 속성 > 보안(Security) > 고급을 선택해 파일의 소유자가 본인인지 확인한다.
2. 변경을 원한다면 소유자명 옆의 변경을 누르고 선택할 개체 이름에 소유자명을 입력할 수 있다.
3. 보안 주체에서 나를 제외한 개체들(SYSTEM, Administrators)은 제거해준다.
4. "상속 사용 안 함" > "이 개체에서 상속된 사용 권한을 모두 제거합니다." 선택
5. 추가 > 보안 주체 선택 > 이름 입력 > 모든 능력 부여한 뒤 완료
파워쉘과 CMD의 차이는?
CMD: 단순한 명령어 실행 (파일 관리, 네트워크 설정 등)
PowerShell: CMD 기능 + 강력한 스크립팅 및 자동화 지원
가능하면 PowerShell 사용!
🚨 에러해결하기
1. 보안 그룹에 문제가 없는데 타임아웃 에러가 계속 발생한다면?
: 회사나 개인 방화벽이 연결을 차단하고 있으니 EC2 Instance Connect 사용으로 해결
2. SSH 연결이 거부된다면?
: 인스턴스를 재시작하고, 그래도 동작이 안된다면 새 인스턴스를 Amazon Linux 2를 사용해서 만들기
3. 어제는 됐다가 오늘은 안된다면?
: 인스턴스를 중단했다가 다시 실행하면 퍼블릭 IP가 바뀌니 바뀐 IP주소로 다시 시도하기
브라우저 기반으로 EC2 인스턴스에 대한 SSH 세션 실행하기
1. 인스턴스 선택하고 Connect 누르기

2. 그대로 두고 Connect를 누르면 바로 EC2 인스턴스로 접속 가능

AWS에서 임시키를 입력해서 사용자가 따로 키 설정을 할 필요가 없다.
Amazon Linux AMI는 AWS CLI를 포함하고 있어서 따로 설치할 필요가 없다.
인스턴스에서 다른 운영체제를 사용한다면 AWS CLI설치가 필요하다.
AWS CLI에 대한 내용은 따로 글을 올려뒀으니 참고하면 된다.
https://velog.io/@siiiirru/AWS-CLI-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
❗여기서 주의할 점은 절대 EC2 인스턴스에 엑세스키 ID와 비밀 엑세스키를 입력하지 말고 IAM ROLE을 사용하는 것이다.
IAM > Roles > Create Role을 선택해 EC2에 IAMReadOnlyAccess권한을 부여한다.

Instances > 원하는 인스턴스 선택 > Actions > Security > Modify IAM Role 선택

만들어둔 Role 선택

다시 Instances > 원하는 인스턴스 선택 > Security 탭에서 IAM Role를 확인하면 적용한 Role로 업데이트 된 것을 확인

EC2인스턴스에 접속해 "aws iam list-users"를 입력하여 유저목록 확인

제대로 Role이 부여되었다면 해당 EC2인스턴스는 IAM 유저목록을 볼 수 있는 권한이 있기 때문에 User list가 출력된다.
| 구분 | 사설 IP (Private IP) | 공용 IP (Public IP) |
|---|---|---|
| IP 범위 | 10.0.0.0 ~ 10.255.255.255 172.16.0.0 ~ 172.31.255.255 192.168.0.0 ~ 192.168.255.255 | 인터넷 서비스 제공업체(ISP)에서 할당 |
| 사용 범위 | 내부 네트워크(회사, 가정, 데이터센터)에서 사용 | 인터넷을 통해 외부와 직접 통신 |
| 인터넷 접근 | 직접 불가능 (NAT 필요) | 직접 인터넷 접속 가능 |
| 고유성 | 중복 가능 (각 네트워크에서 동일한 사설 IP 사용 가능) | 전 세계적으로 고유 |
| 보안성 | 외부에서 직접 접근 불가 → 보안 강함 | 외부에서 접근 가능 → 방화벽 필요 |
| 비용 | 무료 (누구나 사용 가능) | 유료 (ISP에서 할당) |
탄력적 IP는 고정된 공용 IP 주소로, AWS 계정에 할당되어 EC2 인스턴스에 유동적으로 연결이 가능하다.
이 기능을 이용하면 IP 주소 변경을 감출 수 있음 → 즉, 마스킹 효과!
탄력적 IP를 이용한 마스킹의 핵심
계정당 탄력적 IP 5개를 쓸 수 있다.(원하면 AWS에 개수 증가 요청가능)
하지만 !! 결론적으로 탄력적 IP는 사용하지 않는 것이 좋다.
-> 좋지 않은 구조적 결정으로 이어질 수 있다.
-> 대신 임의의 공용 IP를 써서 DNS 이름을 할당하는 것이 좋다.
로드 밸런서를 사용해서 공용 IP주소 자체를 사용하지 않을 수도 있다. (AWS에서 취할 수 있는 최상의 패턴)
📌 인스턴스 중지 후 시작 vs. 인스턴스 재부팅 차이점
구분 인스턴스 중지 후 시작 (Stop → Start) 인스턴스 재부팅 (Reboot) 인스턴스 상태 변화 중지(Stopped) → 시작(Running) 실행(Running) 상태 유지 공용 IP 변화 ✅ 변경됨 (탄력적 IP 사용 시 유지) ❌ 변하지 않음 사설 IP 변화 ❌ 변하지 않음 ❌ 변하지 않음 RAM 상태 ❌ 모든 데이터 손실 (초기화됨) ✅ 유지됨 EC2 호스트 변경 가능성 ✅ 새로운 물리 서버로 이동할 가능성 있음 ❌ 기존 서버 유지 루트 볼륨 유지 ✅ 유지됨 ✅ 유지됨 비용 영향 중지 상태에서는 인스턴스 비용 X (스토리지 비용만 청구) 계속 실행 중이므로 비용 변화 없음 사용 사례 시스템 업데이트, 리소스 최적화, 공용 IP 변경 필요할 때 간단한 장애 해결, 빠른 재시작 필요할 때

아마존 IPv4 주소 풀에서 새로운 IP 주소를 할당받게 된다.
Allocate를 눌러 퍼블릭 IPv4주소를 임대할 수 있다.
할당받은 IPv4주소를 클릭하고 Actions에서 Associate Elastic IP address를 선택한다.
AWS의 IPv4 요금정책
AWS의 IPv4 정책에 따라 공용 IPv4, 탄력적 IPv4의 사용여부와 관계없이 시간당 약$0.0005의 요금이 부과된다. 매달 약 $3.5에 해당된다.
즉, 인스턴스와 탄력적 IPs를 사용하지 않는다면 해당 비용을 지불하지 않도록 종료해야한다.
프리티어에서는 계정에 매월 750시간의 무료 공용 IPv4주소가 제공된다.
EC2 인스턴스가 AWS 인프라에 배치되는 방식을 제어하고자 할 때 사용한다.

배치그룹의 이름, 전략을 선택하고 생성한다.
EC2 > Instances > Launch Instances 에서 스크롤을 내려 Advanced details > Placement group name에서 배치 그룹을 설정해줄 수 있다.
ENI의 속성
- 각 EC2 인스턴스마다 하나 이상의 ENI를 가질 수 있다.
- 주요 사설 IPv4(인스턴스 생성시 자동으로 생성)와 하나 이상의 보조 IPv4(직접 연결 필요)를 가질 수 있다.
-> 즉, 인스턴스 생성 시 사설 및 공용 IP가 한 개씩 제공되는 ENI가 하나 생성되어 인스턴스와 연결됨.- ENI에 하나 이상의 보안 그룹을 연결할 수 있다.
- MAC 주소 및 기타항목을 연결할 수 있다.
현재 EC2인스턴스들에 연결된 eni-%!#$ 들이 보일 것이다.
Create network interface를 선택한다.

ENI 설명(옵션)을 입력한다.
ENI가 포함될 서브넷을 선택하여 특정 AZ에 연결할 수 있다.
IPv4는 자동할당, 커스텀 중 선택한다.
보안그룹까지 선택하고 생성한다.
연결할 ENI를 누르고 Actions의 Attach를 눌러 연결하려는 인스턴스를 선택한다.
인스턴스의 Network interfaces탭에서 eni가 여러개가 된 것을 볼 수 있다.
새로 연결해 준 eni의 사설 IPv4주소가 보조 IPv4주소가 된다.
잠시 기다리거나 Actions > Detach > Force detachment를 선택해 강제로 분리할 수도 있다.
그러면 사설 IPv4주소가 다른 인스턴스로 연결된다.
인스턴스를 종료하면 ENI는?
👉 인스턴스와 함께 생성된 ENI는 자동으로 사라진다.
👉 따로 만든 ENI는 그대로 남는다.
🧐EC2 하이버네이트(Hibernate)는
메모리(RAM)의 데이터를 디스크(EBS)에 저장한 후, 인스턴스를 종료하지 않고 일시적으로 절전 모드로 전환한다.
나중에 다시 시작하면 기존 상태를 유지한 채 재개됨.
예를 들어, 실행 중이던 애플리케이션이나 데이터가 유지되어 부팅 속도가 빠름.
📍지원 조건
인스턴스 유형: C3, C4, C5, M3, M4, M5, R3, R4, R5 계열 일부만 지원
루트 볼륨이 EBS여야 함 (인스턴스 스토어는 지원 X)
EBS에 RAM을 저장할 수 있는 충분한 공간이 있어야 함
RAM이 150GB 이하인 경우만 가능
암호화된 EBS 볼륨 사용 필요
절전모드는 최대 60일까지 사용할 수 있음
인스턴스를 만들 때