Modules are containers for multiple resources that are used together. A module
consists of a collection of
.tf.json files kept together in a
Modules are the main way to package and reuse resource configurations with OpenTofu.
The Root Module
Every OpenTofu configuration has at least one module, known as its
root module, which consists of the resources defined in the
.tf files in
the main working directory.
An OpenTofu module (usually the root module of a configuration) can call other modules to include their resources into the configuration. A module that has been called by another module is often referred to as a child module.
Child modules can be called multiple times within the same configuration, and multiple configurations can use the same child module.
In addition to modules from the local filesystem, OpenTofu can load modules from a public or private registry. This makes it possible to publish modules for others to use, and to use modules that others have published.
The Public Terraform Registry hosts a broad collection of publicly available OpenTofu modules for configuring many kinds of common infrastructure. These modules are free to use, and OpenTofu can download them automatically if you specify the appropriate source and version in a module call block.
Also, members of your organization might produce modules specifically crafted for your own infrastructure needs. TACOS (TF Automation and Collaboration Software) include a private module registry for sharing modules internally within your organization.
Module Blocks documents the syntax for calling a child module from a parent module, including meta-arguments like
Module Sources documents what kinds of paths, addresses, and URIs can be used in the
sourceargument of a module block.
For information about developing reusable modules, see Module Development.