Anvil Builder
Writes Terraform from forms. Pick providers, add variables, choose resources from the provider's catalogue and fill in their fields. The result is saved as a package and deployed like any other.
01Steps
Six steps, in order, driven by the provider's own resource and field list. The step rail jumps back to any finished step. Project Preview shows the generated files at any point.
| Step | What you do | Writes |
|---|---|---|
| 1 Start | Import a package to edit in place or as a renamed copy, or start blank. | - |
| 2 Providers | Search the registry and load providers. Next needs at least one. | provider.tf |
| 3 Variables | Name and type for each variable. Default, description, allowed values and sensitive are optional. | variables.tf |
| 4 Resources | Resources build new things, data sources read existing ones. Fill in fields and link them. | main.tf |
| 5 Outputs | Optional output expressions. | outputs.tf |
| 6 Review & Save | Name it and save to Packages, or download a zip. | package |
02Loading providers
Search results from the public registry show tier (official, partner or community), a picker with the 40 newest versions, and an Exact schema box. A normal load reads the documentation index. It's quick and gets field names right, but types are guessed and marked ~. Exact schema downloads the provider and reads its real schema, which is slower. Loaded providers are remembered.
Loading hashicorp/azurerm
Starting docs load of hashicorp/azurerm 4.81.0... Fetching provider documentation index from registry.terraform.io Indexed 1137 resources and 400 data sources Documentation index cached. Field details load as you open each resource.
03Resources and fields
+ Add resource opens a type picker across all loaded providers. The editor starts with required fields only; + Add optional field adds the rest. π points a field at another resource's attribute or a variable instead of a literal.
Add resource (build something new)
azurerm_public_ipnetworkazurerm_public_ip_prefixnetworkazurerm_nat_gateway_public_ip_associationnetworkazurerm_nat_gateway_public_ip_prefix_associationnetworkazurerm_virtual_hub_public_ipnetworkazurerm_lb_backend_address_pool_public_ipload balancerReference something β resource_group_name
Pick a reference below to use it directly.
var.resource_group_namestringazurerm_resource_group.rg.namestringdata.azurerm_resource_group.shared.namestringresource azurerm_public_ip
Make several of these, ordering, and lifecycle
Fields β * is required
| Field type | Widget |
|---|---|
| bool | Checkbox |
| string, number | Text box with the default (or type) as placeholder. Password box if sensitive. |
| enum (from docs or schema) | Dropdown starting on -- select -- or -- default: X -- |
| list(β¦), set(β¦), tuple(β¦) | Nested list with + Add entry |
| map(β¦), object(β¦) | Nested keys with + Add key |
| nested block | Card with the block name, nesting mode (list, set or single) and + Add <name> |
Orange * is required; amber ~ is a type inferred from docs. i shows the field description, π opens the reference picker, Γ removes an optional field. Edit as text swaps the block to an HCL editor, and switching back reparses it into the form.
04Saving
- Save to Packages creates a new package, or updates the imported one in place when Import as a copy was off.
- Download .zip saves nothing in Anvil.
- To edit a package later, use Open in Builder on Packages.
- Reset and Start over discard the current work after a confirm.
- Unsaved Builder work is lost if Anvil restarts.