Skip to content

Commit

Permalink
Add frontend module
Browse files Browse the repository at this point in the history
  • Loading branch information
campos20 committed May 6, 2024
1 parent def6421 commit 6215443
Show file tree
Hide file tree
Showing 13 changed files with 190 additions and 6 deletions.
60 changes: 60 additions & 0 deletions iac/.terraform.lock.hcl

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 14 additions & 1 deletion iac/certificate.tf
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
data "aws_acm_certificate" "certificate" {
domain = "*.worldcubeassociation.org"
domain = "*.${var.domain_name}"
statuses = ["ISSUED"]
}

provider "aws" {
region = "us-east-1"
alias = "us_east_1"
}

data "aws_acm_certificate" "certificate_us_east_1" {
domain = "*.${var.domain_name}"
statuses = ["ISSUED"]

provider = aws.us_east_1
}

10 changes: 10 additions & 0 deletions iac/frontend.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module "tnoodle_frontend" {
source = "./modules/frontend"

aws_region = var.aws_region
project_name = var.tnoodle_name
zone_id = data.aws_ssm_parameter.wca_zone_id.value
domain_name = var.domain_name
org_name = var.org_name
certificate_arn = data.aws_acm_certificate.certificate_us_east_1.arn
}
3 changes: 3 additions & 0 deletions iac/modules/frontend/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Frontend Module

This holds the infra to deploy TNoodle's frontend.
37 changes: 37 additions & 0 deletions iac/modules/frontend/cloudfront.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
module "cdn" {
source = "cloudposse/cloudfront-s3-cdn/aws"

# Cloud Posse recommends pinning every module to a specific version
version = "0.92.0"

origin_bucket = aws_s3_bucket.fontend_bucket.id
s3_access_logging_enabled = false
logging_enabled = false
cached_methods = ["HEAD", "GET", "OPTIONS"]
default_ttl = "86400"
name = "cdn"
stage = terraform.workspace
namespace = var.domain_name
error_document = "index.html"
aliases = ["${var.project_name}.${var.domain_name}"]
dns_alias_enabled = false
acm_certificate_arn = var.certificate_arn
minimum_protocol_version = "TLSv1.2_2021"

custom_error_response = [
{
error_caching_min_ttl = 10,
error_code = 403
response_code = 403
response_page_path = "/index.html"
},
{
error_caching_min_ttl = 10,
error_code = 404
response_code = 404
response_page_path = "/index.html"
}
]

depends_on = [aws_s3_bucket.fontend_bucket]
}
Empty file added iac/modules/frontend/main.tf
Empty file.
12 changes: 12 additions & 0 deletions iac/modules/frontend/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
output "deployment_bucket" {
value = aws_s3_bucket.fontend_bucket.bucket
}

output "cf_distribution_id" {
value = module.cdn.cf_id
}

output "cf_domain_name" {
value = module.cdn.cf_domain_name
}

11 changes: 11 additions & 0 deletions iac/modules/frontend/route53.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
resource "aws_route53_record" "project_record" {
zone_id = var.zone_id
name = var.project_name
type = "A"

alias {
name = module.cdn.cf_domain_name
evaluate_target_health = true
zone_id = module.cdn.cf_hosted_zone_id
}
}
3 changes: 3 additions & 0 deletions iac/modules/frontend/s3.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
resource "aws_s3_bucket" "fontend_bucket" {
bucket = "${var.org_name}-${var.project_name}-frontend"
}
23 changes: 23 additions & 0 deletions iac/modules/frontend/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
variable "aws_region" {
description = "AWS Region"
}

variable "project_name" {
description = "The name of this project"
}

variable "zone_id" {
description = "The Route53 zone ID"
}

variable "domain_name" {
description = "The domain name, web URL"
}

variable "org_name" {
description = "The name of the organization"
}

variable "certificate_arn" {
description = "The ARN of the ACM certificate"
}
3 changes: 3 additions & 0 deletions iac/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
output "tnoodle_distribution_id" {
value = module.tnoodle_frontend.cf_distribution_id
}
10 changes: 5 additions & 5 deletions iac/route53.tf
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# tnoodle.worldcubeassociation.org
# tnoodle-api.worldcubeassociation.org
resource "aws_route53_record" "project_record" {
zone_id = data.aws_ssm_parameter.wca_zone_id.value
name = var.tnoodle_name
name = "${var.tnoodle_name}-api"
type = "A"

alias {
Expand All @@ -11,10 +11,10 @@ resource "aws_route53_record" "project_record" {
}
}

# scramble.worldcubeassociation.org
resource "aws_route53_record" "project_record" {
# scramble-api.worldcubeassociation.org
resource "aws_route53_record" "alternative_record" {
zone_id = data.aws_ssm_parameter.wca_zone_id.value
name = "scramble"
name = "scramble-api"
type = "A"

alias {
Expand Down
9 changes: 9 additions & 0 deletions iac/variable.tf
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,12 @@ variable "http_port" {
variable "https_port" {
default = "443"
}

variable "domain_name" {
default = "worldcubeassociation.org"
}

variable "org_name" {
description = "Organization's identifier"
default = "wca"
}

0 comments on commit 6215443

Please sign in to comment.