terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } cloudflare = { source = "cloudflare/cloudflare" version = "~> 4.0" } } required_version = ">= 1.0" } provider "aws" { region = "eu-central-1" # Frankfurt } resource "aws_amplify_app" "filamenteka" { name = "filamenteka" repository = var.github_repository platform = "WEB" # GitHub access token for private repos (optional for public repos) # access_token = var.github_token # Build settings for Next.js build_spec = <<-EOT version: 1 frontend: phases: preBuild: commands: - npm ci - npm run security:check build: commands: - npm run build - npm run test artifacts: baseDirectory: .next files: - '**/*' cache: paths: - node_modules/**/* - .next/cache/**/* EOT # Environment variables environment_variables = { CONFLUENCE_API_URL = var.confluence_api_url CONFLUENCE_TOKEN = var.confluence_token CONFLUENCE_PAGE_ID = var.confluence_page_id NEXT_PUBLIC_API_URL = aws_api_gateway_stage.api.invoke_url } # Custom rules for single-page app custom_rule { source = "/<*>" status = "404" target = "/index.html" } # Enable branch auto build enable_branch_auto_build = true tags = { Name = "Filamenteka" Environment = var.environment # Disable GitHub App migration prompt "amplify:github_app_migration" = "opted_out" } } # Main branch resource "aws_amplify_branch" "main" { app_id = aws_amplify_app.filamenteka.id branch_name = "main" # Enable auto build enable_auto_build = true # Environment variables specific to this branch (optional) environment_variables = {} stage = "PRODUCTION" tags = { Name = "Filamenteka-main" Environment = var.environment } } # Development branch (optional) resource "aws_amplify_branch" "dev" { app_id = aws_amplify_app.filamenteka.id branch_name = "dev" enable_auto_build = true stage = "DEVELOPMENT" tags = { Name = "Filamenteka-dev" Environment = "development" } } # Custom domain (optional) resource "aws_amplify_domain_association" "filamenteka" { count = var.domain_name != "" ? 1 : 0 app_id = aws_amplify_app.filamenteka.id domain_name = var.domain_name wait_for_verification = false # Map main branch to root domain sub_domain { branch_name = aws_amplify_branch.main.branch_name prefix = "" } # Map main branch to www subdomain sub_domain { branch_name = aws_amplify_branch.main.branch_name prefix = "www" } # Map dev branch to dev subdomain sub_domain { branch_name = aws_amplify_branch.dev.branch_name prefix = "dev" } }