» Publishing Modules

If you've built a module that you intend to be reused, we recommend publishing the module on the Terraform Registry. This will version your module, generate documentation, and more.

Published modules can be easily consumed by Terraform, and users can constrain module versions for safe and predictable updates. The following example shows how a caller might use a module from the Terraform Registry:

module "consul" {
  source = "hashicorp/consul/aws"
}

If you do not wish to publish your modules in the public registry, you can instead use a private registry to get the same benefits.

» Distribution via other sources

Although the registry is the native mechanism for distributing re-usable modules, Terraform can also install modules from various other sources. The alternative sources do not support the first-class versioning mechanism, but some sources have their own mechanisms for selecting particular VCS commits, etc.

We recommend that modules distributed via other protocols still use the standard module structure so that it can be used in a similar way to a registry module, or even become a registry module at a later time.