AWS/서비스

🚀 Amazon EC2 서비스 소개 및 실습 예제

techlancer 2025. 8. 20. 22:53

1) EC2란?

Amazon EC2는 클라우드에서 가상 서버(인스턴스)를 손쉽게 만들고 확장/축소할 수 있게 해주는 컴퓨팅 서비스입니다. 원하는 CPU/메모리/스토리지/네트워크 조합을 선택하고, 몇 분 안에 서버를 가동할 수 있습니다. 사용한 용량과 시간만큼 과금되며, 필요하면 즉시 중지·종료할 수 있어 민첩성과 비용 효율이 뛰어납니다.


2) 핵심 특징

  • 광범위한 인스턴스 패밀리: 범용(M), 컴퓨팅 최적화(C), 메모리 최적화(R), 스토리지 최적화(I/D), 가속(H/V/Trn/Nv) 등
  • 유연한 스토리지: EBS(블록), 인스턴스 스토어(일시), EFS/FSx(파일) 연동
  • 네트워크/보안: VPC, 서브넷, 보안 그룹, 키 페어, IAM 역할, 보안 패치 자동화(SSM)
  • 탄력적 확장: Auto Scaling 그룹과 ELB로 수평 확장
  • 다양한 구매 옵션: 온디맨드, 스팟, 예약(Reserved), Savings Plans
  • 운영 자동화: User Data(초기 부팅 스크립트), Systems Manager(무에이전트/원격 명령), CloudWatch/CloudTrail/Config 연동

3) 인스턴스 패밀리 한눈에

  • t4g, t3: 버스팅 범용. 소규모 웹/개발/테스트
  • m7g, m6i: 범용. 대부분의 애플리케이션
  • c7g, c7i: CPU 집약(고성능 웹/배치/미디어 트랜스코딩)
  • r7g, r6i: 메모리 집약(캐시, 인메모리 DB)
  • i4i, im4gn: 스토리지/IO 최적(고속 로컬 SSD)
  • g5/g6, p4/p5: GPU(딥러닝/그래픽)
  • trn1, inf2: ML 학습/추론 가속 특화

팁: Graviton(Arm 기반) 인스턴스(m7g, c7g, r7g 등)는 성능/가격 비율이 매우 우수해 최근 워크로드에서 인기가 높습니다.


4) 아키텍처 예시

ALB + Auto Scaling(EC2) + RDS

  1. ALB가 트래픽을 수신 → 2) Auto Scaling 그룹의 EC2로 라우팅 → 3) DB는 RDS로 관리형 운영 → 4) CloudWatch로 지표/로그 수집 → 5) 배포는 CodeDeploy/CodePipeline

5) 과금 개요(요약)

  • 컴퓨팅 요금(초/시간 단위) + EBS 스토리지(GB/월, IOPS/처리량) + 데이터 전송
  • 비용 절감: 스팟 인스턴스(최대 7090% 절감), 예약/세이빙플랜(13년 약정), Auto Scaling으로 유휴 리소스 최소화

실습 후 반드시 인스턴스/볼륨/ALB/Elastic IP 등을 종료/삭제하세요!


🛠 Hands-on: 10분만에 EC2 웹 서버 띄우기

아래는 **콘솔(클릭)**과 AWS CLI 두 가지 방법을 제공합니다. 편한 방법을 골라 진행하세요.

A. 콘솔로 빠르게 시작

  1. 키 페어 생성: EC2 → 키 페어 → 생성 (예: ec2-demo-key, PEM)
  2. 보안 그룹 생성: 인바운드에 22(SSH), 80(HTTP) 허용 (소스는 필요 시 본인 IP만)
  3. 인스턴스 시작:
    • AMI: Amazon Linux 2023 (또는 Ubuntu LTS)
    • 인스턴스 유형: t3.micro(프리티어)
    • 네트워크: 기본 VPC/퍼블릭 서브넷(인터넷 게이트웨이 연결)
    • 키 페어: ec2-demo-key
    • 보안 그룹: 위에서 만든 것 선택
    • User Data에 아래 스크립트 입력(첫 부팅 시 NGINX 설치/시작)
 
#!/bin/bash set -eux dnf -y update || yum -y update dnf -y install nginx || yum -y install nginx systemctl enable nginx echo "<h1>EC2 Web Server is up!</h1>" > /usr/share/nginx/html/index.html systemctl start nginx
  1. 퍼블릭 IPv4 확인 → 브라우저에서 http://<퍼블릭IP> 접속 → “EC2 Web Server is up!” 페이지 확인
  2. (선택) SSM 에이전트 활성: Amazon Linux 2023은 기본 포함. IAM 역할에 AmazonSSMManagedInstanceCore 부여하면 SSH 없이 Session Manager로 접속 가능

B. AWS CLI로 한번에 만들기

