Terraform을 사용하여 AWS에 보안 및 확장 가능한 정적 웹사이트 배포
Source: Dev.to
Overview
이 미니 프로젝트는 Terraform을 사용하여 AWS에 보안 정적 웹사이트를 배포하는 과정을 보여줍니다. Amazon S3를 정적 콘텐츠 저장소로, Amazon CloudFront를 전 세계 콘텐츠 전송망으로 활용하여 고가용성, 향상된 성능, 그리고 커스텀 도메인을 통한 HTTPS 접근을 제공하는 엔드‑투‑엔드 인프라‑코드 솔루션입니다.
Architecture

Implementation Steps
Step 1 – Provision S3 bucket
정적 웹사이트 파일을 저장할 S3 버킷을 생성하고 모든 퍼블릭 접근을 차단하여 버킷이 인터넷에서 직접 접근되지 않도록 했습니다.

Step 2 – Upload website assets
로컬 www/ 디렉터리의 모든 파일을 자동으로 S3 버킷에 업로드하고 적절한 MIME 콘텐츠 타입(HTML, CSS, JS, 이미지)을 설정했습니다.

Step 3 – Retrieve Route 53 hosted zone
도메인에 대한 기존 퍼블릭 Route 53 호스티드 존을 조회했습니다.

Step 4 – Request SSL certificate
AWS Certificate Manager를 통해 SSL 인증서를 요청했습니다(CloudFront에 필요). 인증서는 Route 53을 이용한 DNS 검증으로 발급되었습니다.

Step 5 – Create CloudFront Origin Access Control (OAC)
CloudFront만 HTTPS를 통해 S3 버킷의 콘텐츠를 읽을 수 있도록 OAC를 생성했으며, 버킷에 대한 직접 퍼블릭 접근은 차단된 상태를 유지했습니다.

Step 6 – Configure CloudFront distribution
Terraform 리소스를 사용해 CloudFront 배포를 정의했습니다. 이 배포는 전 세계 CDN을 통해 사용자와 콘텐츠를 연결하고, 엣지 로케이션에 자산을 캐시함으로써 지연 시간을 감소시킵니다.

Step 7 – Apply S3 bucket policy
SourceArn 조건을 사용해 CloudFront 배포에서만 s3:GetObject 권한을 허용하는 버킷 정책을 추가했습니다.

Step 8 – Create Route 53 alias record
커스텀 도메인(예: www.example.com)을 CloudFront 배포에 연결하는 Route 53 별칭 레코드를 생성해, 커스텀 도메인을 통한 HTTPS 접근을 가능하게 했습니다.

Additional Resources
- YouTube 동영상:
- GitHub 저장소:
Tags: Terraform AWS DevOps