terraform/website/docs/language/modules/develop/publish.html.md

43 lines
1.6 KiB
Markdown

---
layout: "language"
page_title: "Publishing Modules"
sidebar_current: "docs-modules-publish"
description: |-
A module is a container for multiple resources that are used together.
---
# Publishing Modules
If you've built a module that you intend to be reused, we recommend
[publishing the module](/docs/registry/modules/publish.html) on the
[Terraform Registry](https://registry.terraform.io). This will version
your module, generate documentation, and more.
Published modules can be easily consumed by Terraform, and users can
[constrain module versions](/docs/language/modules/syntax.html#version)
for safe and predictable updates. The following example shows how a caller
might use a module from the Terraform Registry:
```hcl
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](/docs/registry/private.html) 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](/docs/language/modules/sources.html). 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](/docs/language/modules/develop/structure.html) so that they can
be used in a similar way as a registry module or be published on the registry
at a later time.