A collection of Terraform modules demonstrating various AWS infrastructure patterns and best practices.
This repository contains example Terraform configurations for provisioning different AWS resources. Each directory contains a standalone module that can be used as a reference for implementing specific AWS infrastructure patterns.
- Path:
auto-scaling-group/
- Description: Demonstrates how to create an Auto Scaling Group with launch templates and scaling policies.
- Path:
ec2/
- Description: Basic EC2 instance provisioning with security groups and SSH key management.
- Path:
ec2-ebs/
- Description: Provisions an EC2 instance with an additional EBS volume, including Ansible integration for automated volume mounting.
- Features:
- Attaches and mounts a 20GB EBS volume to
/data
- Includes automated formatting and mounting via Ansible playbooks
- Configures logging for deployment processes
- Uses SSM for secure instance management
- Attaches and mounts a 20GB EBS volume to
- Path:
eks-fargate/
- Description: Sets up an Amazon EKS cluster using Fargate profiles for serverless container deployment.
- Features:
- Serverless Kubernetes cluster without managing EC2 instances
- Custom VPC configuration with private and public subnets
- Includes example Nginx deployment
- Path:
eks-fargate-lb/
- Description: Extends the basic EKS Fargate setup with an Application Load Balancer for external access.
- Features:
- Application Load Balancer with security groups
- Target group configuration for Nginx service
- Public endpoint for accessing containerized applications
- Health check configuration
- Path:
elasticsearch-multi-az/
- Description: Deploys an Elasticsearch cluster across multiple availability zones for high availability.
- Path:
elasticsearch-single-az/
- Description: Sets up a single-AZ Elasticsearch deployment with security groups and SSM integration.
This project uses devbox to create a consistent development environment with all necessary tools.
- Install devbox: https://www.jetpack.io/devbox/docs/installing_devbox/
The devbox environment includes:
- OpenTofu (Terraform compatible)
- kubectl
- Helm
- k9s
-
Initialize the devbox environment:
devbox shell
-
This will automatically install all required tools and dependencies
-
Verify installations:
tofu --version kubectl version --client helm version k9s version
- AWS CLI configured with appropriate credentials
- Terraform/OpenTofu v0.19+ installed
- Basic understanding of AWS services and Terraform
Each module is independent and can be used separately. To use a specific module:
- Navigate to the module directory
- Initialize the Terraform configuration:
tofu init
- Review and modify the configuration as needed
- Apply the Terraform configuration:
tofu apply
Each module typically includes:
main.tf
- Main Terraform configurationvariables.tf
- Input variablesoutputs.tf
- Output valuesdata.tf
ordata-source.tf
- Data sources- Specific resource configurations (e.g.,
ec2-sg.tf
,elasticsearch.tf
) README.md
- Module-specific documentation
- Resource organization and module structure
- Security group configuration
- IAM role management
- Data encryption
- High availability patterns
- Infrastructure automation
This project is provided for educational and reference purposes. Review and customize the configurations before using in production environments.