Skip to main content

Terraform State Backend Plugin

The Terraform State Backend ingests Terraform state from GCS buckets and Terraform Cloud workspaces, creating hierarchical catalog entities in Backstage.

Overview​

PropertyValue
Package@internal/plugin-terraform-state-backend
TypeBackend (Catalog Provider)
Plugin IDterraform-state
IntegrationGCS, Terraform Cloud, Vault

Architecture​

Providers​

GCS State Provider​

Reads Terraform state from Google Cloud Storage.

import { catalogModuleTerraformStateGcsProvider } from "@internal/plugin-terraform-state-backend";

// Register in backend
backend.add(catalogModuleTerraformStateGcsProvider);

Features:

  • Multiple bucket support
  • State file discovery
  • Workspace detection

TFC State Provider​

Reads Terraform state from Terraform Cloud.

import { catalogModuleTerraformStateTfcProvider } from "@internal/plugin-terraform-state-backend";

// Register in backend
backend.add(catalogModuleTerraformStateTfcProvider);

Features:

  • Organization/workspace enumeration
  • State version retrieval
  • Vault token integration

State Processing​

Processing Pipeline​

Resource Filtering​

The ResourceFilter applies whitelists and mappings:

interface ResourceFilter {
whitelist: string[]; // Resource types to include
mappings: ResourceMapping[]; // Type to entity mappings
}

Default Whitelist (GCP):

  • google_project
  • google_compute_instance
  • google_storage_bucket
  • google_sql_database_instance
  • google_container_cluster
  • And more...

Hierarchy Builder​

Creates parent-child relationships:

Resource Graph Builder​

Builds resource dependency graph:

Generated Entities​

Entity Kinds​

Resource TypeEntity KindEntity Type
google_projectResourcegcp-project
google_compute_instanceResourcegcp-compute
google_storage_bucketResourcegcp-storage
google_sql_database_instanceResourcegcp-sql
google_container_clusterResourcegcp-gke

Entity Annotations​

apiVersion: backstage.io/v1alpha1
kind: Resource
metadata:
name: my-vm-instance
annotations:
terraform/resource-type: google_compute_instance
terraform/state-source: gs://my-bucket/terraform.tfstate
terraform/workspace: production
gcp/project: my-project-id
gcp/region: us-central1
gcp/console-link: https://console.cloud.google.com/compute/instances/...
spec:
type: gcp-compute
owner: platform-team
dependsOn:
- resource:default/my-vpc
- resource:default/my-service-account

The plugin generates GCP console links:

interface ConsoleLink {
resourceType: string;
urlTemplate: string;
}

// Example mappings
const consoleLinkMappings = {
google_compute_instance:
"https://console.cloud.google.com/compute/instancesDetail/zones/{zone}/instances/{name}?project={project}",
google_storage_bucket:
"https://console.cloud.google.com/storage/browser/{name}?project={project}",
google_container_cluster:
"https://console.cloud.google.com/kubernetes/clusters/details/{location}/{name}/details?project={project}",
};

Configuration​

# app-config.yaml
catalog:
providers:
terraformStateGcs:
buckets:
- name: my-terraform-state
prefix: environments/
- name: my-other-state

terraformStateTfc:
organizations:
- acme-corp
- staging-org

Services​

StateProcessingService​

Core service for state file processing.

interface StateProcessingService {
processState(state: TerraformState): ProcessedState;
extractResources(state: TerraformState): Resource[];
buildEntities(resources: Resource[]): Entity[];
}

VaultTokenService​

Retrieves TFC tokens from Vault.

interface VaultTokenService {
getToken(organization: string): Promise<string>;
}

Module Exports​

// Main exports
export {
catalogModuleTerraformStateTfcProvider,
catalogModuleTerraformStateGcsProvider,
TfcStateProvider,
GcsStateProvider,
StateProcessingService,
ResourceFilter,
HierarchyBuilder,
ResourceGraphBuilder,
VaultTokenService,
};