Terraform module to deploy Hausra graphql engine on AWS. This will deploy across multiple Availability Zones (AZ) with the following components:
- Postgres RDS deployed in multiple AZ
- Hasura graphql engine in Fargate across multiple AZ
- ALB for load balancing between the hasura tasks
- Certificate issued by ACM for securing traffic to ALB
- Logging for RDS, ECS, and ALB into Cloudwatch Logs
The master branch supports Terraform v0.12 and later. For Terraform v0.11 and older versions check other git branches.
- AZ: Availability Zone
- ALB: Application Load Balancer
- ACM: AWS Certificate Manager
- ECS: Elastic Container Service
- RDS: Relational Database Service
- AWS account
- IAM user
- domain with Route53
- Terraform v0.12
Copy and paste into your Terraform configuration, edit the variables, and run terraform init
module "hasura" {
source = "Rayraegah/hasura/aws"
version = "2.0.0"
region = "YOUR DEPLOYMENT REGION"
domain = "YOUR DOMAIN NAME"
app_subdomain = "YOUR HASURA APP SUBDOMAIN"
hasura_version_tag = "HASURA VERSION TAG FOR DEPLOYMENT"
hasura_access_key = "YOUR HASURA ADMIN ACCESS KEY"
hasura_jwt_secret_algo = "ALGORITHM FOR JWT VERIFICATION (HMAC or RS256)"
hasura_jwt_secret_key = "YOUR PUBLIC KEY FOR JWT VERIFICATION"
rds_db_name = "YOUR DATABASE NAME"
rds_instance = "YOUR DATABASE INSTANCE SIZE"
rds_username = "YOUR DATABASE USERNAME"
rds_password = "YOUR DATABASE PASSWORD"
multi_az = "ENABLE MULTIPLE AVAILABILITY ZONES"
az_count = "NUMBER OF AVAILABILITY ZONES"
vpc_enable_dns_hostnames = "ENABLE DNS HOSTNAMES"
environment = "ENV VARS FOR ECS TASK"
}
Released under MIT License. Based on Gordon Johnston's proposed architecture.