웹 서버 인스턴스 시작 (Kiro CLI)
AWS General ImmersionDay 워크샵 - 심화 모듈 > 고급 모듈 - 웹 애플리케이션 > 컴퓨팅 – Amazon EC2 > 웹 서버 인스턴스 시작
ℹ️ 이 챕터는 기본 Amazon Linux 인스턴스로 시작하여 초기 단계에서 Apache/PHP 웹 서버를 자동으로 구성하도록 합니다.
⚠️ 이 가이드는 Kiro CLI를 사용하여 진행합니다. VPC 생성 (Kiro CLI) 실습이 사전에 완료되어 있어야 합니다.
1단계: 보안 그룹 생성
웹 서버용 보안 그룹을 생성합니다. HTTP(80)는 어디서든 접속 가능하도록, SSH(22)는 내 IP에서만 허용합니다.
ℹ️ 최소 권한 원칙에 따라 필요한 최소한의 트래픽만 허용하도록 Security groups를 구성하는 것이 모범 사례입니다.
⚠️ CloudShell에서 실행하는 경우 "내 IP"는 CloudShell의 IP가 되며, 이 IP는 세션마다 변경될 수 있습니다. 웹 브라우저에서 접속 확인이 필요하므로 HTTP는 Anywhere(0.0.0.0/0)로 설정합니다.
VPC-Lab에 보안 그룹을 생성해줘. 이름과 설명은 "Immersion Day - Web Server"로 하고, 인바운드 규칙으로 SSH(22번 포트)는 내 IP에서만, HTTP(80번 포트)는 Anywhere(0.0.0.0/0)에서 허용해줘.
2단계: User Data 스크립트 준비
EC2 인스턴스가 시작될 때 자동으로 웹 서버를 구성하는 User Data 스크립트를 로컬 파일로 저장합니다.
ℹ️ User Data는 인스턴스가 처음 생성될 때 실행되는 사용자 정의 초기화 스크립트입니다.
다음 내용으로 userdata.sh 파일을 현재 디렉토리에 만들어줘.
#!/bin/sh
#Install a LAMP stack
dnf install -y httpd wget php-fpm php-mysqli php-json php php-devel
dnf install -y mariadb105-server
dnf install -y httpd php-mbstring
#Start the web server
chkconfig httpd on
systemctl start httpd
#Install the web pages for our lab
if [ ! -f /var/www/html/immersion-day-app-php7.zip ]; then
cd /var/www/html
wget -O 'immersion-day-app-php7.zip' 'https://static.us-east-1.prod.workshops.aws/public/eac0ea23-40f6-4364-ab32-0d346e1cc480/assets/immersion-day-app-php7.zip'
unzip immersion-day-app-php7.zip
fi
#Install the AWS SDK for PHP
if [ ! -f /var/www/html/aws.zip ]; then
cd /var/www/html
mkdir vendor
cd vendor
wget https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip
unzip aws.zip
fi
# Update existing packages
dnf update -y
3단계: EC2 인스턴스 시작
VPC-Lab의 퍼블릭 서브넷에 웹 서버 인스턴스를 시작합니다.
us-east-1 리전에 EC2 인스턴스를 시작해줘. 이름은 "Web server for custom AMI", AMI는 최신 Amazon Linux 2023, 인스턴스 타입은 t2.micro, 키 페어 없이 진행해줘. VPC-Lab의 퍼블릭 서브넷 1a에 배치하고 퍼블릭 IP 자동 할당 활성화해줘. 보안 그룹은 방금 만든 "Immersion Day - Web Server"를 사용하고, 메타데이터는 V2 only(토큰 필수)로 설정해줘. User Data는 방금 만든 userdata.sh 파일을 사용해줘.
4단계: 인스턴스 상태 확인
인스턴스가 정상적으로 실행 중인지 확인합니다.
"Web server for custom AMI" 인스턴스의 상태를 확인해줘. 퍼블릭 IP, 가용 영역, 인스턴스 상태를 보여줘.
5단계: 웹 서비스 동작 확인
인스턴스의 퍼블릭 IP로 웹 서버가 정상 동작하는지 확인합니다.
"Web server for custom AMI" 인스턴스의 퍼블릭 IP로 HTTP 요청을 보내서 웹 서버가 정상 동작하는지 확인해줘.
ℹ️ User Data 스크립트 실행이 완료되기까지 2~3분 정도 소요될 수 있습니다. 응답이 없으면 잠시 후 다시 시도하세요.
정상적으로 구성되면 아래와 같은 웹 페이지가 표시됩니다.
6단계: Session Manager를 위한 IAM Role 할당
이어질 데이터베이스 실습에서는 웹 서버에 부여된 IAM Role을 사용하여 RDS 데이터베이스에 연결합니다. EC2 인스턴스에 IAM Role을 할당하여 Session Manager로 접속할 수 있도록 합니다.
⚠️ 이 단계는 이후 데이터베이스 실습을 위해 필요합니다.
"Web server for custom AMI" 인스턴스에 SSMInstanceProfile IAM 인스턴스 프로파일을 연결해줘. 만약 SSMInstanceProfile이 없으면, AmazonSSMManagedInstanceCore 정책이 연결된 IAM Role을 먼저 만들고 인스턴스 프로파일로 생성한 뒤 연결해줘.
7단계: Custom AMI 생성
웹 서버 인스턴스를 사용하여 Custom AMI(Golden Image)를 생성합니다. 이 AMI는 이후 Auto Scaling 실습에서 사용됩니다.
ℹ️ AWS EC2 콘솔에서 필요에 맞는 Custom AMI를 생성할 수 있습니다. 이는 향후 EC2 인스턴스 생성에 사용할 수 있습니다.
"Web server for custom AMI" 인스턴스로 AMI를 생성해줘. 이미지 이름은 "Web Server v1", 설명은 "LAMP web server AMI"로 해줘.
8단계: AMI 생성 상태 확인
AMI가 정상적으로 생성되었는지 확인합니다.
"Web Server v1" AMI의 생성 상태를 확인해줘.
⚠️ AMI 상태가 available이 될 때까지 인스턴스를 종료하지 마세요.
9단계: 인스턴스 종료
AMI 생성이 완료되면 더 이상 필요하지 않은 인스턴스를 종료합니다.
ℹ️ 방금 생성한 EC2 인스턴스를 사용하여 Auto Scaling을 위한 Custom AMI(Golden Image) 생성이 완료되었습니다. 따라서 현재 실행 중인 EC2 인스턴스는 더 이상 필요하지 않으므로 종료합니다.
🚨 AMI 생성 프로세스가 완전히 완료될 때까지 "Web server for custom AMI" 인스턴스를 종료하지 마십시오. 진행하기 전에 AMI 상태가 available로 표시되는지 확인하세요.
"Web Server v1" AMI 상태가 available인지 확인하고, available이면 "Web server for custom AMI" 인스턴스를 종료(terminate)해줘.
현재까지 구성된 아키텍처
지금까지 구성된 리소스를 개념적으로 표시하면 아래 그림과 같습니다.
축하합니다! EC2 웹 서버를 사용하여 Custom AMI(Golden Image)를 성공적으로 생성했으며, 이는 다음 섹션에서 Auto-scaling 웹 서비스를 배포하는 데 활용될 수 있습니다.
💡 한 번에 요청하기: 위 단계를 하나의 프롬프트로 한 번에 요청할 수도 있습니다.
us-east-1 리전 VPC-Lab의 퍼블릭 서브넷 1a에 EC2 인스턴스를 시작해줘. 이름은 "Web server for custom AMI", AMI는 최신 Amazon Linux 2023, 타입은 t2.micro, 키 페어 없이 진행. 보안 그룹 "Immersion Day - Web Server"를 VPC-Lab에 새로 만들고 SSH(22)는 내 IP에서만, HTTP(80)는 Anywhere(0.0.0.0/0)에서 허용. 퍼블릭 IP 자동 할당, 메타데이터 V2 only. User Data로 Apache/PHP LAMP 스택을 설치하고 https://static.us-east-1.prod.workshops.aws/public/eac0ea23-40f6-4364-ab32-0d346e1cc480/assets/immersion-day-app-php7.zip 웹앱과 AWS SDK for PHP를 설치해줘. 인스턴스가 running 되면 SSMInstanceProfile IAM 인스턴스 프로파일을 연결하고, 퍼블릭 IP로 HTTP 요청해서 웹 서버 동작 확인해줘. 확인되면 해당 인스턴스로 AMI를 생성해줘(이름: "Web Server v1", 설명: "LAMP web server AMI"). AMI가 available 되면 인스턴스를 terminate 해줘.