본문으로 건너뛰기

AWS Day 5 - 0116

AWS Day 5 - 0116

목차


S3 Static Website Hosting

아키텍처 개요

┌─────────────────────────┐
│ Internet │
└───────────┬─────────────┘

┌───────────┴─────────────┐
│ S3 Static Website │
│ http://<BUCKET_NAME> │
│ .s3-website- │
│ <REGION>.amazonaws.com│
└───────────┬─────────────┘

┌───────────┴─────────────┐
│ pista-bucket1 │
│ ├── index.html │
│ ├── error.html │
│ ├── css/ │
│ ├── js/ │
│ └── assets/ │
└─────────────────────────┘

1. 버킷 생성

항목
Bucket Name<BUCKET_NAME>
AWS Region<REGION>
Object OwnershipACLs disabled
Block Public Access❌ 전부 해제 (4단계에서 설정)

2. 정적 웹 사이트 호스팅 활성화

속성(Properties) > 정적 웹 사이트 호스팅(Static website hosting)

항목
정적 웹 사이트 호스팅활성화
호스팅 유형정적 웹 사이트 호스팅
인덱스 문서index.html
오류 문서error.html

💡 활성화 후 엔드포인트 URL이 생성됩니다: http://<BUCKET_NAME>.s3-website-<REGION>.amazonaws.com

3. 퍼블릭 액세스 차단 해제

권한(Permissions) > 퍼블릭 액세스 차단(Block public access)

설정상태
새 ACL을 통해 부여된 퍼블릭 액세스 차단❌ 해제
임의의 ACL을 통해 부여된 퍼블릭 액세스 차단❌ 해제
새 퍼블릭 버킷 또는 액세스 포인트 정책을 통해 부여된 액세스 차단❌ 해제
임의의 퍼블릭 버킷 또는 액세스 포인트 정책을 통해 부여된 액세스 차단❌ 해제

⚠️ 주의: 퍼블릭 액세스 차단을 해제하면 버킷 정책에 따라 인터넷에 공개될 수 있습니다.

4. 버킷 정책 설정

권한(Permissions) > 버킷 정책(Bucket policy)

📄 bucket-get.json

💡 <BUCKET_NAME>을 실제 버킷 이름으로 교체하세요.

5. 파일 업로드

📁 static-web/ 폴더의 파일을 버킷에 업로드

파일/폴더용도
index.html메인 페이지
error.html오류 페이지 (404 등)
css/스타일시트
js/JavaScript
assets/이미지, 폰트 등

6. 접속 확인

# 웹 브라우저에서 접속
http://<BUCKET_NAME>.s3-website-<REGION>.amazonaws.com

S3 버킷 구성표

항목
Bucket Name<BUCKET_NAME>
Region<REGION>
AccessPublic (Static Website)
Website Endpointhttp://<BUCKET_NAME>.s3-website-<REGION>.amazonaws.com

CloudFront 연동

아키텍처 개요

┌─────────────────────────┐
│ Internet │
└───────────┬─────────────┘

┌───────────┴─────────────┐
│ CloudFront │
│ d1h23i3ai1x32r │
│ .cloudfront.net │
└───────────┬─────────────┘

┌───────────┴─────────────┐
│ S3 Origin │
│ pista-bucket1 │
└─────────────────────────┘

CloudFront 배포 구성표

항목
Namepista-cloudfront1
Distribution IDE2KVUNDOPR6YAS
배포 도메인 이름d1h23i3ai1x32r.cloudfront.net
ARNarn:aws:cloudfront::824065647982:distribution/E2KVUNDOPR6YAS

일반 설정

항목
가격 분류모든 엣지 로케이션에서 사용 (최고의 성능)
지원되는 HTTP 버전HTTP/2, HTTP/1.1, HTTP/1.0
기본 루트 객체index.html
대체 도메인 이름-
표준 로깅Off

원본 (Origin) 설정

항목
Origin Domain<BUCKET_NAME>.s3-website-<REGION>.amazonaws.com
Origin TypeS3 Website Endpoint
ProtocolHTTP only (S3 정적 웹사이트는 HTTPS 미지원)

💡 주의: S3 정적 웹사이트 호스팅 엔드포인트를 Origin으로 사용할 때는 "HTTP only"를 선택해야 합니다.

접속 확인

# CloudFront 도메인으로 접속 (HTTPS 지원)
https://d1h23i3ai1x32r.cloudfront.net

# S3 직접 접속 (HTTP만 지원)
http://<BUCKET_NAME>.s3-website-<REGION>.amazonaws.com

💡 CloudFront 장점:

  • HTTPS 지원 (SSL/TLS 인증서 자동 적용)
  • 글로벌 엣지 로케이션에서 캐싱
  • 더 빠른 콘텐츠 전송

Lambda 함수

Lambda 함수 생성

항목
Function Namepista-lambda-api1
RuntimePython 3.14
Architecturex86_64

환경 변수 설정

Lambda > 함수 > 구성 > 환경 변수

KeyValue
USERpista

Lambda 함수 코드

import json, os

def lambda_handler(event, context):
username = os.environ.get("USER")
return {
'statusCode': 200,
'body': json.dumps({"username": username})
}

테스트 응답

{
"statusCode": 200,
"body": "{\"username\": \"pista\"}"
}

