terraform { backend "s3" { bucket = "terraform.grimoire" key = "bliki.tfstate" region = "ca-central-1" } } provider "aws" { version = "~> 1.11" region = "ca-central-1" } # CloudFront needs certificates in us-east-1. provider "aws" { version = "~> 1.11" alias = "cloudfront" region = "us-east-1" } data "terraform_remote_state" "dns" { backend = "s3" config { bucket = "terraform.grimoire" key = "dns.tfstate" region = "ca-central-1" } } resource "aws_s3_bucket" "bliki" { bucket = "grimoire.ca" website { index_document = "index.html" } } resource "aws_s3_bucket_policy" "bliki" { bucket = "${aws_s3_bucket.bliki.id}" policy = < /index.html # translation through S3's website config. domain_name = "${aws_s3_bucket.bliki.website_endpoint}" custom_origin_config { http_port = 80 https_port = 443 # Because the origin is a non-URL-safe bucket name, S3's default TLS # config doesn't apply. Since we can't provide our own cert, force HTTP. origin_protocol_policy = "http-only" origin_ssl_protocols = ["TLSv1.2"] } } default_cache_behavior { target_origin_id = "bliki" allowed_methods = ["GET", "HEAD", "OPTIONS"] cached_methods = ["GET", "HEAD"] viewer_protocol_policy = "redirect-to-https" compress = true min_ttl = 0 default_ttl = 900 max_ttl = 3600 forwarded_values { query_string = false cookies { forward = "none" } } } restrictions { geo_restriction { restriction_type = "none" } } viewer_certificate { acm_certificate_arn = "${aws_acm_certificate.bliki.arn}" ssl_support_method = "sni-only" minimum_protocol_version = "TLSv1" } } resource "aws_route53_record" "bliki" { zone_id = "${data.terraform_remote_state.dns.grimoire_ca_zone_id}" name = "" type = "A" alias { name = "${aws_cloudfront_distribution.bliki.domain_name}" zone_id = "${aws_cloudfront_distribution.bliki.hosted_zone_id}" evaluate_target_health = false } }