| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- # Terraform, compulsary.
- terraform {
- required_providers {
- aws = {
- source = "hashicorp/aws"
- version = "~> 4.16.0"
- }
- }
- required_version = ">= 0.15"
- }
- # Providers!
- # S3 Bucket in Ireland
- provider "aws" {
- region = "eu-west-1"
- }
- # Global for Certificates
- provider "aws" {
- region = "us-east-1"
- alias = "global"
- }
- # Variables
- variable "domainname" {
- type = string
- default = "blog.ligthert.net"
- }
- #
- # <S3
- #
- # Create a bucket
- resource "aws_s3_bucket" "bucket" {
- bucket = var.domainname
- force_destroy = true
- }
- # Place ACL on the bucket
- resource "aws_s3_bucket_acl" "bucket_acl" {
- bucket = aws_s3_bucket.bucket.id
- acl = "public-read"
- }
- # Enable the static file hosting
- resource "aws_s3_bucket_website_configuration" "bucket_website" {
- bucket = aws_s3_bucket.bucket.bucket
- index_document {
- suffix = "index.html"
- }
- error_document {
- key = "error.html"
- }
- }
- # Give bucket a policy
- resource "aws_s3_bucket_policy" "bucket_policy" {
- bucket = aws_s3_bucket.bucket.id
- policy = data.aws_iam_policy_document.bucket_policy_document.json
- }
- # Create a policy document
- data "aws_iam_policy_document" "bucket_policy_document" {
- statement {
- sid = "PublicReadGetObject"
- effect = "Allow"
- principals {
- type = "AWS"
- identifiers = ["*"]
- }
- actions = ["s3:GetObject"]
- resources = [
- aws_s3_bucket.bucket.arn,
- "${aws_s3_bucket.bucket.arn}/*",
- ]
- }
- }
- #
- # S3>
- #
- #
- # <CloudFront
- #
- locals {
- s3_origin_id = "S3Origin"
- }
- resource "aws_cloudfront_origin_access_identity" "dafaim" {
- comment = "Manage access and identities."
- }
- resource "aws_cloudfront_distribution" "s3_distribution" {
- aliases = ["${var.domainname}"]
- comment = "A CloudFront distribution"
- default_cache_behavior {
- allowed_methods = ["GET", "HEAD", "OPTIONS"]
- cached_methods = ["GET", "HEAD", "OPTIONS"]
- compress = true
- default_ttl = 3600
- forwarded_values {
- query_string = false
- cookies {
- forward = "none"
- }
- }
- max_ttl = 86400
- target_origin_id = local.s3_origin_id
- viewer_protocol_policy = "https-only"
- }
- default_root_object = "index.html"
- enabled = true
- is_ipv6_enabled = true
- ordered_cache_behavior {
- path_pattern = "/*"
- allowed_methods = ["GET", "HEAD", "OPTIONS"]
- cached_methods = ["GET", "HEAD", "OPTIONS"]
- target_origin_id = local.s3_origin_id
- forwarded_values {
- query_string = false
- headers = ["Origin"]
- cookies {
- forward = "none"
- }
- }
- default_ttl = 86400
- max_ttl = 31536000
- compress = true
- viewer_protocol_policy = "https-only"
- }
- origin {
- domain_name = aws_s3_bucket.bucket.bucket_regional_domain_name
- origin_id = local.s3_origin_id
- s3_origin_config {
- origin_access_identity = aws_cloudfront_origin_access_identity.dafaim.cloudfront_access_identity_path
- }
- }
- restrictions {
- geo_restriction {
- restriction_type = "none"
- }
- }
- price_class = "PriceClass_All"
- viewer_certificate {
- acm_certificate_arn = "arn:aws:acm:us-east-1:131289899509:certificate/affaa360-86e8-40e9-b008-e691e55646c8"
- cloudfront_default_certificate = false
- ssl_support_method = "sni-only"
- }
- }
- #
- # CloudFront>
- #
|