웹서비스 환경 구성 #1 – VPC ~ AMI
1. VPC 및 서브넷 구성
- 사용자 지정 VPC 생성 (CIDR: 예시 10.0.0.0/16)
- t2.micro가 가능한 가용영역 확인 후 퍼블릭 서브넷 2개 생성
2. 인터넷 게이트웨이 및 라우팅 설정
- 인터넷 게이트웨이 생성 후 VPC에 연결
- 라우팅 테이블 생성 → 0.0.0.0/0 대상 IGW 설정
- 두 개의 퍼블릭 서브넷에 연결하여 외부 통신 가능하도록 구성
3. 보안 그룹 설정
- 인스턴스용 보안 그룹 생성 (22, 80 포트 허용)
4. EC2 인스턴스 생성 및 웹서버 구성
- Amazon Linux 2023 기반 EC2 인스턴스 생성
- Apache 설치 및 PHP 기반 웹 페이지 업로드
- SSH로 접속 후 index.php 및 메타데이터 연동 확인
5. AMI 이미지 생성 및 복제 인스턴스 생성
- 웹 서버 설정이 완료된 인스턴스를 기반으로 AMI 생성
- AMI를 사용해 두 번째 서브넷에 동일한 웹 서버 인스턴스 생성
- 브라우저를 통해 첫 번째와 동일한 페이지 정상 응답 확인
VPC, Subnet 생성
t2.micro 인스턴스 유형을 사용할 수 있는 가용 영역 확인 ⇒ 사용 가능한 가용영역에 서브넷을 생성
VPC 생성
나머지 설정을 그대로 유지한 상태로 [VPC 생성] 버튼을 클릭
서브넷 생성
인터넷 게이트웨이를 추가하고, 라우팅 테이블을 설정
인터넷 게이트웨이 생성
인터넷 게이트웨이를 VPC에 연결
라우팅 테이블을 생성하고 인터넷 게이트웨이로의 라우팅을 추가
public-subnet-a, public-subnet-c 서브넷을 퍼블릭 서브넷으로 설정
인스턴스에 적용할 보안그룹을 생성 ⇐ SSH(22), HTTP(80) 포트로 접근을 허용
(첫번째 서브넷에) 웹 서버 인스턴스를 생성
인스턴스 시작(생성)
인스턴스 실행 및 퍼블릭 IP 주소 확인
웹 서버 동작 확인
SSH Client 설치, 설정
https://bitvise.com/ssh-client-download
인스턴스로 SSH 접속
# 1. EC2 인스턴스 접속 (로컬 터미널에서 실행)
ssh -i MyTestKeyPair.pem ec2-user@13.125.169.160
# 2. Apache 웹 서버 상태 확인
sudo systemctl status httpd
# 3. 웹 루트 디렉토리로 이동
cd /var/www/html
ls
# 4. index.php 내부 확인
cat index.php
# index.php는 다음과 같이 메타데이터 관련 PHP 파일을 포함함
<?php include('menu.php'); ?>
<?php include("get-index-meta-data.php"); ?>
<?php include('get-cpu-load.php'); ?>
# 5. get-index-meta-data.php 핵심 코드
<?php
// IMDSv2 메타데이터 토큰 요청
$token = file_get_contents('http://169.254.169.254/latest/api/token', false,
stream_context_create([
'http' => [
'method' => 'PUT',
'header' => 'X-aws-ec2-metadata-token-ttl-seconds: 21600'
]
])
);
// 메타데이터 요청 함수
function getMetadata($path, $token) {
return file_get_contents('http://169.254.169.254/latest/meta-data/' . $path, false,
stream_context_create([
'http' => [
'header' => 'X-aws-ec2-metadata-token: ' . $token
]
])
);
}
// 필요한 메타데이터
$region = getMetadata('placement/region', $token);
$az = getMetadata('placement/availability-zone', $token);
$instanceId = getMetadata('instance-id', $token);
$privateIp = getMetadata('local-ipv4', $token);
$publicIp = getMetadata('public-ipv4', $token);
// 출력
echo "<table>";
echo "<tr><th>Meta-Data</th><th>Value</th></tr>";
echo "<tr><td>리전</td><td>$region</td></tr>";
echo "<tr><td>가용 영역</td><td>$az</td></tr>";
echo "<tr><td>인스턴스 ID</td><td>$instanceId</td></tr>";
echo "<tr><td>프라이빗 IP</td><td>$privateIp</td></tr>";
echo "<tr><td>퍼블릭 IP</td><td>$publicIp</td></tr>";
echo "</table>";
?>
브라우저를 이용해서 요청을 전달
인스턴스를 추가로 생성
(웹 서버 설정이 모두 끝난 상태에서) AMI 생성
생성한 웹 서버 이미지를 이용해서 두번째 서브넷에 웹 서버 인스턴스를 생성
새롭게 추가한 인스턴스의 동작을 확인
인스턴스의 퍼블릭 IP 주소를 확인
브라우저로 접속 ⇒ 첫번째 인스턴스와 동일한 동작을 제공하는 것을 확인할 수 있음
'AWS' 카테고리의 다른 글
AWS - 환경 구성 실습 - React + FastAPI 프로젝트 배포 (0) | 2025.06.03 |
---|---|
AWS - 웹서비스 환경 구성#3 (0) | 2025.06.02 |
AWS - 웹서비스 환경 구성#2 (0) | 2025.06.02 |
AWS - EC2 인프라 구조(AMI, EBS, 스냅샷, EIP, Load Balancer, Auto Scaling) (1) | 2025.06.02 |
AWS - 보안그룹, NACL의 인바운드, 아웃바운드 규칙 편집 (1) | 2025.06.02 |
AWS - VPC (0) | 2025.05.30 |