전제: AWS CLI 설정(aws configure) 완료, 기본 리전/프로필 설정됨. 아래 변수는 필요 시 바꾸세요.

 
# 변수 REGION=ap-northeast-2 KEY_NAME=ec2-demo-key SG_NAME=ec2-demo-sg # 1) 키 페어 (이미 있으면 건너뛰기) aws ec2 create-key-pair --region $REGION --key-name $KEY_NAME \ --query 'KeyMaterial' --output text > ${KEY_NAME}.pem chmod 400 ${KEY_NAME}.pem # 2) 보안 그룹 VPC_ID=$(aws ec2 describe-vpcs --region $REGION --query 'Vpcs[0].VpcId' --output text) SG_ID=$(aws ec2 create-security-group --region $REGION --group-name $SG_NAME \ --description "EC2 demo SG" --vpc-id $VPC_ID --query 'GroupId' --output text) # 인바운드 규칙: 22, 80 (※ 실습 후 삭제 권장 / 22는 본인 IP로 제한 권장) MYIP=$(curl -s https://checkip.amazonaws.com) aws ec2 authorize-security-group-ingress --region $REGION --group-id $SG_ID \ --ip-permissions "IpProtocol=tcp,FromPort=22,ToPort=22,IpRanges=[{CidrIp=${MYIP}/32,Description='SSH from my IP'}]" aws ec2 authorize-security-group-ingress --region $REGION --group-id $SG_ID \ --ip-permissions "IpProtocol=tcp,FromPort=80,ToPort=80,IpRanges=[{CidrIp=0.0.0.0/0,Description='HTTP'}]" # 3) AMI ID 조회 (Amazon Linux 2023 최신) AMI_ID=$(aws ssm get-parameters --region $REGION \ --names /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64 \ --query 'Parameters[0].Value' --output text) # 4) User Data 스크립트 cat > user-data.sh <<'EOF' #!/bin/bash set -eux dnf -y update || yum -y update dnf -y install nginx || yum -y install nginx systemctl enable nginx echo "<h1>EC2 Web Server is up!</h1>" > /usr/share/nginx/html/index.html systemctl start nginx EOF # 5) 퍼블릭 서브넷 하나 가져오기 SUBNET_ID=$(aws ec2 describe-subnets --region $REGION \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=default-for-az,Values=true" \ --query 'Subnets[0].SubnetId' --output text) # 6) 인스턴스 시작 INSTANCE_ID=$(aws ec2 run-instances --region $REGION \ --image-id $AMI_ID --instance-type t3.micro \ --key-name $KEY_NAME --subnet-id $SUBNET_ID --security-group-ids $SG_ID \ --user-data file://user-data.sh \ --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=ec2-demo-web}]' \ --query 'Instances[0].InstanceId' --output text) # 7) 퍼블릭 IP 확인 aws ec2 wait instance-running --region $REGION --instance-ids $INSTANCE_ID PUBLIC_IP=$(aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID \ --query 'Reservations[0].Instances[0].PublicIpAddress' --output text) echo "PUBLIC_IP=$PUBLIC_IP" # 8) 접속 확인 (로컬에서 웹 브라우저로 http://$PUBLIC_IP)

(선택) SSH로 접속

 
ssh -i ${KEY_NAME}.pem ec2-user@${PUBLIC_IP} # Amazon Linux: ec2-user / Ubuntu: ubuntu 사용자

C. (보너스) SSM(Session Manager)로 무SSH 접속

  1. IAM 역할 생성 후 EC2에 연결: AmazonSSMManagedInstanceCore 정책 포함
  2. Systems Manager → Session Manager → 인스턴스 선택 → Start session

보안 그룹에서 22포트 열 필요 없음. 운영 보안에 유리합니다.


D. (선택) 자동 종료 스케줄링(비용 보호)

User Data에 크론을 넣어 일정 시간 뒤 중지/종료 스케줄을 걸 수 있습니다. (또는 Instance Scheduler/Lambda 사용)

예: 2시간 뒤 자동 종료 스크립트(데모용)

 
#!/bin/bash INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) at now + 120 minutes <<EOT /usr/bin/aws ec2 stop-instances --region ap-northeast-2 --instance-ids $INSTANCE_ID EOT

6) 운영 팁

  • AMI 베이크: Packer/EC2 Image Builder로 표준 이미지를 만들어 배포 시간을 단축
  • Auto Scaling: CPU/지표 기반으로 최소/최대 용량 자동 조절
  • 배포: CodeDeploy(블루/그린), ASG 롤링 업데이트, 혹은 컨테이너(ECS/EKS)로 이전 고려
  • 보안: 보안 그룹 최소 권한, SSM 우선, 키 관리(KMS), 패치 자동화(SSM Patch Manager)
  • 로깅/모니터링: CloudWatch Logs/metrics, Alarm, CloudTrail, Config로 변경 추적

7) 마무리

EC2는 가장 범용적이고 강력한 IaaS 컴퓨팅입니다. 본문 실습대로 User Data로 즉시 웹 서버를 구동하고, 필요 시 SSM을 붙여 보안과 운영 편의성을 동시에 챙기세요. 이후에는 ALB + Auto Scaling으로 확장하고, 배포 자동화까지 이어가면 프로덕션 수준의 아키텍처로 성장시킬 수 있습니다.

'AWS > 서비스' 카테고리의 다른 글

🚀 AWS Lambda 서비스 소개 및 실습 예제  (0) 2025.08.20
Amazon API Gateway  (0) 2025.02.24
AWS WAF (Web Application Firewall)  (0) 2025.02.24
AWS IAM (Identity and Access Management)  (0) 2025.02.24
Amazon Route 53  (0) 2025.02.24