Production-ready Infrastructure as Code (IaC) blueprint using Terraform to provision an Amazon Redshift Cloud Data Warehouse. This module automatically deploys an isolated Virtual Private Cloud (VPC), multi-AZ Redshift subnet groups, dedicated security groups, IAM roles for S3 data lake access, and a fully configured Redshift cluster.
flowchart TD
Analytics["BI & SQL Clients (psql / DBeaver / Metabase)"] -->|TCP:5439| SG["Redshift Security Group"]
subgraph VPC ["AWS Virtual Private Cloud (10.0.0.0/16)"]
IGW["Internet Gateway"]
subgraph SubnetGroup ["Redshift Subnet Group"]
SubnetA["Subnet 1 (us-east-1a) 10.0.1.0/24"]
SubnetB["Subnet 2 (us-east-1b) 10.0.2.0/24"]
end
subgraph RedshiftCluster ["Amazon Redshift Cluster"]
Node["Redshift Node (dc2.large / ra3.4xlarge)"]
DB[("OLAP Database: analytics_dw")]
end
SG --> RedshiftCluster
SubnetA --> RedshiftCluster
SubnetB --> RedshiftCluster
end
RedshiftCluster -.->|AssumeRole| IAM["IAM Role: redshift_role"]
IAM -.->|S3 Copy / Unload| S3[("Amazon S3 Data Lake")]
- Turnkey IaC Deployment: Single-command Terraform provisioning of all supporting networking and IAM assets.
- Multi-AZ Subnet Isolation: Redshift Subnet Group spanned across two Availability Zones for enhanced reliability.
- S3 Data Lake Integration: Pre-configured IAM role granting Amazon Redshift permissions to execute fast parallel
COPYandUNLOADcommands with Amazon S3. - Zero Secrets Hardcoding: Parameterized variables with strict
.gitignorerules preventing.tfstateor sensitive.tfvarsfrom being committed.
| Variable | Description | Example Value |
|---|---|---|
aws_region |
Target AWS deployment region | us-east-1 |
profile |
AWS CLI authentication profile name | default |
vpc_cidr |
IPv4 CIDR block for the Redshift VPC | 10.0.0.0/16 |
redshift_subnet_cidr_first |
First AZ subnet CIDR | 10.0.1.0/24 |
redshift_subnet_cidr_second |
Second AZ subnet CIDR | 10.0.2.0/24 |
rs_cluster_identifier |
Unique cluster identifier | redshift-cluster-demo |
rs_database_name |
Initial database name | analytics_dw |
rs_master_username |
Cluster administrator username | admin_user |
rs_master_pass |
Cluster administrator master password | StrongSecret123! |
rs_nodetype |
Redshift node compute type | dc2.large |
rs_cluster_type |
Cluster architecture (single-node or multi-node) |
single-node |
- Terraform CLI (>= 1.0.0)
- AWS CLI configured (
aws configure)
git clone https://github.com/codewithmuh/redshift.git
cd redshift
# Create your custom variable file from the template
cp terraform.tfvars.example terraform.tfvarsUpdate terraform.tfvars with your desired database credentials and cluster specifications.
# Initialize Terraform
terraform init
# Validate configuration syntax
terraform validate
# Review execution plan
terraform plan
# Deploy Redshift cluster
terraform applyOnce provisioned, connect using psql, Python, or your preferred SQL IDE:
psql -h <CLUSTER_ENDPOINT> -p 5439 -U admin_user -d analytics_dwimport psycopg2
conn = psycopg2.connect(
dbname="analytics_dw",
user="admin_user",
password="YourStrongMasterPassword123!",
host="your-cluster.xxx.us-east-1.redshift.amazonaws.com",
port=5439
)terraform destroy- Creator: Code With Muh
- Website: codewithmuh.com
- YouTube Channel: @codewithmuh
This project is open-source under the MIT License.