Cloud/🧱 Aws

🧱 AWS EC2 - 유저데이터 / 메타데이터

sy-tech 2025. 5. 18. 00:03

EC2 인스턴스를 만들고 나서 항상 똑같은 작업을 반복하고 있다는 생각이 들었다.

아파치 설치하고, 서비스 시작하고, index.html 파일 만들어서 테스트하고...

그런데 이런 작업을 자동으로 처리해주는 기능이 있다고 한다.

바로 User Data 기능이다.

이번 글에서는 EC2 User Data가 뭔지, 왜 쓰는지 공부해보고 실습까지 하려고 한다.

 


 

 

 


 

 

1. EC2 User Data란?

EC2 인스턴스를 처음 만들 때, 자동으로 실행할 스크립트를 미리 입력할 수 있는 기능이다.

  • 인스턴스가 최초 부팅될 때 한 번만 실행된다.
  • 주로 초기 설정 자동화에 사용된다. ex)패키지 설치, 파일 생성, 서버 실행 등

2. EC2 Metadata란?

Metadata는 EC2 인스턴스가 자기 자신의 정보를 확인할 수 있도록 AWS가 제공하는 정보 API이다.

  • EC2 내부에서만 접근 가능
  • 169.254.169.254 라는 로컬 IP 주소를 통해 제공
  • 클라우드에서 서버가 "내가 누구인지" 알아야 하는 상황에서 사용

주요 Metadata 정보 예시

항목 설명 명령어
인스턴스 ID EC2 고유 ID curl http://169.254.169.254/latest/meta-data/instance-id
퍼블릭 IP 외부에서 접근 가능한 IP .../public-ipv4
AMI ID 생성에 사용된 이미지 .../ami-id
보안 그룹 연결된 보안 정책 그룹 .../security-groups
지역/가용영역 인스턴스가 속한 리전/AZ .../placement/availability-zone

 


 

 

#실습 목표

  • EC2 User Data를 활용한 웹 서버 자동 구성
  • 최신 버전의 IMDSv2 메타데이터 API로 인스턴스 정보 조회
  • 인스턴스 ID를 /var/www/html/index.html 에 자동 기록
  • 이후 웹 브라우저 접속을 통해 결과 확인
  • 실행 로그를 통해 정상 수행 여부 확인

사용한 User Data 스크립트

#!/bin/bash
sudo -s
dnf install httpd -y
service httpd start
chkconfig httpd on
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
INSTANCE_ID=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id)
echo "$INSTANCE_ID" >> /var/www/html/index.html

 

1. EC2 인스턴스 생성 (User Data 항목에 위 스크립트 입력)

Userdata에 스크립트 넣기

 

2. 인스턴스 생성 후 퍼블릭 IPv4 DNS 주소로 접속

Userdata를 통해 web서버가 설치되고 index.html 파일에 metadata값이 기록된 모습이다.

 

3. 인스턴스에 연결해 userdata가 잘 동작했는지 확인

/var/www/html/index.html 파일 확인

 

4. 로그 분석

vi cloud-input.log
vi cloud-input-output.log

인스턴스 생성 과정에 userdata가 잘 동작했는지 로그를 보며 확인이 가능했다.

 

 


 

마무리 하며

이번 실습을 통해 단순히 EC2를 생성하는 것을 넘어서, 스크립트를 황용하여 자동화하는 개념을 이해 할 수 있었다.

실무에서도 서버 구성 자동화나 로그를 보며 오류가 생겼다면 트러블 슈팅하는것은 유용하게 쓰일 것 같다.