Awesome Terraform ¶
Terraform enables you to safely and predictably create, change, and improve production infrastructure. It is an open source tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.
- Introduction to Terraform
- Terraform Documentation
- Hashicorp Terraform Blog
- Terraform learn
- Terraform GitHub Actions
- Terraform Google Group
- Terraform Gitter
- Terraform Bug Tracker
- Terraform Community Modules
- Terraform Module Registry
- Terraform PDF Doc
- Complete Terraform documentation as PDF files (Updated nightly)
- Terraform Best Practices - open-source ebook
- Terraform: Up & Running
- The Terraform Book
- Getting Started with Terraform, 2nd ed.
- Infrastructure as Code
- Terraform in Action
Tutorials and Blog Posts¶
- A Comprehensive Guide to Terraform - Series of blog posts from the author of "Terraform: Up & Running" that guide the reader from beginning with Terraform to using it in the real world.
- Using Terraform for Cloud Deployments - Part 1 - Provisioning an EC2 instance.
Writing Custom Providers¶
- Creating custom terraform providers - Guide for creating custom providers.
- Writing Custom Providers - Official documentation for creating custom providers.
- Writing a Terraform provider - Guide for creating custom providers.
- Deploying Discourse with Terraform - Shows how Terraform can create a running instance of Discourse on DigitalOcean in one command.
- Easily Deploy A Seneca Microservice to ECS with Wercker and Terraform: Part I, II & III - Illustrates how Terraform can be incorporated into a microservice deployment pipeline.
- Terraforming 1Password - How 1Password migrated from CloudFormation to Terraform.
- Tutorial: How to Use Terraform to Deploy OpenStack Workloads - Illustrates how easy it is to use the OpenStack Terraform provider to deploy a web server.
- Zero Downtime Updates with HashiCorp Terraform - Ensuring zero downtime of your infrastructure.
- Terraform Design Patterns: the Terrafile - Managing Terraform modules and their versions within Terraform projects with Terrafile.
- Terraform, VPC, and why you want a tfstate file per env - Some gotchas surrounding using Terraform in large projects with multiple environments and how to avoid them.
- Using Pipelines to Manage Environments with Infrastructure as Code - Explains different approaches for building a pipeline to handle infrastructure changes moving from one environment to the next.
- Learning HashiCorp Terraform - Guide for Azure.
- New Terraform Azure Automation Resources - Azure Automation.
- Terraforming Azure PaaS - Deploy PaaS Resources on Azure.
- Sharing data between Terraform configurations - Illustrates how to use remote state to share data between Terraform configurations.
- The Segment AWS Stack - Shows the behind the scenes of the infrastructure powered by Terraform that solved The Million Dollar Engineering Problem at Segment.
- Top 3 Terraform Testing Strategies for Ultra-Reliable Infrastructure-as-Code
- Two Weeks with Terraform - Some hard-earned experience from using Terraform in the wild, and some operational wisdom.
- Terraform: Beyond the Basics with AWS - Explanation of a demo using Terraform to provision a sample AWS architecture.
For more Community Modules not listed here please see the Terraform Module Registry.
- rancher-terraform-digitalocean - Rancher server on digitalocean.
- segmentio/stack - Configures production infrastructure with AWS, Docker, and ECS.
- terraform-aws-alb - Created Application load-balancer on AWS (verified module).
- terraform-aws-atlantis - Creates Terraform configurations for running Atlantis on AWS Fargate. Github, Gitlab and BitBucket are supported.
- terraform-aws-autoscaling - Creates Auto-Scaling Groups and Launch Configurations (verified module).
- terraform-aws-ecr - Manages Docker container registries on AWS ECR.
- terraform-aws-efs - Defines an EFS Filesystem.
- terraform-aws-eks - Creates Elastic Kubernetes Service on AWS (very popular module).
- terraform-aws-elb - Created Elastic load-balancer on AWS (verified module).
- terraform-aws-jenkins - Build a Docker image with Jenkins, saves it to an ECR repo, and deploys it to Elastic Beanstalk running a Docker stack.
- terraform-aws-key-pair - Automatically Generate SSH Key Pairs (Public/Private Keys).
- terraform-aws-modules - Collection of Terraform AWS modules supported by the community (includes official AWS modules).
- terraform-aws-postgresql-rds - Creates PostgreSQL on RDS.
- terraform-aws-rds - Creates RDS resources on AWS (verified module).
- terraform-aws-secure-baseline - Set up your AWS account with the secure baseline configuration based on CIS Amazon Web Services Foundations.
- terraform-aws-security-group - Creates EC2-VPC security groups on AWS (verified module).
- terraform-aws-ssh-bastion-service - Terraform plan to deploy ssh bastion as a stateless service on AWS.
- terraform-aws-vpc - Creates VPC resources on AWS (verified and very popular module).
- terraform-azurerm-aks - Create AKS resources on Azure.
- terraform-azurerm-iis - Install IIS Server on Azure VM instance.
- terraform-azurerm-mysql - Create MySql Database on Azure.
- terraform-azurerm-redis - Create Redis on Azure.
- terraform-azurerm-sqlserver - Create SQl Server Database on Azure.
- terraform-digitalocean-droplet - Terraform module for managing DigitalOcean Droplets and related resources.
- terraform-ecs-jenkins - Provisions Jenkins on AWS ECS using Terraform.
- terraform-google-project-factory - Opinionated Google Cloud Platform project creation and configuration with Shared VPC, IAM, APIs, etc.
- terraform-linode-k8s - Installs Kubernetes on Linode Instances.
- terraform-static-website-s3-cloudfront - Creates static websites on AWS S3 & Cloudfront based on variables.
- tf_aws_availability_zones_cfn - Gets availability zones for your AWS region/account from Cloudformation.
- tf_aws_bastion_s3_keys - Creates bastion hosts on AWS EC2.
- tf_aws_coreos_ami - Easy way to lookup CoreOS AMIs with terraform.
- tf_aws_nat - NAT instances for AWS.
Private Module Registries¶
- anthology - Private Terraform registry implementation as an alternative to the official registry.
- citizen - Private Terraform Module Registry
- terraform-simple-registry - Simple implementation of the Terraform registry protocols.
- terraform-provider-alicloud - Plugin for Alibaba Cloud.
- terraform-provider-aws - Plugin for Amazon Web Services.
- terraform-provider-azurerm - Plugin for Microsoft Azure.
- terraform-provider-datadog - Plugin for Datadog.
- terraform-provider-digitalocean - Plugin for DigitalOcean.
- terraform-provider-docker - Plugin for Docker.
- terraform-provider-github - Plugin for GitHub.
- terraform-provider-gitlab - Plugin for GitLab.
- terraform-provider-google - Plugin for Google Cloud Platform.
- terraform-provider-hcloud - Plugin for Hetzner Cloud.
- terraform-provider-healthchecksio - Provider to manage healthchecks.io resources.
- terraform-provider-helm - Plugin for Helm.
- terraform-provider-keycloak - Provider to manage the settings of your Keycloak identity provider server.
- terraform-provider-kubernetes - Plugin for Kubernetes.
- terraform-provider-linode - Plugin for Linode.
- terraform-provider-openstack - Plugin for OpenStack.
- terraform-provider-pingdom - Provider to manage Pingdom resources.
- terraform-provider-spinnaker - Manage Spinnaker applications and pipelines with Terraform.
- terraform-provider-spotinst - Devops automation platform for AWS, Azure, GCP.
- terraform-provider-stripe - Provider for Stripe.
- terraform-provider-uptimerobot - Provider to manage uptimerobot resources.
- terraform-provider-vaulted - Encrypted HashiCorp Vault secrets via Terraform that can be stored in SCM such as Git.
- terraform-provider-vsphere - Plugin for VMware vSphere.
- terraform-provider-dominos - Provider for Dominos Pizza.
- terraform-provider-azuredevops - Provider for Azure DevOps (VSTS).
- terraform-provider-snowfake - Provider for Snowflake data warehouse
- kitchen-terraform - Provides a set of Test Kitchen plugins which enable a system to use Test Kitchen to converge a Terraform configuration and verify the resulting Terraform state with InSpec controls.
- rspec-terraform - RSpec tests for your Terraform modules.
- terraform-compliance - BDD Testing for Terraform Files.
- terraform_validate - Assists in the enforcement of user-defined standards in Terraform.
- terratest - Terratest is a Go library that makes it easier to write automated tests for your infrastructure code.
- astro - Astro is a tool for managing multiple Terraform executions as a single command.
- atlantis - Unified workflow for collaborating on Terraform through GitHub.
- blast radius - Interactive visualizations of Terraform dependency graphs.
- fogg - A tool for eliminating toil in managing terraform repositories.
- geopoiesis - Specialized continuous integration and deployment tool for modern declarative infrastructure provisioning and management.
- iam-policy-json-to-terraform - Small tool to convert an IAM Policy in JSON format into a Terraform aws_iam_policy_document
- k2tf - Kubernetes YAML to Terraform HCL converter.
- json2hcl - Convert JSON to HCL and vice versa.
- modules.tf - Infrastructure as code generator - from visual diagrams created with Cloudcraft.co to Terraform. Source code.
- para - The missing 3rd-party plugin manager and a "swiss army knife" for Terraform/Terragrunt - just 1 tool to facilitate all workflows.
- pre-commit-terraform - pre-commit git hooks to take care of Terraform configurations (auto-format, validate, update docs).
- pretf - drop-in Terraform wrapper that generates Terraform configuration with Python. See pretf documentation
- python-terrafile - Systematically manage external modules from Github for use in Terraform.
- prettyplan - Prettyplan (available online here) is a small tool to help you view large Terraform plans with ease.
- ruby-terraform - Simple Ruby wrapper for invoking terraform commands.
- scenery - Another Terraform plan output prettifier.
- scratchrelaxtv - Simple Python tool to help with module development - extract vars from
variables.tfand make module usage stub from
- tads-boilerplate - The power of Ansible and Terraform + the simplicity of Docker Swarm = Infrastructure as Code and DevOps best practices.
- tau - Tau is a thin wrapper on top of terraform to manage multiple deployments, dependencies and secrets.
- terraboard - Web dashboard to inspect Terraform States.
- terraboot - DSL to generate a terraform configuration and run it.
- terrafile - Systematically manage external modules from Github for use in Terraform (written in Go).
- terrafile - Systematically manage external modules from Github for use in Terraform (written in Ruby).
- terraform-bundle - Easily builds bundles containing a Terraform binary as well as provider binaries. Useful for CI and air-gapped Terraform Enterprise.
- terraform-docs - Quick utility to generate docs from terraform modules.
- terraform-landscape - Improve Terraform's plan output to be easier to read and understand.
terraform planand converting it to JSON.
- terraform-provisioner - Tool for managing multiple provisions of the same Terraform scripts.
- terraform-rake-tasks - Shared Rake tasks for managing terraform plans.
- terraform.py - Ansible dynamic inventory script for parsing Terraform state files.
- terraformer - CLI tool to generate terraform files from existing infrastructure. Infrastructure to Code. Supported few providers.
- terraforming - Export existing AWS resources to Terraform style (tf, tfstate). Similar to
- terragrunt - Terragrunt is a thin wrapper for Terraform that supports locking for Terraform state and enforces best practices.
- terrahelp - Command line utility aimed at providing supplementary functionality which can sometimes prove useful when working with Terraform.
- terrahub - TerraHub is terraform automation and orchestration tool. Seamlessly integrated into console.terrahub.io, enterprise friendly GUI to show realtime terraform executions, as well as auditing and reporting capabilities for historical terraform runs.
- terrascan - Collection of security and best practice test for static code analysis of terraform templates
- Checkov - Terraform static analysis tool for terraform>=0.12
- tfenv - Terraform version manager inspired by rbenv.
- tfjson - Utility to read in a Terraform plan file and dump it out in JSON.
- tflint - Terraform linter for detecting errors that can not be detected by
- tfmask - Terraform utility to mask select output from
- tfscaffold - Framework for controlling multi-environment multi-component terraform-managed AWS infrastructure.
- tfschema - Schema inspector for Terraform providers.
- tfupdate - Update version constraints in your Terraform configurations.
- tfwrapper - Rubygem providing rake tasks for running Hashicorp Terraform sanely.
- tgf - Terragrunt frontend for executing Terragrunt/Terraform through Docker.
- xterrafile Systematically manage external modules from the module registry, git or local directories for use in Terraform (written in Go).
- terraform-enterprise-cli - Terraform Enterprise Command Line Interface.
- terraform-enterprise-client - Terraform Enterprise API Ruby Client and Command Line tool.
- terraform-enterprise-migrator - Script for migrating Terraform Enterprise environments from Legacy to new version of Terraform Enterprise.
- tfe-state-explorer - Simple shell for exploring remote terraform enterprise state, with autocomplete.
- Building Scalable, Repeatable Infrastructure in the Cloud with Terraform - Demonstrates how Terraform enables the practice of Infrastructure as Code by deploying TeamCity in AWS using a hosted PostgreSQL.
- Creating a Google Compute Instance with Terraform - Example of creating a Google Compute Instance with Terraform code.
- Creating a Terraform Provider for Just About Anything - Learn how to contribute to a Terraform provider or create your own from this walkthrough.
- Evolving Your Infrastructure with Terraform - CTO of OpenCredo provides an extensive look at using Terraform in the real-world with the help of some interesting use-cases.
- Going Multi-Cloud with Terraform and Nomad.
- How to Build Reusable, Composable, Battle tested Terraform Modules - Yevgeniy Brikman talks about how to write Terraform code so that it is reusable, composable and testable. The presentation focuses on Terraform modules, but also provides a brief and clear explanation of what problem Terraform was created to solve and a short demo of Terraform basics (~39 min, October 2017).
- How to Extend the Terraform Provider List - In this talk, Paul will walk through the creation of a terraform provider.
- Orchestrating Containers with Terraform and Consul - Mitchell Hashimoto shows how Terraform can be used to deploy and scale containerized workloads.
- Production ChaosMonkey with Terraform - How DigitalOcean uses Terraform to run production integration tests.
- Running a Terraform Environment at Scale - Running Terraform at scale with hundreds of AWS accounts.
- Setup Continuous Integration for a Terraform module - Example of using CI with Kitchen-Terraform to test, tag and publish our Terraform module which creates a Google Compute Instance.
- State of Terraform Providerland - How Terraform providers work and how to write one.
- Terraform At Scale - How Segment uses Terraform.
- Terraform w/ Lee Trout - Focuses on development patterns and how to effectively structure Terraform code.
- Terraforming the Composable World - Integrating Terraform with an on-premise bare metal provisioning.
- Test and verify a Google Compute Instance with Kitchen-Terraform - Example of using Kitchen-Terraform to test our Terraform code that created a Google Compute.
- Untangling Terraform Through Refactoring - How to refactor your Terraform code in a careful way with minimum risk.
- Using Terraform for blue-green deployments on Triton - Video of demo on using Blue green with Terraform.
- Webinar: Multi-Cloud, One Command with Terraform - Provisioning hybrid cloud infrastructure using Terraform.
- Atom terraform-lookup
- Emacs terraform-mode
- Terraform-lsp (Language Server Protocol for Terraform)
- VS Code
To the extent possible under law, Shuaib Yunus has waived all copyright and related or neighboring rights to this work.