AWS - 웹서비스 환경 구성#1

2025. 6. 2. 11:33·AWS

웹서비스 환경 구성 #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
'AWS' 카테고리의 다른 글
  • AWS - 웹서비스 환경 구성#3
  • AWS - 웹서비스 환경 구성#2
  • AWS - EC2 인프라 구조(AMI, EBS, 스냅샷, EIP, Load Balancer, Auto Scaling)
  • AWS - 보안그룹, NACL의 인바운드, 아웃바운드 규칙 편집
jaeon.cloud
jaeon.cloud
  • jaeon.cloud
    JEONG JAE ON
    jaeon.cloud
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Docker (8)
      • Cloud (7)
      • AWS (14)
      • Network (9)
      • Linux (1)
      • Python (7)
      • Javascript (3)
      • React (5)
      • Project (3)
      • Kubernetes (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    3-tier Architecture
    react
    클라우드
    kubernetes
    cors
    lambda
    네트워크
    http
    docker
    Python
    AWS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jaeon.cloud
AWS - 웹서비스 환경 구성#1
상단으로

티스토리툴바