API Gateway

아키텍처 개요

┌─────────────────────────┐
│ Internet │
└───────────┬─────────────┘

┌───────────┴─────────────┐
│ API Gateway │
│ pista-api-health-1 │
└───────────┬─────────────┘

┌───────────────────┴───────────────────┐
│ │
▼ ▼
┌───────────────┐ ┌───────────────┐
│ / (root) │ │ /health │
│ HTTP Proxy │ │ Lambda │
│ → CloudFront │ │ → Lambda fn │
└───────────────┘ └───────────────┘

1. 트리거 추가 (API Gateway 생성)

Lambda > 함수 > 트리거 추가

항목
트리거 유형API Gateway
API새 API 생성
API 유형REST API
API 이름pista-api-health-1
설명REST API based on Python runtime
API 엔드포인트 유형엣지 최적화
Security PolicyTLS_1_0
IP 유형IPv4

2. 리소스 생성 (Root - CloudFront 프록시)

API Gateway > API > 리소스 > / (root) > 메서드 생성

항목
메서드 유형GET
통합 유형HTTP
HTTP 프록시 통합✅ ON (중요)
응답 전송 모드버퍼됨
HTTP 메서드GET
엔드포인트 URLhttps://d1h23i3ai1x32r.cloudfront.net/

💡 Root 경로(/)로 접속하면 CloudFront를 통해 S3 정적 웹사이트로 프록시됩니다.

3. 리소스 생성 (/health - Lambda 연동)

API Gateway > API > 리소스 > 리소스 생성

항목
리소스 경로/
리소스 이름health

메서드 생성 (/health > GET)

항목
메서드 유형GET
통합 유형Lambda 함수
Lambda 프록시 통합✅ ON
응답 전송 모드버퍼됨
Lambda 함수pista-lambda-api1

4. API 배포

API Gateway > API > API 배포

항목
스테이지새 스테이지
스테이지 이름test

5. 접속 확인

# Root 경로 (CloudFront 프록시)
https://<API_GATEWAY_ID>.execute-api.<REGION>.amazonaws.com/test

# Health Check (Lambda)
https://<API_GATEWAY_ID>.execute-api.<REGION>.amazonaws.com/test/health

API Gateway 구성표

항목
API Namepista-api-health-1
API IDy17odzrge2
엔드포인트 유형Edge Optimized
스테이지test

VPC Architecture


VPC 생성 구성표

1. VPC 기본 설정

항목
VPC Namepista-vpc
VPC IDvpc-0217f2fbe39a25c1d
IPv4 CIDR10.0.0.0/16
DNS 호스트 이름활성화
DNS 확인활성화

2. 서브넷 구성

퍼블릭 서브넷 (Public Subnets)

서브넷 ID서브넷 이름가용 영역CIDR 블록
subnet-06df70d34d815a011pista-subnet-public1-ap-south-1aap-south-1a10.0.0.0/20
subnet-04a5e97911d5f9893pista-subnet-public2-ap-south-1bap-south-1b10.0.16.0/20

프라이빗 서브넷 (Private Subnets)

서브넷 ID서브넷 이름가용 영역CIDR 블록
subnet-06957dbccecbf67d5pista-subnet-private1-ap-south-1aap-south-1a10.0.128.0/20
subnet-014c426d2ed520633pista-subnet-private2-ap-south-1bap-south-1b10.0.144.0/20

3. 인터넷 게이트웨이 (Internet Gateway)

항목
IGW IDigw-0f775bf918c698150
연결 대상pista-vpc (vpc-0217f2fbe39a25c1d)

4. 라우팅 테이블 (Route Tables)

라우팅 테이블 ID연결된 서브넷용도
rtb-0787b468e025d9a56Public 서브넷인터넷 연결
rtb-0ad303e664c907446Private 서브넷NAT Gateway 연결
rtb-0abcd9fc52cdc8641Private 서브넷NAT Gateway 연결

5. NAT Gateway

항목
NAT Gateway IDnat-0e81945c0b580713b
Elastic IPeipalloc-00da42b2f94366036
상태활성화

6. VPC Endpoints

항목
Endpoint IDvpce-05bd9d59a285fac92
서비스S3
연결된 라우팅 테이블Private 서브넷 라우팅 테이블

EC2 생성

EC2 인스턴스 구성표

항목Public EC2Private EC2
Namepista-ec2-public1pista-ec2-private1
Instance IDi-xxxxxi-xxxxx
AMIUbuntu 24.04 LTSUbuntu 24.04 LTS
Instance Typet2.microt2.micro
가용 영역ap-south-1aap-south-1a
서브넷pista-subnet-public1-ap-south-1apista-subnet-private1-ap-south-1a
퍼블릭 IPv4xxx.xxx.xxx.xxx-
프라이빗 IPv410.0.x.x10.0.x.x
보안 그룹pista-sg-1pista-sg-2
Key Pairpista-keypista-key

Installation Scripts

Public EC2 (Nginx + MySQL Client)

📄 public_ec2_userdata.sh

Private EC2 (MySQL Server)

📄 private_ec2_userdata.sh


관련 문서

그래프 뷰

그래프 데이터 로딩 중…
현재: AWS Day 5 - 0116
노드 클릭 → 이동 · 드래그 → 위치 조정