> ## Documentation Index
> Fetch the complete documentation index at: https://tfts.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Terraform Modules

> Use existing HCL modules within your TypeScript configuration.

tfts allows you to consume existing Terraform modules (HCL) using the `TerraformHclModule` class. This enables you to leverage the vast ecosystem of community-maintained modules while still writing your infrastructure in TypeScript.

## Using a Module

To use a module, you provide its source, version, and any required variables.

```typescript theme={null}
import { TerraformHclModule } from "tfts";

const vpc = new TerraformHclModule(stack, "vpc", {
  source: "terraform-aws-modules/vpc/aws",
  version: "5.0.0",
  variables: {
    name: "my-vpc",
    cidr: "10.0.0.0/16",
    azs: ["us-east-1a", "us-east-1b"],
    public_subnets: ["10.0.1.0/24", "10.0.2.0/24"],
  },
});
```

## Managing Variables and Providers

You can set variables after initialization using the `set` method:

```typescript theme={null}
vpc.set("enable_nat_gateway", true);
```

If the module requires specific providers, you can pass them in the configuration:

```typescript theme={null}
const vpc = new TerraformHclModule(stack, "vpc", {
  source: "terraform-aws-modules/vpc/aws",
  providers: [awsProvider],
  variables: { /* ... */ },
});
```

## Accessing Outputs

Modules often expose outputs that you need to use in other parts of your configuration. `TerraformHclModule` provides typed methods to access these outputs.

```typescript theme={null}
const vpcId = vpc.get("vpc_id");
const publicSubnets = vpc.getList("public_subnets");
const vpcCidr = vpc.getString("vpc_cidr_block");
```

Available methods:

* `get(outputName)`: Returns a generic token.
* `getString(outputName)`: Returns a string token.
* `getNumber(outputName)`: Returns a number token.
* `getBoolean(outputName)`: Returns a boolean token.
* `getList(outputName)`: Returns a list token.

## Example: VPC and EC2

```typescript theme={null}
const vpc = new TerraformHclModule(stack, "vpc", {
  source: "terraform-aws-modules/vpc/aws",
  version: "5.0.0",
  variables: {
    name: "my-vpc",
    cidr: "10.0.0.0/16",
    // ...
  },
});

new Instance(stack, "web", {
  ami: "ami-123456",
  instanceType: "t2.micro",
  subnetId: vpc.getList("public_subnets")[0],
});
```

Using `TerraformHclModule` is the fastest way to integrate complex, pre-built infrastructure components into your tfts project.
