Create and use Terraform modules to organize your configuration. Host a static website in AWS using two modules: one from the Terraform Registry and one you will build yourself. Organize configuration using directories and workspaces.
Read about how Terraform modules make configuration easier to organize, understand, reuse, and share. Learn about the directory structure of a module, and how to call them.
Use Modules from the Registry
Use modules from the public Terraform Registry to define an Amazon VPC containing two EC2 instances. Select module and root input and output variables, install the modules, and apply the configuration.
Build and Use a Local Module
Write a local module to create an Amazon S3 bucket hosting a static website. Create a module directory, write the module configuration, variables, and outputs, and call the module from a root configuration.
Customize Modules with Object Attributes
Refactor a local module to organize related attributes with objects and make some attributes optional for module users.
Share Modules in the Private Registry
Import modules to share securely in Terraform Cloud's free private registry. Fork an example module, tag a version-controlled release, deploy the module into the registry, and use it in a configuration.
Add Public Providers and Modules to your Private Registry
Curate modules and providers in your private registry. Track approved modules and providers for your organization's use.
Refactor Monolithic Terraform Configuration
Deploy development and production versions of an S3-hosted static website. Separate their configuration into files, directories, and workspaces, and explore the architectural trade-offs of each approach.
Module Creation - Recommended Pattern
Learn the architectural recommendations for module creation distilled from engagements with large enterprises using Terraform. Use Terraform module best practices to scope, build, improve and consume Terraform modules.
Use Configuration to Move Resources
Use the configuration-driven workflow to change Terraform resource IDs. Refactor configuration to move resources into modules using the `moved` block.