Reusing Terraform code

Reference external public Terraform modules from within Facets modules to reuse common logic like naming and provisioning, plus the Facets Utility Modules.

When common Terraform logic recurs across modules, naming conventions or standardized resource provisioning, abstract it into an external Terraform module and reference it from your Facets modules. That keeps the logic consistent and reusable.

Referencing an external module

Create a standalone Terraform module for the reusable logic and host it in any Terraform-compatible registry or version-controlled repository (GitHub, GitLab, Bitbucket). Reference it from your Facets module with the source attribute:

module "s3_bucket" {
  source  = "git::https://github.com/your-org/terraform-aws-s3-bucket.git"
  version = "1.0.0"
  # Additional module inputs
}

Here the s3_bucket module is sourced from a public GitHub repository.

Private modules

Facets references public Terraform modules directly. Private modules need extra configuration, so contact Facets support to enable it. For how Terraform resolves module sources, see the Terraform module sources documentation.

Facets Utility Modules

The Facets Utility Modules repository is a collection of reusable Terraform modules that work seamlessly with Facets, encapsulating common patterns and best practices for consistent provisioning.