Creating and managing all available resources offered by major cloud providers exclusively in free-tier plans. Using Terraform to create and manage all the resources in a simplified and centralized manner.
Every major cloud provider offers a free tier that allows for some kind of resource free of charge, still, learning every cloud and managing these resources can prove burdensome to most.
The goal is to automate the management of these resources using Terraform as the centralizing tool. It also aims to provide resources for learning and improve your skills as a SRE/DevOps Engineer and as a Terraform user, even if you're developer that never touched cloud infrastructure, nowadays there's great value in learning these tools.
A CLI tool is part of this project for those who wish a more KIS-like approach.
Google Cloud Platform
- 1x Virtual Private Cloud (VPC)
- 1x Firewall attached to the VPC
- 1x Google Compute Engine
f1-micro
(1 shared vCPU - 0.2 dedicatd vCPU - and 0.6GB of Memory) attached to theVPC
- 1x 5GB of regional storage on Cloud Storage
- 1x 1GB of storage in a Firestore NoSQL Database
More information at the provider's documentation page.
Amazon Web Services
- 2x Virtual Private Cloud (VPC)
- 2x Sub-network attached to the VPC
- 2x Internet Gateway (IGW) to provide access to the VPC
- 1x Route Table integrating all
VPC
,Subnet
and theInternet Gateway (IGW)
- 1x EC2 Instance attached to the
Subnet
- 1x Relational Database (RDS) of your choice (e.g. MySQL, PostgreSQL)
- 1x S3 Storage Bucket inside
Subnet
, configured to store the Terraform's backend state - 1x DynamoDB Database, mainly used for preventing that running multiple instances of this Terraform chart corrupt each other.
More information at the provider's documentation page.
Microsoft Azure (has limited testing)
- 1x Linux Virtual machine, B1S Standard tier
- 1x Windows Virtual machine, B1S Standard tier
- 1x Cloud Storage (LRS File Storage)
- 1x 250GB MySQL Managed Database Instance
More information at the provider's documentation page.
Oracle Cloud (not available)
- 2x AMD based VM, 1/8 shared CPU and 1GB RAM
- 2x Oracle NoSQL Database with 20GB
- 1x 10GB Object Storage Capacity
More information at the provider's documentation page.
terraform init
terraform apply -auto-approve
If you preffer a help utility before using this tool, you must have Task installed, to run the project's Taskfile:
# Installing Task (requires sudo)
sudo sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin
# List all available commands
task --list # or task help
Module documentation
Name | Source | Version |
---|---|---|
aws | ./modules/aws | |
azure | ./modules/azure | |
google_cloud | ./modules/gcp | |
terraform_state_backend | cloudposse/tfstate-backend/aws | 0.33.1 |
Name | Description | Type | Default |
---|---|---|---|
aws_default_region | Your default region for AWS resources creation. Available regions for Google Compute on Free Tier. | string |
"us-east-1" |
backend_destroy | Allows destroying all resourcesinside the configured S3 Remote Backend. See more at tf-free's Backend Documentation | string |
"false" |
backend_stage | Stages possible for Backend. Set for a random string. | string |
"test" |
ec2_aws | Allow for the creation of EC2 instances on AWS. | bool |
true |
gcp_instance_name | Your VM instance name. Naming resources convention | string |
"gcp-machine" |
gcp_project_id | Your static IP network nameP. Naming resources convention | string |
"test" |
gcp_project_region | Zone location of your instance, see the list of available regions - Terraform provider documentation | string |
"us-west1" |
gcp_storage_permissions | See all available values for the parameter at Predefined ACL's on GCS Permissions | string |
"publicread" |
prevents_destroy | Prevents destroying the previously provisioned S3 Remote Backend. See more at tf-free's Backend Documentation | bool |
true |
rds_aws | Allow for the creation of a PostgreSQL database on AWS | bool |
true |
Name | Description |
---|---|
aws_ec2_ipv6_addresses | AWS EC2 IPv6 Public Address |
aws_ec2_password_data | List of Base-64 encoded encrypted password data for AWS EC2 instances |
aws_ec2_private_ip | AWS EC2 assigned Private IP |
aws_ec2_public_ip | AWS EC2 IPv4 Public Address |
db_backend_name | Name of the resulting DynamoDB created for locking state files. |
gcp_public_ip | GCP VM Compute IPv4 Public Address |
s3_backend_bucket | ID of the resulting S3 bucket created on AWS as part of the backend infrastructure |
s3_backend_domain | Domain name of the S3 bucket created on AWS as part of the backend infrastructure |
The MIT license grant is not for Hashicorp's trademarks, which include the logo designs. Hashicorp reserves all trademark and copyright rights in and to all Hashicorp trademarks.
This repository is not associated with any of the cloud providers or Hashicorp. Terraform®, Vault®, Hashicorp's logos and names are Hasicorp's registered Trademarks. When using Hashicorp's logos, be sure to follow their community and brand usage guidelines. Be sure to read the terms of usage to understand the responsabilities involved.