target=google_compute_target_https_proxy.frontend_https_proxy.self_link# 대상 프록시
port_range="443"
}
3. 코드 설명
A. GCP Provider 설정
provider "google" { #테라폼이 GCP와 상호작용할 수 있도록 설정 credentials = file("/home/ubuntu/project/key.json") #인증정보를 json 파일로 project = var.project_id region = var.region }
B. 변수 정의
variable "project_id" { description = "The ID of the GCP project" type = string }
variable "region" { description = "The region to deploy resources in" type = string }
C. SSL 인증서 발급
resource "google_compute_ssl_certificate" "my-certificate" { #GCP에서 SSL 인증서 생성 name = "my-certificate" #인증서 이름 지정 private_key = file("/home/ubuntu/project/private_key_decrypted.pem") # SSL 인증서에 사용할 개인 키 파일 경로 certificate = file("/home/ubuntu/project/certificate.pem") # SSL 인증서 파일의 경로 }
D. 도메인 등록 및 설정
resource "google_dns_managed_zone" "example_zone" { #GCP의 DNS 관리 영역 설정 name = "test-zone" # DNS 영역 이름 dns_name = "jungwon.store." # 도메인 이름 description = "My DNS zone for jungwon.store" }
resource "google_dns_record_set" "example_ns" { #DNS 레코드의 이름 지정 name = "jungwon.store." # DNS 레코드 이름 type = "NS" ttl = 300 managed_zone = google_dns_managed_zone.example_zone.name
# A 레코드 설정 resource "google_dns_record_set" "example_a" { name = "jungwon.store." type = "A" ttl = 300 managed_zone = google_dns_managed_zone.example_zone.name
rrdatas = ["210.124.140.121"] # 서버의 실제 IP 주소 입력하기 #curl ifconfig.me로 서버 IP를 알 수 있음
E. 스토리지 설정
resource "google_storage_bucket" "frontend_bucket" { #GCP의 Cloud Storage 버킷 생성 name = "test-frontend-bucket" #버킷 이름 location = var.region force_destroy = true
resource "google_storage_bucket_object" "frontend_files" { #버킷에 파일을 업로드 for_each = fileset("${path.module}/frontend", "**") #업로드할 파일 목록
name = each.key # 객체 이름 bucket = google_storage_bucket.frontend_bucket.name # 대상 버킷 이름 source = "${path.module}/frontend/${each.key}" # 소스 파일 경로 }
F. CDN 설정
resource "google_compute_backend_bucket" "frontend_backend_bucket" { #CDN에 사용할 백엔드 버킷 설정 name = "frontend-backend-bucket" #백엔드 버킷 이름 bucket_name = google_storage_bucket.frontend_bucket.name enable_cdn = true }
resource "google_compute_url_map" "frontend_url_map" { #URL 매핑을 정의 name = "frontend-url-map" #URL 맵 이름 default_service = google_compute_backend_bucket.frontend_backend_bucket.self_link #기본 서비스 }
resource "google_compute_target_http_proxy" "frontend_http_proxy" { #HTTP 요청을 처리할 프록시 설정 name = "frontend-http-proxy" #HTTP 프록시 이름 url_map = google_compute_url_map.frontend_url_map.self_link #URL 맵 연결 }
resource "google_compute_global_forwarding_rule" "frontend_forwarding_rule" { #HTTP 포워딩 규칙 설정 name = "frontend-forwarding-rule" #포워딩 룰 이름 target = google_compute_target_http_proxy.frontend_http_proxy.self_link #대상 프록시 port_range = "80" }
G. HTTPS 로드 밸런서 설정
resource "google_compute_target_https_proxy" "frontend_https_proxy" { #HTTPS 요청을 처리할 프록시 설정 name = "frontend-https-proxy" #HTTPS 프록시 이름 url_map = google_compute_url_map.frontend_url_map.self_link #URL 맵 연결 ssl_certificates = [google_compute_ssl_certificate.my-certificate.self_link] #SSL 인증서 연결 }
resource "google_compute_global_forwarding_rule" "frontend_https_forwarding_rule" { #HTTPS 포워딩 규칙 설정 name = "frontend-https-forwarding-rule" #포워딩 룰 이름 target = google_compute_target_https_proxy.frontend_https_proxy.self_link #대상 프록시 port_range = "443" }