[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-hashicorp-terraform-stacks":3,"mdc-8qiyzq-key":37,"related-org-hashicorp-terraform-stacks":3226,"related-repo-hashicorp-terraform-stacks":3381},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":32,"sourceUrl":35,"mdContent":36},"terraform-stacks","build and manage Terraform Stacks","Comprehensive guide for working with HashiCorp Terraform Stacks. Use when creating, modifying, or validating Terraform Stack configurations (.tfcomponent.hcl, .tfdeploy.hcl files), working with stack components and deployments from local modules, public registry, or private registry sources, managing multi-region or multi-environment infrastructure, or troubleshooting Terraform Stacks syntax and structure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"hashicorp","HashiCorp","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fhashicorp.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Architecture","architecture","tag",{"name":17,"slug":18,"type":15},"Deployment","deployment",{"name":20,"slug":21,"type":15},"Terraform","terraform",{"name":23,"slug":24,"type":15},"Infrastructure as Code","infrastructure-as-code",728,"https:\u002F\u002Fgithub.com\u002Fhashicorp\u002Fagent-skills","2026-04-06T18:25:22.214413",null,104,[31],"doormat-managed",{"repoUrl":26,"stars":25,"forks":29,"topics":33,"description":34},[31],"A collection of Agent skills and Claude Code plugins for HashiCorp products.","https:\u002F\u002Fgithub.com\u002Fhashicorp\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fterraform\u002Fmodule-generation\u002Fskills\u002Fterraform-stacks","---\nname: terraform-stacks\ndescription: Comprehensive guide for working with HashiCorp Terraform Stacks. Use when creating, modifying, or validating Terraform Stack configurations (.tfcomponent.hcl, .tfdeploy.hcl files), working with stack components and deployments from local modules, public registry, or private registry sources, managing multi-region or multi-environment infrastructure, or troubleshooting Terraform Stacks syntax and structure.\nmetadata:\n  copyright: Copyright IBM Corp. 2026\n  version: \"0.0.1\"\n---\n\n# Terraform Stacks\n\nTerraform Stacks simplify infrastructure provisioning and management at scale by providing a configuration layer above traditional Terraform modules. Stacks enable declarative orchestration of multiple components across environments, regions, and cloud accounts.\n\n## Core Concepts\n\n**Stack**: A complete unit of infrastructure composed of components and deployments that can be managed together.\n\n**Component**: An abstraction around a Terraform module that defines infrastructure pieces. Each component specifies a source module, inputs, and providers.\n\n**Deployment**: An instance of all components in a stack with specific input values. Use deployments for different environments (dev\u002Fstaging\u002Fprod), regions, or cloud accounts.\n\n**Stack Language**: A separate HCL-based language (not regular Terraform HCL) with distinct blocks and file extensions.\n\n## File Structure\n\nTerraform Stacks use specific file extensions:\n\n- **Component configuration**: `.tfcomponent.hcl`\n- **Deployment configuration**: `.tfdeploy.hcl`\n- **Provider lock file**: `.terraform.lock.hcl` (generated by CLI)\n\nAll configuration files must be at the root level of the Stack repository. HCP Terraform processes all files in dependency order.\n\n### Recommended File Organization\n\n```\nmy-stack\u002F\n├── .terraform-version               # The required Terraform version for this Stack\n├── variables.tfcomponent.hcl        # Variable declarations\n├── providers.tfcomponent.hcl        # Provider configurations\n├── components.tfcomponent.hcl       # Component definitions\n├── outputs.tfcomponent.hcl          # Stack outputs\n├── deployments.tfdeploy.hcl         # Deployment definitions\n├── .terraform.lock.hcl              # Provider lock file (generated)\n└── modules\u002F                         # Local modules (optional - only if using local modules)\n    ├── s3\u002F\n    └── compute\u002F\n```\n\n**Note**: The `modules\u002F` directory is only required when using local module sources. Components can reference modules from:\n- Local file paths: `.\u002Fmodules\u002Fvpc`\n- Public registry: `terraform-aws-modules\u002Fvpc\u002Faws`\n- Private registry: `app.terraform.io\u002F\u003Corg-name>\u002Fvpc\u002Faws`\n- Git: `git::https:\u002F\u002Fgithub.com\u002Forg\u002Frepo.git\u002F\u002Fpath?ref=v1.0.0`\n\nHCP Terraform processes all `.tfcomponent.hcl` and `.tfdeploy.hcl` files in dependency order.\n\n## Required Terraform version (.terraform-version)\n\nUse Terraform v1.13.x or later to access the Stacks CLI plugin and to run\nterraform stacks CLI commands. Begin by adding a .terraform-version file to\nyour Stack's root directory to specify the Terraform version required for your\nStack. For example, the following file specifies Terraform v1.14.5:\n\n```\n1.14.5\n```\n\n## Component Configuration (.tfcomponent.hcl)\n\n### Variable Block\n\nDeclare input variables for the Stack configuration. Variables must define a `type` field and do not support the `validation` argument.\n\n```hcl\nvariable \"aws_region\" {\n  type        = string\n  description = \"AWS region for deployments\"\n  default     = \"us-west-1\"\n}\n\nvariable \"identity_token\" {\n  type        = string\n  description = \"OIDC identity token\"\n  ephemeral   = true  # Does not persist to state file\n}\n\nvariable \"instance_count\" {\n  type     = number\n  nullable = false\n}\n```\n\n**Important**: Use `ephemeral = true` for credentials and tokens (identity tokens, API keys, passwords) to prevent them from persisting in state files. Use `stable` for longer-lived values like license keys that need to persist across runs.\n\n### Required Providers Block\n\n```hcl\nrequired_providers {\n  aws = {\n    source  = \"hashicorp\u002Faws\"\n    version = \"~> 6.0\"\n  }\n  random = {\n    source  = \"hashicorp\u002Frandom\"\n    version = \"~> 3.5.0\"\n  }\n}\n```\n\n### Provider Block\n\nProvider blocks differ from traditional Terraform:\n\n1. Support `for_each` meta-argument\n2. Define aliases in the block header (not as an argument)\n3. Accept configuration through a `config` block\n\n**Single Provider Configuration:**\n\n```hcl\nprovider \"aws\" \"this\" {\n  config {\n    region = var.aws_region\n    assume_role_with_web_identity {\n      role_arn           = var.role_arn\n      web_identity_token = var.identity_token\n    }\n  }\n}\n```\n\n**Multiple Provider Configurations with for_each:**\n\n```hcl\nprovider \"aws\" \"configurations\" {\n  for_each = var.regions\n\n  config {\n    region = each.value\n    assume_role_with_web_identity {\n      role_arn           = var.role_arn\n      web_identity_token = var.identity_token\n    }\n  }\n}\n```\n\n**Authentication Best Practice**: Use **workload identity** (OIDC) as the preferred authentication method for Stacks. This approach:\n- Avoids long-lived static credentials\n- Provides temporary, scoped credentials per deployment run\n- Integrates with cloud provider IAM (AWS IAM Roles, Azure Managed Identities, GCP Service Accounts)\n- Eliminates need for platform-managed environment variables\n\nConfigure workload identity using `identity_token` blocks and `assume_role_with_web_identity` in provider configuration. For detailed setup instructions for AWS, Azure, and GCP, see: https:\u002F\u002Fdeveloper.hashicorp.com\u002Fterraform\u002Fcloud-docs\u002Fdynamic-provider-credentials\n\n### Component Block\n\nEach Stack requires at least one component block. Add a component for each module to include in the Stack. Components reference modules from local paths, registries, or Git.\n\n```hcl\ncomponent \"vpc\" {\n  source  = \"app.terraform.io\u002Fmy-org\u002Fvpc\u002Faws\"  # Local, registry, or Git URL\n  version = \"2.1.0\"          # For registry modules\n\n  inputs = {\n    cidr_block  = var.vpc_cidr\n    name_prefix = var.name_prefix\n  }\n\n  providers = {\n    aws = provider.aws.this\n  }\n}\n```\n\nSee `references\u002Fcomponent-blocks.md` for examples of dependencies, for_each, public registry modules, Git sources, and more.\n\n**Key Points:**\n- Reference outputs: `component.\u003Cname>.\u003Coutput>` or `component.\u003Cname>[key].\u003Coutput>` for for_each\n- Dependencies inferred automatically from component references\n- Aggregate with for expressions: `[for x in component.s3 : x.bucket_name]`\n- For components with `for_each`, reference specific instances: `component.\u003Cname>[each.value].\u003Coutput>`\n- Provider references are normal values: `provider.\u003Ctype>.\u003Calias>` or `provider.\u003Ctype>.\u003Calias>[each.value]`\n\n### Output Block\n\nOutputs require a `type` argument and do not support `preconditions`:\n\n```hcl\noutput \"vpc_id\" {\n  type        = string\n  description = \"VPC ID\"\n  value       = component.vpc.vpc_id\n}\n\noutput \"endpoint_urls\" {\n  type      = map(string)\n  value     = {\n    for region, comp in component.api : region => comp.endpoint_url\n  }\n  sensitive = false\n}\n```\n\n### Locals Block\n\nLocals blocks work the same in both `.tfcomponent.hcl` and `.tfdeploy.hcl` files:\n\n```hcl\nlocals {\n  common_tags = {\n    Environment = var.environment\n    ManagedBy   = \"Terraform Stacks\"\n    Project     = var.project_name\n  }\n\n  region_config = {\n    for region in var.regions : region => {\n      name_suffix = \"${var.environment}-${region}\"\n    }\n  }\n}\n```\n\n### Removed Block\n\nUse to safely remove components from a Stack. HCP Terraform requires the component's providers to remove it.\n\n```hcl\nremoved {\n  from   = component.old_component\n  source = \".\u002Fmodules\u002Fold-module\"\n\n  providers = {\n    aws = provider.aws.this\n  }\n}\n```\n\n## Deployment Configuration (.tfdeploy.hcl)\n\n### Identity Token Block\n\nGenerate JWT tokens for OIDC authentication with cloud providers:\n\n```hcl\nidentity_token \"aws\" {\n  audience = [\"aws.workload.identity\"]\n}\n\nidentity_token \"azure\" {\n  audience = [\"api:\u002F\u002FAzureADTokenExchange\"]\n}\n```\n\nReference tokens in deployments using `identity_token.\u003Cname>.jwt`\n\n### Store Block\n\nAccess HCP Terraform variable sets within Stack deployments:\n\n```hcl\nstore \"varset\" \"aws_credentials\" {\n  id       = \"varset-ABC123\"  # Alternatively use: name = \"varset_name\"\n  source   = \"tfc-cloud-shared\"\n  category = \"terraform\"      # Alternatively use: category = \"env\" for environment variables\n}\n\ndeployment \"production\" {\n  inputs = {\n    aws_access_key = store.varset.aws_credentials.AWS_ACCESS_KEY_ID\n  }\n}\n```\n\nUse to centralize credentials and share variables across Stacks. See `references\u002Fdeployment-blocks.md` for details.\n\n### Deployment Block\n\nDefine deployment instances (minimum 1, maximum 20 per Stack):\n\n```hcl\ndeployment \"production\" {\n  inputs = {\n    aws_region     = \"us-west-1\"\n    instance_count = 3\n    role_arn       = local.role_arn\n    identity_token = identity_token.aws.jwt\n  }\n}\n\n# Create multiple deployments for different environments\ndeployment \"development\" {\n  inputs = {\n    aws_region     = \"us-east-1\"\n    instance_count = 1\n    name_suffix    = \"dev\"\n    role_arn       = local.role_arn\n    identity_token = identity_token.aws.jwt\n  }\n}\n```\n\n**To destroy a deployment**: Set `destroy = true`, upload configuration, approve destroy run, then remove the deployment block. See `references\u002Fdeployment-blocks.md` for details.\n\n### Deployment Group Block\n\nGroup deployments together for shared settings (HCP Terraform Premium tier feature). Free\u002Fstandard tiers use default groups named `{deployment-name}_default`.\n\n```hcl\ndeployment_group \"canary\" {\n  auto_approve_checks = [deployment_auto_approve.safe_changes]\n}\n\ndeployment \"dev\" {\n  inputs = { \u002F* ... *\u002F }\n  deployment_group = deployment_group.canary\n}\n```\n\nMultiple deployments can reference the same group. See `references\u002Fdeployment-blocks.md` for details.\n\n### Deployment Auto-Approve Block\n\nDefine rules to automatically approve deployment plans (HCP Terraform Premium tier feature):\n\n```hcl\ndeployment_auto_approve \"safe_changes\" {\n  deployment_group = deployment_group.canary\n\n  check {\n    condition = context.plan.changes.remove == 0\n    reason    = \"Cannot auto-approve plans with resource deletions\"\n  }\n}\n```\n\n**Available context variables**: `context.plan.applyable`, `context.plan.changes.add\u002Fchange\u002Fremove\u002Ftotal`, `context.success`\n\n**Note:** `orchestrate` blocks are deprecated. Use `deployment_group` and `deployment_auto_approve` instead.\n\nSee `references\u002Fdeployment-blocks.md` for all context variables and patterns.\n\n### Publish Output and Upstream Input Blocks\n\nLink Stacks together by publishing outputs from one Stack and consuming them in another:\n\n```hcl\n# In network Stack - publish outputs\npublish_output \"vpc_id_network\" {\n  type  = string\n  value = deployment.network.vpc_id\n}\n\n# In application Stack - consume outputs\nupstream_input \"network_stack\" {\n  type   = \"stack\"\n  source = \"app.terraform.io\u002Fmy-org\u002Fmy-project\u002Fnetworking-stack\"\n}\n\ndeployment \"app\" {\n  inputs = {\n    vpc_id = upstream_input.network_stack.vpc_id_network\n  }\n}\n```\n\nSee `references\u002Flinked-stacks.md` for complete documentation and examples.\n\n## Terraform Stacks CLI\n\n**Note**: Terraform Stacks is Generally Available (GA) as of Terraform CLI v1.13+. Stacks now count toward Resources Under Management (RUM) for HCP Terraform billing.\n\n### Initialize and Validate\n\n```bash\nterraform stacks init              # Download providers, modules, generate lock file\nterraform stacks providers-lock    # Regenerate lock file (add platforms if needed)\nterraform stacks validate          # Check syntax without uploading\n```\n\n### Deployment Workflow\n\n**Important**: No `plan` or `apply` commands. Upload configuration triggers deployment runs automatically.\n\n```bash\n# 1. Upload configuration (triggers deployment runs)\nterraform stacks configuration upload\n\n# 2. Monitor deployments\nterraform stacks deployment-run list                          # List runs (non-interactive)\nterraform stacks deployment-group watch -deployment-group=... # Stream status updates\n\n# 3. Approve deployments (if auto-approve not configured)\nterraform stacks deployment-run approve-all-plans -deployment-run-id=...\nterraform stacks deployment-group approve-all-plans -deployment-group=...\nterraform stacks deployment-run cancel -deployment-run-id=...  # Cancel if needed\n```\n\n### Configuration Management\n\n```bash\nterraform stacks configuration list                    # List configuration versions\nterraform stacks configuration fetch -configuration-id=...  # Download configuration\nterraform stacks configuration watch                   # Monitor upload status\n```\n\n### Other Commands\n\n```bash\nterraform stacks create              # Create new Stack (interactive)\nterraform stacks fmt                 # Format Stack files\nterraform stacks list                # Show all Stacks\nterraform stacks version             # Display version\nterraform stacks deployment-group rerun -deployment-group=...  # Rerun deployment\n```\n\n## Monitoring Deployments with HCP Terraform API\n\nFor programmatic monitoring in automation, CI\u002FCD, or non-interactive environments (like AI agents), use the HCP Terraform API instead of CLI watch commands. The API provides endpoints for:\n\n- Configuration status and validation\n- Deployment group summaries\n- Deployment run status\n- Deployment step details (plan\u002Fapply)\n- Error diagnostics with file locations and code snippets\n- Stack outputs via artifacts endpoint\n\n**Key points:**\n- CLI watch commands stream indefinitely and don't work in automation\n- Use artifacts endpoint to retrieve Stack outputs: `GET \u002Fapi\u002Fv2\u002Fstack-deployment-steps\u002F{step-id}\u002Fartifacts?name=apply-description`\n- Diagnostics endpoint requires `stack_deployment_step_id` query parameter\n- Artifacts endpoint returns HTTP 307 redirect (use `curl -L`)\n\nFor complete API workflow, authentication, polling best practices, and example scripts, see `references\u002Fapi-monitoring.md`.\n\n## Common Patterns\n\n**Component Dependencies**: Dependencies are automatically inferred when one component references another's output (e.g., `subnet_ids = component.vpc.private_subnet_ids`).\n\n**Multi-Region Deployment**: Use `for_each` on providers and components to deploy across multiple regions. Each region gets its own provider configuration and component instances.\n\n**Deferred Changes**: Stacks support deferred changes to handle dependencies where values are only known after apply. This enables complex multi-component deployments where some resources depend on runtime values from other components (cluster endpoints, generated passwords, etc.).\n\nFor complete examples including multi-region deployments, component dependencies, deferred changes patterns, and linked Stacks, see `references\u002Fexamples.md`.\n\n## Best Practices\n\n1. **Component Granularity**: Create components for logical infrastructure units that share a lifecycle\n2. **Module Compatibility**:\n   - Modules used with Stacks cannot include provider blocks (configure providers in Stack configuration)\n   - **Test public registry modules** before using in production Stacks - some modules may have compatibility issues\n   - Consider using raw resources for critical infrastructure if module compatibility is uncertain\n   - Example: Some terraform-aws-modules versions have been found to have compatibility issues with Stacks (e.g., ALB and ECS modules)\n3. **State Isolation**: Each deployment has its own isolated state\n4. **Input Variables**: Use variables for values that differ across deployments; use locals for shared values\n5. **Provider Lock Files**: Always generate and commit `.terraform.lock.hcl` to version control\n6. **Naming Conventions**: Use descriptive names for components and deployments\n7. **Deployment Groups**: You can organize deployments into deployment groups. Deployment groups enable auto-approval rules, logical organization, and provide a foundation for scaling. Deployment groups are an HCP Terraform Premium tier feature\n8. **Testing**: Test Stack configurations in dev\u002Fstaging deployments before production\n\n## Troubleshooting\n\n**Circular Dependencies**: Refactor to break circular references or use intermediate components.\n\n**Deployment Destruction**: Cannot destroy from UI. Set `destroy = true` in deployment block, upload configuration, and HCP Terraform creates a destroy run.\n\n**Empty Diagnostics**: Add required `stack_deployment_step_id` query parameter to diagnostics API requests.\n\n**Module Compatibility**: Test public registry modules before production use. Some modules may have compatibility issues with Stacks.\n\n## References\n\nFor detailed documentation, see:\n- `references\u002Fcomponent-blocks.md` - Complete component block reference with all arguments and syntax\n- `references\u002Fdeployment-blocks.md` - Complete deployment block reference with all configuration options\n- `references\u002Flinked-stacks.md` - Publish outputs and upstream inputs for linking Stacks together\n- `references\u002Fexamples.md` - Complete working examples for multi-region and component dependencies\n- `references\u002Fapi-monitoring.md` - Full API workflow for programmatic monitoring and automation\n- `references\u002Ftroubleshooting.md` - Detailed troubleshooting guide for common issues and solutions\n",{"data":38,"body":42},{"name":4,"description":6,"metadata":39},{"copyright":40,"version":41},"Copyright IBM Corp. 2026","0.0.1",{"type":43,"children":44},"root",[45,53,59,66,77,87,96,106,112,117,171,176,183,195,213,260,279,285,290,299,305,311,332,484,510,516,601,607,612,647,655,732,740,827,843,866,895,901,906,1012,1025,1033,1109,1115,1135,1241,1247,1265,1371,1377,1382,1448,1454,1460,1465,1525,1536,1542,1547,1637,1650,1656,1661,1813,1837,1843,1856,1924,1935,1941,1946,2013,2043,2076,2087,2093,2098,2234,2246,2252,2261,2267,2343,2349,2373,2575,2581,2666,2672,2791,2797,2802,2835,2843,2888,2900,2906,2924,2940,2950,2962,2968,3086,3092,3102,3119,3136,3145,3151,3156,3220],{"type":46,"tag":47,"props":48,"children":49},"element","h1",{"id":4},[50],{"type":51,"value":52},"text","Terraform Stacks",{"type":46,"tag":54,"props":55,"children":56},"p",{},[57],{"type":51,"value":58},"Terraform Stacks simplify infrastructure provisioning and management at scale by providing a configuration layer above traditional Terraform modules. Stacks enable declarative orchestration of multiple components across environments, regions, and cloud accounts.",{"type":46,"tag":60,"props":61,"children":63},"h2",{"id":62},"core-concepts",[64],{"type":51,"value":65},"Core Concepts",{"type":46,"tag":54,"props":67,"children":68},{},[69,75],{"type":46,"tag":70,"props":71,"children":72},"strong",{},[73],{"type":51,"value":74},"Stack",{"type":51,"value":76},": A complete unit of infrastructure composed of components and deployments that can be managed together.",{"type":46,"tag":54,"props":78,"children":79},{},[80,85],{"type":46,"tag":70,"props":81,"children":82},{},[83],{"type":51,"value":84},"Component",{"type":51,"value":86},": An abstraction around a Terraform module that defines infrastructure pieces. Each component specifies a source module, inputs, and providers.",{"type":46,"tag":54,"props":88,"children":89},{},[90,94],{"type":46,"tag":70,"props":91,"children":92},{},[93],{"type":51,"value":17},{"type":51,"value":95},": An instance of all components in a stack with specific input values. Use deployments for different environments (dev\u002Fstaging\u002Fprod), regions, or cloud accounts.",{"type":46,"tag":54,"props":97,"children":98},{},[99,104],{"type":46,"tag":70,"props":100,"children":101},{},[102],{"type":51,"value":103},"Stack Language",{"type":51,"value":105},": A separate HCL-based language (not regular Terraform HCL) with distinct blocks and file extensions.",{"type":46,"tag":60,"props":107,"children":109},{"id":108},"file-structure",[110],{"type":51,"value":111},"File Structure",{"type":46,"tag":54,"props":113,"children":114},{},[115],{"type":51,"value":116},"Terraform Stacks use specific file extensions:",{"type":46,"tag":118,"props":119,"children":120},"ul",{},[121,139,154],{"type":46,"tag":122,"props":123,"children":124},"li",{},[125,130,132],{"type":46,"tag":70,"props":126,"children":127},{},[128],{"type":51,"value":129},"Component configuration",{"type":51,"value":131},": ",{"type":46,"tag":133,"props":134,"children":136},"code",{"className":135},[],[137],{"type":51,"value":138},".tfcomponent.hcl",{"type":46,"tag":122,"props":140,"children":141},{},[142,147,148],{"type":46,"tag":70,"props":143,"children":144},{},[145],{"type":51,"value":146},"Deployment configuration",{"type":51,"value":131},{"type":46,"tag":133,"props":149,"children":151},{"className":150},[],[152],{"type":51,"value":153},".tfdeploy.hcl",{"type":46,"tag":122,"props":155,"children":156},{},[157,162,163,169],{"type":46,"tag":70,"props":158,"children":159},{},[160],{"type":51,"value":161},"Provider lock file",{"type":51,"value":131},{"type":46,"tag":133,"props":164,"children":166},{"className":165},[],[167],{"type":51,"value":168},".terraform.lock.hcl",{"type":51,"value":170}," (generated by CLI)",{"type":46,"tag":54,"props":172,"children":173},{},[174],{"type":51,"value":175},"All configuration files must be at the root level of the Stack repository. HCP Terraform processes all files in dependency order.",{"type":46,"tag":177,"props":178,"children":180},"h3",{"id":179},"recommended-file-organization",[181],{"type":51,"value":182},"Recommended File Organization",{"type":46,"tag":184,"props":185,"children":189},"pre",{"className":186,"code":188,"language":51},[187],"language-text","my-stack\u002F\n├── .terraform-version               # The required Terraform version for this Stack\n├── variables.tfcomponent.hcl        # Variable declarations\n├── providers.tfcomponent.hcl        # Provider configurations\n├── components.tfcomponent.hcl       # Component definitions\n├── outputs.tfcomponent.hcl          # Stack outputs\n├── deployments.tfdeploy.hcl         # Deployment definitions\n├── .terraform.lock.hcl              # Provider lock file (generated)\n└── modules\u002F                         # Local modules (optional - only if using local modules)\n    ├── s3\u002F\n    └── compute\u002F\n",[190],{"type":46,"tag":133,"props":191,"children":193},{"__ignoreMap":192},"",[194],{"type":51,"value":188},{"type":46,"tag":54,"props":196,"children":197},{},[198,203,205,211],{"type":46,"tag":70,"props":199,"children":200},{},[201],{"type":51,"value":202},"Note",{"type":51,"value":204},": The ",{"type":46,"tag":133,"props":206,"children":208},{"className":207},[],[209],{"type":51,"value":210},"modules\u002F",{"type":51,"value":212}," directory is only required when using local module sources. Components can reference modules from:",{"type":46,"tag":118,"props":214,"children":215},{},[216,227,238,249],{"type":46,"tag":122,"props":217,"children":218},{},[219,221],{"type":51,"value":220},"Local file paths: ",{"type":46,"tag":133,"props":222,"children":224},{"className":223},[],[225],{"type":51,"value":226},".\u002Fmodules\u002Fvpc",{"type":46,"tag":122,"props":228,"children":229},{},[230,232],{"type":51,"value":231},"Public registry: ",{"type":46,"tag":133,"props":233,"children":235},{"className":234},[],[236],{"type":51,"value":237},"terraform-aws-modules\u002Fvpc\u002Faws",{"type":46,"tag":122,"props":239,"children":240},{},[241,243],{"type":51,"value":242},"Private registry: ",{"type":46,"tag":133,"props":244,"children":246},{"className":245},[],[247],{"type":51,"value":248},"app.terraform.io\u002F\u003Corg-name>\u002Fvpc\u002Faws",{"type":46,"tag":122,"props":250,"children":251},{},[252,254],{"type":51,"value":253},"Git: ",{"type":46,"tag":133,"props":255,"children":257},{"className":256},[],[258],{"type":51,"value":259},"git::https:\u002F\u002Fgithub.com\u002Forg\u002Frepo.git\u002F\u002Fpath?ref=v1.0.0",{"type":46,"tag":54,"props":261,"children":262},{},[263,265,270,272,277],{"type":51,"value":264},"HCP Terraform processes all ",{"type":46,"tag":133,"props":266,"children":268},{"className":267},[],[269],{"type":51,"value":138},{"type":51,"value":271}," and ",{"type":46,"tag":133,"props":273,"children":275},{"className":274},[],[276],{"type":51,"value":153},{"type":51,"value":278}," files in dependency order.",{"type":46,"tag":60,"props":280,"children":282},{"id":281},"required-terraform-version-terraform-version",[283],{"type":51,"value":284},"Required Terraform version (.terraform-version)",{"type":46,"tag":54,"props":286,"children":287},{},[288],{"type":51,"value":289},"Use Terraform v1.13.x or later to access the Stacks CLI plugin and to run\nterraform stacks CLI commands. Begin by adding a .terraform-version file to\nyour Stack's root directory to specify the Terraform version required for your\nStack. For example, the following file specifies Terraform v1.14.5:",{"type":46,"tag":184,"props":291,"children":294},{"className":292,"code":293,"language":51},[187],"1.14.5\n",[295],{"type":46,"tag":133,"props":296,"children":297},{"__ignoreMap":192},[298],{"type":51,"value":293},{"type":46,"tag":60,"props":300,"children":302},{"id":301},"component-configuration-tfcomponenthcl",[303],{"type":51,"value":304},"Component Configuration (.tfcomponent.hcl)",{"type":46,"tag":177,"props":306,"children":308},{"id":307},"variable-block",[309],{"type":51,"value":310},"Variable Block",{"type":46,"tag":54,"props":312,"children":313},{},[314,316,322,324,330],{"type":51,"value":315},"Declare input variables for the Stack configuration. Variables must define a ",{"type":46,"tag":133,"props":317,"children":319},{"className":318},[],[320],{"type":51,"value":321},"type",{"type":51,"value":323}," field and do not support the ",{"type":46,"tag":133,"props":325,"children":327},{"className":326},[],[328],{"type":51,"value":329},"validation",{"type":51,"value":331}," argument.",{"type":46,"tag":184,"props":333,"children":337},{"className":334,"code":335,"language":336,"meta":192,"style":192},"language-hcl shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","variable \"aws_region\" {\n  type        = string\n  description = \"AWS region for deployments\"\n  default     = \"us-west-1\"\n}\n\nvariable \"identity_token\" {\n  type        = string\n  description = \"OIDC identity token\"\n  ephemeral   = true  # Does not persist to state file\n}\n\nvariable \"instance_count\" {\n  type     = number\n  nullable = false\n}\n","hcl",[338],{"type":46,"tag":133,"props":339,"children":340},{"__ignoreMap":192},[341,352,361,370,379,388,398,407,415,424,433,441,449,458,467,476],{"type":46,"tag":342,"props":343,"children":346},"span",{"class":344,"line":345},"line",1,[347],{"type":46,"tag":342,"props":348,"children":349},{},[350],{"type":51,"value":351},"variable \"aws_region\" {\n",{"type":46,"tag":342,"props":353,"children":355},{"class":344,"line":354},2,[356],{"type":46,"tag":342,"props":357,"children":358},{},[359],{"type":51,"value":360},"  type        = string\n",{"type":46,"tag":342,"props":362,"children":364},{"class":344,"line":363},3,[365],{"type":46,"tag":342,"props":366,"children":367},{},[368],{"type":51,"value":369},"  description = \"AWS region for deployments\"\n",{"type":46,"tag":342,"props":371,"children":373},{"class":344,"line":372},4,[374],{"type":46,"tag":342,"props":375,"children":376},{},[377],{"type":51,"value":378},"  default     = \"us-west-1\"\n",{"type":46,"tag":342,"props":380,"children":382},{"class":344,"line":381},5,[383],{"type":46,"tag":342,"props":384,"children":385},{},[386],{"type":51,"value":387},"}\n",{"type":46,"tag":342,"props":389,"children":391},{"class":344,"line":390},6,[392],{"type":46,"tag":342,"props":393,"children":395},{"emptyLinePlaceholder":394},true,[396],{"type":51,"value":397},"\n",{"type":46,"tag":342,"props":399,"children":401},{"class":344,"line":400},7,[402],{"type":46,"tag":342,"props":403,"children":404},{},[405],{"type":51,"value":406},"variable \"identity_token\" {\n",{"type":46,"tag":342,"props":408,"children":410},{"class":344,"line":409},8,[411],{"type":46,"tag":342,"props":412,"children":413},{},[414],{"type":51,"value":360},{"type":46,"tag":342,"props":416,"children":418},{"class":344,"line":417},9,[419],{"type":46,"tag":342,"props":420,"children":421},{},[422],{"type":51,"value":423},"  description = \"OIDC identity token\"\n",{"type":46,"tag":342,"props":425,"children":427},{"class":344,"line":426},10,[428],{"type":46,"tag":342,"props":429,"children":430},{},[431],{"type":51,"value":432},"  ephemeral   = true  # Does not persist to state file\n",{"type":46,"tag":342,"props":434,"children":436},{"class":344,"line":435},11,[437],{"type":46,"tag":342,"props":438,"children":439},{},[440],{"type":51,"value":387},{"type":46,"tag":342,"props":442,"children":444},{"class":344,"line":443},12,[445],{"type":46,"tag":342,"props":446,"children":447},{"emptyLinePlaceholder":394},[448],{"type":51,"value":397},{"type":46,"tag":342,"props":450,"children":452},{"class":344,"line":451},13,[453],{"type":46,"tag":342,"props":454,"children":455},{},[456],{"type":51,"value":457},"variable \"instance_count\" {\n",{"type":46,"tag":342,"props":459,"children":461},{"class":344,"line":460},14,[462],{"type":46,"tag":342,"props":463,"children":464},{},[465],{"type":51,"value":466},"  type     = number\n",{"type":46,"tag":342,"props":468,"children":470},{"class":344,"line":469},15,[471],{"type":46,"tag":342,"props":472,"children":473},{},[474],{"type":51,"value":475},"  nullable = false\n",{"type":46,"tag":342,"props":477,"children":479},{"class":344,"line":478},16,[480],{"type":46,"tag":342,"props":481,"children":482},{},[483],{"type":51,"value":387},{"type":46,"tag":54,"props":485,"children":486},{},[487,492,494,500,502,508],{"type":46,"tag":70,"props":488,"children":489},{},[490],{"type":51,"value":491},"Important",{"type":51,"value":493},": Use ",{"type":46,"tag":133,"props":495,"children":497},{"className":496},[],[498],{"type":51,"value":499},"ephemeral = true",{"type":51,"value":501}," for credentials and tokens (identity tokens, API keys, passwords) to prevent them from persisting in state files. Use ",{"type":46,"tag":133,"props":503,"children":505},{"className":504},[],[506],{"type":51,"value":507},"stable",{"type":51,"value":509}," for longer-lived values like license keys that need to persist across runs.",{"type":46,"tag":177,"props":511,"children":513},{"id":512},"required-providers-block",[514],{"type":51,"value":515},"Required Providers Block",{"type":46,"tag":184,"props":517,"children":519},{"className":334,"code":518,"language":336,"meta":192,"style":192},"required_providers {\n  aws = {\n    source  = \"hashicorp\u002Faws\"\n    version = \"~> 6.0\"\n  }\n  random = {\n    source  = \"hashicorp\u002Frandom\"\n    version = \"~> 3.5.0\"\n  }\n}\n",[520],{"type":46,"tag":133,"props":521,"children":522},{"__ignoreMap":192},[523,531,539,547,555,563,571,579,587,594],{"type":46,"tag":342,"props":524,"children":525},{"class":344,"line":345},[526],{"type":46,"tag":342,"props":527,"children":528},{},[529],{"type":51,"value":530},"required_providers {\n",{"type":46,"tag":342,"props":532,"children":533},{"class":344,"line":354},[534],{"type":46,"tag":342,"props":535,"children":536},{},[537],{"type":51,"value":538},"  aws = {\n",{"type":46,"tag":342,"props":540,"children":541},{"class":344,"line":363},[542],{"type":46,"tag":342,"props":543,"children":544},{},[545],{"type":51,"value":546},"    source  = \"hashicorp\u002Faws\"\n",{"type":46,"tag":342,"props":548,"children":549},{"class":344,"line":372},[550],{"type":46,"tag":342,"props":551,"children":552},{},[553],{"type":51,"value":554},"    version = \"~> 6.0\"\n",{"type":46,"tag":342,"props":556,"children":557},{"class":344,"line":381},[558],{"type":46,"tag":342,"props":559,"children":560},{},[561],{"type":51,"value":562},"  }\n",{"type":46,"tag":342,"props":564,"children":565},{"class":344,"line":390},[566],{"type":46,"tag":342,"props":567,"children":568},{},[569],{"type":51,"value":570},"  random = {\n",{"type":46,"tag":342,"props":572,"children":573},{"class":344,"line":400},[574],{"type":46,"tag":342,"props":575,"children":576},{},[577],{"type":51,"value":578},"    source  = \"hashicorp\u002Frandom\"\n",{"type":46,"tag":342,"props":580,"children":581},{"class":344,"line":409},[582],{"type":46,"tag":342,"props":583,"children":584},{},[585],{"type":51,"value":586},"    version = \"~> 3.5.0\"\n",{"type":46,"tag":342,"props":588,"children":589},{"class":344,"line":417},[590],{"type":46,"tag":342,"props":591,"children":592},{},[593],{"type":51,"value":562},{"type":46,"tag":342,"props":595,"children":596},{"class":344,"line":426},[597],{"type":46,"tag":342,"props":598,"children":599},{},[600],{"type":51,"value":387},{"type":46,"tag":177,"props":602,"children":604},{"id":603},"provider-block",[605],{"type":51,"value":606},"Provider Block",{"type":46,"tag":54,"props":608,"children":609},{},[610],{"type":51,"value":611},"Provider blocks differ from traditional Terraform:",{"type":46,"tag":613,"props":614,"children":615},"ol",{},[616,629,634],{"type":46,"tag":122,"props":617,"children":618},{},[619,621,627],{"type":51,"value":620},"Support ",{"type":46,"tag":133,"props":622,"children":624},{"className":623},[],[625],{"type":51,"value":626},"for_each",{"type":51,"value":628}," meta-argument",{"type":46,"tag":122,"props":630,"children":631},{},[632],{"type":51,"value":633},"Define aliases in the block header (not as an argument)",{"type":46,"tag":122,"props":635,"children":636},{},[637,639,645],{"type":51,"value":638},"Accept configuration through a ",{"type":46,"tag":133,"props":640,"children":642},{"className":641},[],[643],{"type":51,"value":644},"config",{"type":51,"value":646}," block",{"type":46,"tag":54,"props":648,"children":649},{},[650],{"type":46,"tag":70,"props":651,"children":652},{},[653],{"type":51,"value":654},"Single Provider Configuration:",{"type":46,"tag":184,"props":656,"children":658},{"className":334,"code":657,"language":336,"meta":192,"style":192},"provider \"aws\" \"this\" {\n  config {\n    region = var.aws_region\n    assume_role_with_web_identity {\n      role_arn           = var.role_arn\n      web_identity_token = var.identity_token\n    }\n  }\n}\n",[659],{"type":46,"tag":133,"props":660,"children":661},{"__ignoreMap":192},[662,670,678,686,694,702,710,718,725],{"type":46,"tag":342,"props":663,"children":664},{"class":344,"line":345},[665],{"type":46,"tag":342,"props":666,"children":667},{},[668],{"type":51,"value":669},"provider \"aws\" \"this\" {\n",{"type":46,"tag":342,"props":671,"children":672},{"class":344,"line":354},[673],{"type":46,"tag":342,"props":674,"children":675},{},[676],{"type":51,"value":677},"  config {\n",{"type":46,"tag":342,"props":679,"children":680},{"class":344,"line":363},[681],{"type":46,"tag":342,"props":682,"children":683},{},[684],{"type":51,"value":685},"    region = var.aws_region\n",{"type":46,"tag":342,"props":687,"children":688},{"class":344,"line":372},[689],{"type":46,"tag":342,"props":690,"children":691},{},[692],{"type":51,"value":693},"    assume_role_with_web_identity {\n",{"type":46,"tag":342,"props":695,"children":696},{"class":344,"line":381},[697],{"type":46,"tag":342,"props":698,"children":699},{},[700],{"type":51,"value":701},"      role_arn           = var.role_arn\n",{"type":46,"tag":342,"props":703,"children":704},{"class":344,"line":390},[705],{"type":46,"tag":342,"props":706,"children":707},{},[708],{"type":51,"value":709},"      web_identity_token = var.identity_token\n",{"type":46,"tag":342,"props":711,"children":712},{"class":344,"line":400},[713],{"type":46,"tag":342,"props":714,"children":715},{},[716],{"type":51,"value":717},"    }\n",{"type":46,"tag":342,"props":719,"children":720},{"class":344,"line":409},[721],{"type":46,"tag":342,"props":722,"children":723},{},[724],{"type":51,"value":562},{"type":46,"tag":342,"props":726,"children":727},{"class":344,"line":417},[728],{"type":46,"tag":342,"props":729,"children":730},{},[731],{"type":51,"value":387},{"type":46,"tag":54,"props":733,"children":734},{},[735],{"type":46,"tag":70,"props":736,"children":737},{},[738],{"type":51,"value":739},"Multiple Provider Configurations with for_each:",{"type":46,"tag":184,"props":741,"children":743},{"className":334,"code":742,"language":336,"meta":192,"style":192},"provider \"aws\" \"configurations\" {\n  for_each = var.regions\n\n  config {\n    region = each.value\n    assume_role_with_web_identity {\n      role_arn           = var.role_arn\n      web_identity_token = var.identity_token\n    }\n  }\n}\n",[744],{"type":46,"tag":133,"props":745,"children":746},{"__ignoreMap":192},[747,755,763,770,777,785,792,799,806,813,820],{"type":46,"tag":342,"props":748,"children":749},{"class":344,"line":345},[750],{"type":46,"tag":342,"props":751,"children":752},{},[753],{"type":51,"value":754},"provider \"aws\" \"configurations\" {\n",{"type":46,"tag":342,"props":756,"children":757},{"class":344,"line":354},[758],{"type":46,"tag":342,"props":759,"children":760},{},[761],{"type":51,"value":762},"  for_each = var.regions\n",{"type":46,"tag":342,"props":764,"children":765},{"class":344,"line":363},[766],{"type":46,"tag":342,"props":767,"children":768},{"emptyLinePlaceholder":394},[769],{"type":51,"value":397},{"type":46,"tag":342,"props":771,"children":772},{"class":344,"line":372},[773],{"type":46,"tag":342,"props":774,"children":775},{},[776],{"type":51,"value":677},{"type":46,"tag":342,"props":778,"children":779},{"class":344,"line":381},[780],{"type":46,"tag":342,"props":781,"children":782},{},[783],{"type":51,"value":784},"    region = each.value\n",{"type":46,"tag":342,"props":786,"children":787},{"class":344,"line":390},[788],{"type":46,"tag":342,"props":789,"children":790},{},[791],{"type":51,"value":693},{"type":46,"tag":342,"props":793,"children":794},{"class":344,"line":400},[795],{"type":46,"tag":342,"props":796,"children":797},{},[798],{"type":51,"value":701},{"type":46,"tag":342,"props":800,"children":801},{"class":344,"line":409},[802],{"type":46,"tag":342,"props":803,"children":804},{},[805],{"type":51,"value":709},{"type":46,"tag":342,"props":807,"children":808},{"class":344,"line":417},[809],{"type":46,"tag":342,"props":810,"children":811},{},[812],{"type":51,"value":717},{"type":46,"tag":342,"props":814,"children":815},{"class":344,"line":426},[816],{"type":46,"tag":342,"props":817,"children":818},{},[819],{"type":51,"value":562},{"type":46,"tag":342,"props":821,"children":822},{"class":344,"line":435},[823],{"type":46,"tag":342,"props":824,"children":825},{},[826],{"type":51,"value":387},{"type":46,"tag":54,"props":828,"children":829},{},[830,835,836,841],{"type":46,"tag":70,"props":831,"children":832},{},[833],{"type":51,"value":834},"Authentication Best Practice",{"type":51,"value":493},{"type":46,"tag":70,"props":837,"children":838},{},[839],{"type":51,"value":840},"workload identity",{"type":51,"value":842}," (OIDC) as the preferred authentication method for Stacks. This approach:",{"type":46,"tag":118,"props":844,"children":845},{},[846,851,856,861],{"type":46,"tag":122,"props":847,"children":848},{},[849],{"type":51,"value":850},"Avoids long-lived static credentials",{"type":46,"tag":122,"props":852,"children":853},{},[854],{"type":51,"value":855},"Provides temporary, scoped credentials per deployment run",{"type":46,"tag":122,"props":857,"children":858},{},[859],{"type":51,"value":860},"Integrates with cloud provider IAM (AWS IAM Roles, Azure Managed Identities, GCP Service Accounts)",{"type":46,"tag":122,"props":862,"children":863},{},[864],{"type":51,"value":865},"Eliminates need for platform-managed environment variables",{"type":46,"tag":54,"props":867,"children":868},{},[869,871,877,879,885,887],{"type":51,"value":870},"Configure workload identity using ",{"type":46,"tag":133,"props":872,"children":874},{"className":873},[],[875],{"type":51,"value":876},"identity_token",{"type":51,"value":878}," blocks and ",{"type":46,"tag":133,"props":880,"children":882},{"className":881},[],[883],{"type":51,"value":884},"assume_role_with_web_identity",{"type":51,"value":886}," in provider configuration. For detailed setup instructions for AWS, Azure, and GCP, see: ",{"type":46,"tag":888,"props":889,"children":893},"a",{"href":890,"rel":891},"https:\u002F\u002Fdeveloper.hashicorp.com\u002Fterraform\u002Fcloud-docs\u002Fdynamic-provider-credentials",[892],"nofollow",[894],{"type":51,"value":890},{"type":46,"tag":177,"props":896,"children":898},{"id":897},"component-block",[899],{"type":51,"value":900},"Component Block",{"type":46,"tag":54,"props":902,"children":903},{},[904],{"type":51,"value":905},"Each Stack requires at least one component block. Add a component for each module to include in the Stack. Components reference modules from local paths, registries, or Git.",{"type":46,"tag":184,"props":907,"children":909},{"className":334,"code":908,"language":336,"meta":192,"style":192},"component \"vpc\" {\n  source  = \"app.terraform.io\u002Fmy-org\u002Fvpc\u002Faws\"  # Local, registry, or Git URL\n  version = \"2.1.0\"          # For registry modules\n\n  inputs = {\n    cidr_block  = var.vpc_cidr\n    name_prefix = var.name_prefix\n  }\n\n  providers = {\n    aws = provider.aws.this\n  }\n}\n",[910],{"type":46,"tag":133,"props":911,"children":912},{"__ignoreMap":192},[913,921,929,937,944,952,960,968,975,982,990,998,1005],{"type":46,"tag":342,"props":914,"children":915},{"class":344,"line":345},[916],{"type":46,"tag":342,"props":917,"children":918},{},[919],{"type":51,"value":920},"component \"vpc\" {\n",{"type":46,"tag":342,"props":922,"children":923},{"class":344,"line":354},[924],{"type":46,"tag":342,"props":925,"children":926},{},[927],{"type":51,"value":928},"  source  = \"app.terraform.io\u002Fmy-org\u002Fvpc\u002Faws\"  # Local, registry, or Git URL\n",{"type":46,"tag":342,"props":930,"children":931},{"class":344,"line":363},[932],{"type":46,"tag":342,"props":933,"children":934},{},[935],{"type":51,"value":936},"  version = \"2.1.0\"          # For registry modules\n",{"type":46,"tag":342,"props":938,"children":939},{"class":344,"line":372},[940],{"type":46,"tag":342,"props":941,"children":942},{"emptyLinePlaceholder":394},[943],{"type":51,"value":397},{"type":46,"tag":342,"props":945,"children":946},{"class":344,"line":381},[947],{"type":46,"tag":342,"props":948,"children":949},{},[950],{"type":51,"value":951},"  inputs = {\n",{"type":46,"tag":342,"props":953,"children":954},{"class":344,"line":390},[955],{"type":46,"tag":342,"props":956,"children":957},{},[958],{"type":51,"value":959},"    cidr_block  = var.vpc_cidr\n",{"type":46,"tag":342,"props":961,"children":962},{"class":344,"line":400},[963],{"type":46,"tag":342,"props":964,"children":965},{},[966],{"type":51,"value":967},"    name_prefix = var.name_prefix\n",{"type":46,"tag":342,"props":969,"children":970},{"class":344,"line":409},[971],{"type":46,"tag":342,"props":972,"children":973},{},[974],{"type":51,"value":562},{"type":46,"tag":342,"props":976,"children":977},{"class":344,"line":417},[978],{"type":46,"tag":342,"props":979,"children":980},{"emptyLinePlaceholder":394},[981],{"type":51,"value":397},{"type":46,"tag":342,"props":983,"children":984},{"class":344,"line":426},[985],{"type":46,"tag":342,"props":986,"children":987},{},[988],{"type":51,"value":989},"  providers = {\n",{"type":46,"tag":342,"props":991,"children":992},{"class":344,"line":435},[993],{"type":46,"tag":342,"props":994,"children":995},{},[996],{"type":51,"value":997},"    aws = provider.aws.this\n",{"type":46,"tag":342,"props":999,"children":1000},{"class":344,"line":443},[1001],{"type":46,"tag":342,"props":1002,"children":1003},{},[1004],{"type":51,"value":562},{"type":46,"tag":342,"props":1006,"children":1007},{"class":344,"line":451},[1008],{"type":46,"tag":342,"props":1009,"children":1010},{},[1011],{"type":51,"value":387},{"type":46,"tag":54,"props":1013,"children":1014},{},[1015,1017,1023],{"type":51,"value":1016},"See ",{"type":46,"tag":133,"props":1018,"children":1020},{"className":1019},[],[1021],{"type":51,"value":1022},"references\u002Fcomponent-blocks.md",{"type":51,"value":1024}," for examples of dependencies, for_each, public registry modules, Git sources, and more.",{"type":46,"tag":54,"props":1026,"children":1027},{},[1028],{"type":46,"tag":70,"props":1029,"children":1030},{},[1031],{"type":51,"value":1032},"Key Points:",{"type":46,"tag":118,"props":1034,"children":1035},{},[1036,1057,1062,1073,1091],{"type":46,"tag":122,"props":1037,"children":1038},{},[1039,1041,1047,1049,1055],{"type":51,"value":1040},"Reference outputs: ",{"type":46,"tag":133,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":51,"value":1046},"component.\u003Cname>.\u003Coutput>",{"type":51,"value":1048}," or ",{"type":46,"tag":133,"props":1050,"children":1052},{"className":1051},[],[1053],{"type":51,"value":1054},"component.\u003Cname>[key].\u003Coutput>",{"type":51,"value":1056}," for for_each",{"type":46,"tag":122,"props":1058,"children":1059},{},[1060],{"type":51,"value":1061},"Dependencies inferred automatically from component references",{"type":46,"tag":122,"props":1063,"children":1064},{},[1065,1067],{"type":51,"value":1066},"Aggregate with for expressions: ",{"type":46,"tag":133,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":51,"value":1072},"[for x in component.s3 : x.bucket_name]",{"type":46,"tag":122,"props":1074,"children":1075},{},[1076,1078,1083,1085],{"type":51,"value":1077},"For components with ",{"type":46,"tag":133,"props":1079,"children":1081},{"className":1080},[],[1082],{"type":51,"value":626},{"type":51,"value":1084},", reference specific instances: ",{"type":46,"tag":133,"props":1086,"children":1088},{"className":1087},[],[1089],{"type":51,"value":1090},"component.\u003Cname>[each.value].\u003Coutput>",{"type":46,"tag":122,"props":1092,"children":1093},{},[1094,1096,1102,1103],{"type":51,"value":1095},"Provider references are normal values: ",{"type":46,"tag":133,"props":1097,"children":1099},{"className":1098},[],[1100],{"type":51,"value":1101},"provider.\u003Ctype>.\u003Calias>",{"type":51,"value":1048},{"type":46,"tag":133,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":51,"value":1108},"provider.\u003Ctype>.\u003Calias>[each.value]",{"type":46,"tag":177,"props":1110,"children":1112},{"id":1111},"output-block",[1113],{"type":51,"value":1114},"Output Block",{"type":46,"tag":54,"props":1116,"children":1117},{},[1118,1120,1125,1127,1133],{"type":51,"value":1119},"Outputs require a ",{"type":46,"tag":133,"props":1121,"children":1123},{"className":1122},[],[1124],{"type":51,"value":321},{"type":51,"value":1126}," argument and do not support ",{"type":46,"tag":133,"props":1128,"children":1130},{"className":1129},[],[1131],{"type":51,"value":1132},"preconditions",{"type":51,"value":1134},":",{"type":46,"tag":184,"props":1136,"children":1138},{"className":334,"code":1137,"language":336,"meta":192,"style":192},"output \"vpc_id\" {\n  type        = string\n  description = \"VPC ID\"\n  value       = component.vpc.vpc_id\n}\n\noutput \"endpoint_urls\" {\n  type      = map(string)\n  value     = {\n    for region, comp in component.api : region => comp.endpoint_url\n  }\n  sensitive = false\n}\n",[1139],{"type":46,"tag":133,"props":1140,"children":1141},{"__ignoreMap":192},[1142,1150,1157,1165,1173,1180,1187,1195,1203,1211,1219,1226,1234],{"type":46,"tag":342,"props":1143,"children":1144},{"class":344,"line":345},[1145],{"type":46,"tag":342,"props":1146,"children":1147},{},[1148],{"type":51,"value":1149},"output \"vpc_id\" {\n",{"type":46,"tag":342,"props":1151,"children":1152},{"class":344,"line":354},[1153],{"type":46,"tag":342,"props":1154,"children":1155},{},[1156],{"type":51,"value":360},{"type":46,"tag":342,"props":1158,"children":1159},{"class":344,"line":363},[1160],{"type":46,"tag":342,"props":1161,"children":1162},{},[1163],{"type":51,"value":1164},"  description = \"VPC ID\"\n",{"type":46,"tag":342,"props":1166,"children":1167},{"class":344,"line":372},[1168],{"type":46,"tag":342,"props":1169,"children":1170},{},[1171],{"type":51,"value":1172},"  value       = component.vpc.vpc_id\n",{"type":46,"tag":342,"props":1174,"children":1175},{"class":344,"line":381},[1176],{"type":46,"tag":342,"props":1177,"children":1178},{},[1179],{"type":51,"value":387},{"type":46,"tag":342,"props":1181,"children":1182},{"class":344,"line":390},[1183],{"type":46,"tag":342,"props":1184,"children":1185},{"emptyLinePlaceholder":394},[1186],{"type":51,"value":397},{"type":46,"tag":342,"props":1188,"children":1189},{"class":344,"line":400},[1190],{"type":46,"tag":342,"props":1191,"children":1192},{},[1193],{"type":51,"value":1194},"output \"endpoint_urls\" {\n",{"type":46,"tag":342,"props":1196,"children":1197},{"class":344,"line":409},[1198],{"type":46,"tag":342,"props":1199,"children":1200},{},[1201],{"type":51,"value":1202},"  type      = map(string)\n",{"type":46,"tag":342,"props":1204,"children":1205},{"class":344,"line":417},[1206],{"type":46,"tag":342,"props":1207,"children":1208},{},[1209],{"type":51,"value":1210},"  value     = {\n",{"type":46,"tag":342,"props":1212,"children":1213},{"class":344,"line":426},[1214],{"type":46,"tag":342,"props":1215,"children":1216},{},[1217],{"type":51,"value":1218},"    for region, comp in component.api : region => comp.endpoint_url\n",{"type":46,"tag":342,"props":1220,"children":1221},{"class":344,"line":435},[1222],{"type":46,"tag":342,"props":1223,"children":1224},{},[1225],{"type":51,"value":562},{"type":46,"tag":342,"props":1227,"children":1228},{"class":344,"line":443},[1229],{"type":46,"tag":342,"props":1230,"children":1231},{},[1232],{"type":51,"value":1233},"  sensitive = false\n",{"type":46,"tag":342,"props":1235,"children":1236},{"class":344,"line":451},[1237],{"type":46,"tag":342,"props":1238,"children":1239},{},[1240],{"type":51,"value":387},{"type":46,"tag":177,"props":1242,"children":1244},{"id":1243},"locals-block",[1245],{"type":51,"value":1246},"Locals Block",{"type":46,"tag":54,"props":1248,"children":1249},{},[1250,1252,1257,1258,1263],{"type":51,"value":1251},"Locals blocks work the same in both ",{"type":46,"tag":133,"props":1253,"children":1255},{"className":1254},[],[1256],{"type":51,"value":138},{"type":51,"value":271},{"type":46,"tag":133,"props":1259,"children":1261},{"className":1260},[],[1262],{"type":51,"value":153},{"type":51,"value":1264}," files:",{"type":46,"tag":184,"props":1266,"children":1268},{"className":334,"code":1267,"language":336,"meta":192,"style":192},"locals {\n  common_tags = {\n    Environment = var.environment\n    ManagedBy   = \"Terraform Stacks\"\n    Project     = var.project_name\n  }\n\n  region_config = {\n    for region in var.regions : region => {\n      name_suffix = \"${var.environment}-${region}\"\n    }\n  }\n}\n",[1269],{"type":46,"tag":133,"props":1270,"children":1271},{"__ignoreMap":192},[1272,1280,1288,1296,1304,1312,1319,1326,1334,1342,1350,1357,1364],{"type":46,"tag":342,"props":1273,"children":1274},{"class":344,"line":345},[1275],{"type":46,"tag":342,"props":1276,"children":1277},{},[1278],{"type":51,"value":1279},"locals {\n",{"type":46,"tag":342,"props":1281,"children":1282},{"class":344,"line":354},[1283],{"type":46,"tag":342,"props":1284,"children":1285},{},[1286],{"type":51,"value":1287},"  common_tags = {\n",{"type":46,"tag":342,"props":1289,"children":1290},{"class":344,"line":363},[1291],{"type":46,"tag":342,"props":1292,"children":1293},{},[1294],{"type":51,"value":1295},"    Environment = var.environment\n",{"type":46,"tag":342,"props":1297,"children":1298},{"class":344,"line":372},[1299],{"type":46,"tag":342,"props":1300,"children":1301},{},[1302],{"type":51,"value":1303},"    ManagedBy   = \"Terraform Stacks\"\n",{"type":46,"tag":342,"props":1305,"children":1306},{"class":344,"line":381},[1307],{"type":46,"tag":342,"props":1308,"children":1309},{},[1310],{"type":51,"value":1311},"    Project     = var.project_name\n",{"type":46,"tag":342,"props":1313,"children":1314},{"class":344,"line":390},[1315],{"type":46,"tag":342,"props":1316,"children":1317},{},[1318],{"type":51,"value":562},{"type":46,"tag":342,"props":1320,"children":1321},{"class":344,"line":400},[1322],{"type":46,"tag":342,"props":1323,"children":1324},{"emptyLinePlaceholder":394},[1325],{"type":51,"value":397},{"type":46,"tag":342,"props":1327,"children":1328},{"class":344,"line":409},[1329],{"type":46,"tag":342,"props":1330,"children":1331},{},[1332],{"type":51,"value":1333},"  region_config = {\n",{"type":46,"tag":342,"props":1335,"children":1336},{"class":344,"line":417},[1337],{"type":46,"tag":342,"props":1338,"children":1339},{},[1340],{"type":51,"value":1341},"    for region in var.regions : region => {\n",{"type":46,"tag":342,"props":1343,"children":1344},{"class":344,"line":426},[1345],{"type":46,"tag":342,"props":1346,"children":1347},{},[1348],{"type":51,"value":1349},"      name_suffix = \"${var.environment}-${region}\"\n",{"type":46,"tag":342,"props":1351,"children":1352},{"class":344,"line":435},[1353],{"type":46,"tag":342,"props":1354,"children":1355},{},[1356],{"type":51,"value":717},{"type":46,"tag":342,"props":1358,"children":1359},{"class":344,"line":443},[1360],{"type":46,"tag":342,"props":1361,"children":1362},{},[1363],{"type":51,"value":562},{"type":46,"tag":342,"props":1365,"children":1366},{"class":344,"line":451},[1367],{"type":46,"tag":342,"props":1368,"children":1369},{},[1370],{"type":51,"value":387},{"type":46,"tag":177,"props":1372,"children":1374},{"id":1373},"removed-block",[1375],{"type":51,"value":1376},"Removed Block",{"type":46,"tag":54,"props":1378,"children":1379},{},[1380],{"type":51,"value":1381},"Use to safely remove components from a Stack. HCP Terraform requires the component's providers to remove it.",{"type":46,"tag":184,"props":1383,"children":1385},{"className":334,"code":1384,"language":336,"meta":192,"style":192},"removed {\n  from   = component.old_component\n  source = \".\u002Fmodules\u002Fold-module\"\n\n  providers = {\n    aws = provider.aws.this\n  }\n}\n",[1386],{"type":46,"tag":133,"props":1387,"children":1388},{"__ignoreMap":192},[1389,1397,1405,1413,1420,1427,1434,1441],{"type":46,"tag":342,"props":1390,"children":1391},{"class":344,"line":345},[1392],{"type":46,"tag":342,"props":1393,"children":1394},{},[1395],{"type":51,"value":1396},"removed {\n",{"type":46,"tag":342,"props":1398,"children":1399},{"class":344,"line":354},[1400],{"type":46,"tag":342,"props":1401,"children":1402},{},[1403],{"type":51,"value":1404},"  from   = component.old_component\n",{"type":46,"tag":342,"props":1406,"children":1407},{"class":344,"line":363},[1408],{"type":46,"tag":342,"props":1409,"children":1410},{},[1411],{"type":51,"value":1412},"  source = \".\u002Fmodules\u002Fold-module\"\n",{"type":46,"tag":342,"props":1414,"children":1415},{"class":344,"line":372},[1416],{"type":46,"tag":342,"props":1417,"children":1418},{"emptyLinePlaceholder":394},[1419],{"type":51,"value":397},{"type":46,"tag":342,"props":1421,"children":1422},{"class":344,"line":381},[1423],{"type":46,"tag":342,"props":1424,"children":1425},{},[1426],{"type":51,"value":989},{"type":46,"tag":342,"props":1428,"children":1429},{"class":344,"line":390},[1430],{"type":46,"tag":342,"props":1431,"children":1432},{},[1433],{"type":51,"value":997},{"type":46,"tag":342,"props":1435,"children":1436},{"class":344,"line":400},[1437],{"type":46,"tag":342,"props":1438,"children":1439},{},[1440],{"type":51,"value":562},{"type":46,"tag":342,"props":1442,"children":1443},{"class":344,"line":409},[1444],{"type":46,"tag":342,"props":1445,"children":1446},{},[1447],{"type":51,"value":387},{"type":46,"tag":60,"props":1449,"children":1451},{"id":1450},"deployment-configuration-tfdeployhcl",[1452],{"type":51,"value":1453},"Deployment Configuration (.tfdeploy.hcl)",{"type":46,"tag":177,"props":1455,"children":1457},{"id":1456},"identity-token-block",[1458],{"type":51,"value":1459},"Identity Token Block",{"type":46,"tag":54,"props":1461,"children":1462},{},[1463],{"type":51,"value":1464},"Generate JWT tokens for OIDC authentication with cloud providers:",{"type":46,"tag":184,"props":1466,"children":1468},{"className":334,"code":1467,"language":336,"meta":192,"style":192},"identity_token \"aws\" {\n  audience = [\"aws.workload.identity\"]\n}\n\nidentity_token \"azure\" {\n  audience = [\"api:\u002F\u002FAzureADTokenExchange\"]\n}\n",[1469],{"type":46,"tag":133,"props":1470,"children":1471},{"__ignoreMap":192},[1472,1480,1488,1495,1502,1510,1518],{"type":46,"tag":342,"props":1473,"children":1474},{"class":344,"line":345},[1475],{"type":46,"tag":342,"props":1476,"children":1477},{},[1478],{"type":51,"value":1479},"identity_token \"aws\" {\n",{"type":46,"tag":342,"props":1481,"children":1482},{"class":344,"line":354},[1483],{"type":46,"tag":342,"props":1484,"children":1485},{},[1486],{"type":51,"value":1487},"  audience = [\"aws.workload.identity\"]\n",{"type":46,"tag":342,"props":1489,"children":1490},{"class":344,"line":363},[1491],{"type":46,"tag":342,"props":1492,"children":1493},{},[1494],{"type":51,"value":387},{"type":46,"tag":342,"props":1496,"children":1497},{"class":344,"line":372},[1498],{"type":46,"tag":342,"props":1499,"children":1500},{"emptyLinePlaceholder":394},[1501],{"type":51,"value":397},{"type":46,"tag":342,"props":1503,"children":1504},{"class":344,"line":381},[1505],{"type":46,"tag":342,"props":1506,"children":1507},{},[1508],{"type":51,"value":1509},"identity_token \"azure\" {\n",{"type":46,"tag":342,"props":1511,"children":1512},{"class":344,"line":390},[1513],{"type":46,"tag":342,"props":1514,"children":1515},{},[1516],{"type":51,"value":1517},"  audience = [\"api:\u002F\u002FAzureADTokenExchange\"]\n",{"type":46,"tag":342,"props":1519,"children":1520},{"class":344,"line":400},[1521],{"type":46,"tag":342,"props":1522,"children":1523},{},[1524],{"type":51,"value":387},{"type":46,"tag":54,"props":1526,"children":1527},{},[1528,1530],{"type":51,"value":1529},"Reference tokens in deployments using ",{"type":46,"tag":133,"props":1531,"children":1533},{"className":1532},[],[1534],{"type":51,"value":1535},"identity_token.\u003Cname>.jwt",{"type":46,"tag":177,"props":1537,"children":1539},{"id":1538},"store-block",[1540],{"type":51,"value":1541},"Store Block",{"type":46,"tag":54,"props":1543,"children":1544},{},[1545],{"type":51,"value":1546},"Access HCP Terraform variable sets within Stack deployments:",{"type":46,"tag":184,"props":1548,"children":1550},{"className":334,"code":1549,"language":336,"meta":192,"style":192},"store \"varset\" \"aws_credentials\" {\n  id       = \"varset-ABC123\"  # Alternatively use: name = \"varset_name\"\n  source   = \"tfc-cloud-shared\"\n  category = \"terraform\"      # Alternatively use: category = \"env\" for environment variables\n}\n\ndeployment \"production\" {\n  inputs = {\n    aws_access_key = store.varset.aws_credentials.AWS_ACCESS_KEY_ID\n  }\n}\n",[1551],{"type":46,"tag":133,"props":1552,"children":1553},{"__ignoreMap":192},[1554,1562,1570,1578,1586,1593,1600,1608,1615,1623,1630],{"type":46,"tag":342,"props":1555,"children":1556},{"class":344,"line":345},[1557],{"type":46,"tag":342,"props":1558,"children":1559},{},[1560],{"type":51,"value":1561},"store \"varset\" \"aws_credentials\" {\n",{"type":46,"tag":342,"props":1563,"children":1564},{"class":344,"line":354},[1565],{"type":46,"tag":342,"props":1566,"children":1567},{},[1568],{"type":51,"value":1569},"  id       = \"varset-ABC123\"  # Alternatively use: name = \"varset_name\"\n",{"type":46,"tag":342,"props":1571,"children":1572},{"class":344,"line":363},[1573],{"type":46,"tag":342,"props":1574,"children":1575},{},[1576],{"type":51,"value":1577},"  source   = \"tfc-cloud-shared\"\n",{"type":46,"tag":342,"props":1579,"children":1580},{"class":344,"line":372},[1581],{"type":46,"tag":342,"props":1582,"children":1583},{},[1584],{"type":51,"value":1585},"  category = \"terraform\"      # Alternatively use: category = \"env\" for environment variables\n",{"type":46,"tag":342,"props":1587,"children":1588},{"class":344,"line":381},[1589],{"type":46,"tag":342,"props":1590,"children":1591},{},[1592],{"type":51,"value":387},{"type":46,"tag":342,"props":1594,"children":1595},{"class":344,"line":390},[1596],{"type":46,"tag":342,"props":1597,"children":1598},{"emptyLinePlaceholder":394},[1599],{"type":51,"value":397},{"type":46,"tag":342,"props":1601,"children":1602},{"class":344,"line":400},[1603],{"type":46,"tag":342,"props":1604,"children":1605},{},[1606],{"type":51,"value":1607},"deployment \"production\" {\n",{"type":46,"tag":342,"props":1609,"children":1610},{"class":344,"line":409},[1611],{"type":46,"tag":342,"props":1612,"children":1613},{},[1614],{"type":51,"value":951},{"type":46,"tag":342,"props":1616,"children":1617},{"class":344,"line":417},[1618],{"type":46,"tag":342,"props":1619,"children":1620},{},[1621],{"type":51,"value":1622},"    aws_access_key = store.varset.aws_credentials.AWS_ACCESS_KEY_ID\n",{"type":46,"tag":342,"props":1624,"children":1625},{"class":344,"line":426},[1626],{"type":46,"tag":342,"props":1627,"children":1628},{},[1629],{"type":51,"value":562},{"type":46,"tag":342,"props":1631,"children":1632},{"class":344,"line":435},[1633],{"type":46,"tag":342,"props":1634,"children":1635},{},[1636],{"type":51,"value":387},{"type":46,"tag":54,"props":1638,"children":1639},{},[1640,1642,1648],{"type":51,"value":1641},"Use to centralize credentials and share variables across Stacks. See ",{"type":46,"tag":133,"props":1643,"children":1645},{"className":1644},[],[1646],{"type":51,"value":1647},"references\u002Fdeployment-blocks.md",{"type":51,"value":1649}," for details.",{"type":46,"tag":177,"props":1651,"children":1653},{"id":1652},"deployment-block",[1654],{"type":51,"value":1655},"Deployment Block",{"type":46,"tag":54,"props":1657,"children":1658},{},[1659],{"type":51,"value":1660},"Define deployment instances (minimum 1, maximum 20 per Stack):",{"type":46,"tag":184,"props":1662,"children":1664},{"className":334,"code":1663,"language":336,"meta":192,"style":192},"deployment \"production\" {\n  inputs = {\n    aws_region     = \"us-west-1\"\n    instance_count = 3\n    role_arn       = local.role_arn\n    identity_token = identity_token.aws.jwt\n  }\n}\n\n# Create multiple deployments for different environments\ndeployment \"development\" {\n  inputs = {\n    aws_region     = \"us-east-1\"\n    instance_count = 1\n    name_suffix    = \"dev\"\n    role_arn       = local.role_arn\n    identity_token = identity_token.aws.jwt\n  }\n}\n",[1665],{"type":46,"tag":133,"props":1666,"children":1667},{"__ignoreMap":192},[1668,1675,1682,1690,1698,1706,1714,1721,1728,1735,1743,1751,1758,1766,1774,1782,1789,1797,1805],{"type":46,"tag":342,"props":1669,"children":1670},{"class":344,"line":345},[1671],{"type":46,"tag":342,"props":1672,"children":1673},{},[1674],{"type":51,"value":1607},{"type":46,"tag":342,"props":1676,"children":1677},{"class":344,"line":354},[1678],{"type":46,"tag":342,"props":1679,"children":1680},{},[1681],{"type":51,"value":951},{"type":46,"tag":342,"props":1683,"children":1684},{"class":344,"line":363},[1685],{"type":46,"tag":342,"props":1686,"children":1687},{},[1688],{"type":51,"value":1689},"    aws_region     = \"us-west-1\"\n",{"type":46,"tag":342,"props":1691,"children":1692},{"class":344,"line":372},[1693],{"type":46,"tag":342,"props":1694,"children":1695},{},[1696],{"type":51,"value":1697},"    instance_count = 3\n",{"type":46,"tag":342,"props":1699,"children":1700},{"class":344,"line":381},[1701],{"type":46,"tag":342,"props":1702,"children":1703},{},[1704],{"type":51,"value":1705},"    role_arn       = local.role_arn\n",{"type":46,"tag":342,"props":1707,"children":1708},{"class":344,"line":390},[1709],{"type":46,"tag":342,"props":1710,"children":1711},{},[1712],{"type":51,"value":1713},"    identity_token = identity_token.aws.jwt\n",{"type":46,"tag":342,"props":1715,"children":1716},{"class":344,"line":400},[1717],{"type":46,"tag":342,"props":1718,"children":1719},{},[1720],{"type":51,"value":562},{"type":46,"tag":342,"props":1722,"children":1723},{"class":344,"line":409},[1724],{"type":46,"tag":342,"props":1725,"children":1726},{},[1727],{"type":51,"value":387},{"type":46,"tag":342,"props":1729,"children":1730},{"class":344,"line":417},[1731],{"type":46,"tag":342,"props":1732,"children":1733},{"emptyLinePlaceholder":394},[1734],{"type":51,"value":397},{"type":46,"tag":342,"props":1736,"children":1737},{"class":344,"line":426},[1738],{"type":46,"tag":342,"props":1739,"children":1740},{},[1741],{"type":51,"value":1742},"# Create multiple deployments for different environments\n",{"type":46,"tag":342,"props":1744,"children":1745},{"class":344,"line":435},[1746],{"type":46,"tag":342,"props":1747,"children":1748},{},[1749],{"type":51,"value":1750},"deployment \"development\" {\n",{"type":46,"tag":342,"props":1752,"children":1753},{"class":344,"line":443},[1754],{"type":46,"tag":342,"props":1755,"children":1756},{},[1757],{"type":51,"value":951},{"type":46,"tag":342,"props":1759,"children":1760},{"class":344,"line":451},[1761],{"type":46,"tag":342,"props":1762,"children":1763},{},[1764],{"type":51,"value":1765},"    aws_region     = \"us-east-1\"\n",{"type":46,"tag":342,"props":1767,"children":1768},{"class":344,"line":460},[1769],{"type":46,"tag":342,"props":1770,"children":1771},{},[1772],{"type":51,"value":1773},"    instance_count = 1\n",{"type":46,"tag":342,"props":1775,"children":1776},{"class":344,"line":469},[1777],{"type":46,"tag":342,"props":1778,"children":1779},{},[1780],{"type":51,"value":1781},"    name_suffix    = \"dev\"\n",{"type":46,"tag":342,"props":1783,"children":1784},{"class":344,"line":478},[1785],{"type":46,"tag":342,"props":1786,"children":1787},{},[1788],{"type":51,"value":1705},{"type":46,"tag":342,"props":1790,"children":1792},{"class":344,"line":1791},17,[1793],{"type":46,"tag":342,"props":1794,"children":1795},{},[1796],{"type":51,"value":1713},{"type":46,"tag":342,"props":1798,"children":1800},{"class":344,"line":1799},18,[1801],{"type":46,"tag":342,"props":1802,"children":1803},{},[1804],{"type":51,"value":562},{"type":46,"tag":342,"props":1806,"children":1808},{"class":344,"line":1807},19,[1809],{"type":46,"tag":342,"props":1810,"children":1811},{},[1812],{"type":51,"value":387},{"type":46,"tag":54,"props":1814,"children":1815},{},[1816,1821,1823,1829,1831,1836],{"type":46,"tag":70,"props":1817,"children":1818},{},[1819],{"type":51,"value":1820},"To destroy a deployment",{"type":51,"value":1822},": Set ",{"type":46,"tag":133,"props":1824,"children":1826},{"className":1825},[],[1827],{"type":51,"value":1828},"destroy = true",{"type":51,"value":1830},", upload configuration, approve destroy run, then remove the deployment block. See ",{"type":46,"tag":133,"props":1832,"children":1834},{"className":1833},[],[1835],{"type":51,"value":1647},{"type":51,"value":1649},{"type":46,"tag":177,"props":1838,"children":1840},{"id":1839},"deployment-group-block",[1841],{"type":51,"value":1842},"Deployment Group Block",{"type":46,"tag":54,"props":1844,"children":1845},{},[1846,1848,1854],{"type":51,"value":1847},"Group deployments together for shared settings (HCP Terraform Premium tier feature). Free\u002Fstandard tiers use default groups named ",{"type":46,"tag":133,"props":1849,"children":1851},{"className":1850},[],[1852],{"type":51,"value":1853},"{deployment-name}_default",{"type":51,"value":1855},".",{"type":46,"tag":184,"props":1857,"children":1859},{"className":334,"code":1858,"language":336,"meta":192,"style":192},"deployment_group \"canary\" {\n  auto_approve_checks = [deployment_auto_approve.safe_changes]\n}\n\ndeployment \"dev\" {\n  inputs = { \u002F* ... *\u002F }\n  deployment_group = deployment_group.canary\n}\n",[1860],{"type":46,"tag":133,"props":1861,"children":1862},{"__ignoreMap":192},[1863,1871,1879,1886,1893,1901,1909,1917],{"type":46,"tag":342,"props":1864,"children":1865},{"class":344,"line":345},[1866],{"type":46,"tag":342,"props":1867,"children":1868},{},[1869],{"type":51,"value":1870},"deployment_group \"canary\" {\n",{"type":46,"tag":342,"props":1872,"children":1873},{"class":344,"line":354},[1874],{"type":46,"tag":342,"props":1875,"children":1876},{},[1877],{"type":51,"value":1878},"  auto_approve_checks = [deployment_auto_approve.safe_changes]\n",{"type":46,"tag":342,"props":1880,"children":1881},{"class":344,"line":363},[1882],{"type":46,"tag":342,"props":1883,"children":1884},{},[1885],{"type":51,"value":387},{"type":46,"tag":342,"props":1887,"children":1888},{"class":344,"line":372},[1889],{"type":46,"tag":342,"props":1890,"children":1891},{"emptyLinePlaceholder":394},[1892],{"type":51,"value":397},{"type":46,"tag":342,"props":1894,"children":1895},{"class":344,"line":381},[1896],{"type":46,"tag":342,"props":1897,"children":1898},{},[1899],{"type":51,"value":1900},"deployment \"dev\" {\n",{"type":46,"tag":342,"props":1902,"children":1903},{"class":344,"line":390},[1904],{"type":46,"tag":342,"props":1905,"children":1906},{},[1907],{"type":51,"value":1908},"  inputs = { \u002F* ... *\u002F }\n",{"type":46,"tag":342,"props":1910,"children":1911},{"class":344,"line":400},[1912],{"type":46,"tag":342,"props":1913,"children":1914},{},[1915],{"type":51,"value":1916},"  deployment_group = deployment_group.canary\n",{"type":46,"tag":342,"props":1918,"children":1919},{"class":344,"line":409},[1920],{"type":46,"tag":342,"props":1921,"children":1922},{},[1923],{"type":51,"value":387},{"type":46,"tag":54,"props":1925,"children":1926},{},[1927,1929,1934],{"type":51,"value":1928},"Multiple deployments can reference the same group. See ",{"type":46,"tag":133,"props":1930,"children":1932},{"className":1931},[],[1933],{"type":51,"value":1647},{"type":51,"value":1649},{"type":46,"tag":177,"props":1936,"children":1938},{"id":1937},"deployment-auto-approve-block",[1939],{"type":51,"value":1940},"Deployment Auto-Approve Block",{"type":46,"tag":54,"props":1942,"children":1943},{},[1944],{"type":51,"value":1945},"Define rules to automatically approve deployment plans (HCP Terraform Premium tier feature):",{"type":46,"tag":184,"props":1947,"children":1949},{"className":334,"code":1948,"language":336,"meta":192,"style":192},"deployment_auto_approve \"safe_changes\" {\n  deployment_group = deployment_group.canary\n\n  check {\n    condition = context.plan.changes.remove == 0\n    reason    = \"Cannot auto-approve plans with resource deletions\"\n  }\n}\n",[1950],{"type":46,"tag":133,"props":1951,"children":1952},{"__ignoreMap":192},[1953,1961,1968,1975,1983,1991,1999,2006],{"type":46,"tag":342,"props":1954,"children":1955},{"class":344,"line":345},[1956],{"type":46,"tag":342,"props":1957,"children":1958},{},[1959],{"type":51,"value":1960},"deployment_auto_approve \"safe_changes\" {\n",{"type":46,"tag":342,"props":1962,"children":1963},{"class":344,"line":354},[1964],{"type":46,"tag":342,"props":1965,"children":1966},{},[1967],{"type":51,"value":1916},{"type":46,"tag":342,"props":1969,"children":1970},{"class":344,"line":363},[1971],{"type":46,"tag":342,"props":1972,"children":1973},{"emptyLinePlaceholder":394},[1974],{"type":51,"value":397},{"type":46,"tag":342,"props":1976,"children":1977},{"class":344,"line":372},[1978],{"type":46,"tag":342,"props":1979,"children":1980},{},[1981],{"type":51,"value":1982},"  check {\n",{"type":46,"tag":342,"props":1984,"children":1985},{"class":344,"line":381},[1986],{"type":46,"tag":342,"props":1987,"children":1988},{},[1989],{"type":51,"value":1990},"    condition = context.plan.changes.remove == 0\n",{"type":46,"tag":342,"props":1992,"children":1993},{"class":344,"line":390},[1994],{"type":46,"tag":342,"props":1995,"children":1996},{},[1997],{"type":51,"value":1998},"    reason    = \"Cannot auto-approve plans with resource deletions\"\n",{"type":46,"tag":342,"props":2000,"children":2001},{"class":344,"line":400},[2002],{"type":46,"tag":342,"props":2003,"children":2004},{},[2005],{"type":51,"value":562},{"type":46,"tag":342,"props":2007,"children":2008},{"class":344,"line":409},[2009],{"type":46,"tag":342,"props":2010,"children":2011},{},[2012],{"type":51,"value":387},{"type":46,"tag":54,"props":2014,"children":2015},{},[2016,2021,2022,2028,2030,2036,2037],{"type":46,"tag":70,"props":2017,"children":2018},{},[2019],{"type":51,"value":2020},"Available context variables",{"type":51,"value":131},{"type":46,"tag":133,"props":2023,"children":2025},{"className":2024},[],[2026],{"type":51,"value":2027},"context.plan.applyable",{"type":51,"value":2029},", ",{"type":46,"tag":133,"props":2031,"children":2033},{"className":2032},[],[2034],{"type":51,"value":2035},"context.plan.changes.add\u002Fchange\u002Fremove\u002Ftotal",{"type":51,"value":2029},{"type":46,"tag":133,"props":2038,"children":2040},{"className":2039},[],[2041],{"type":51,"value":2042},"context.success",{"type":46,"tag":54,"props":2044,"children":2045},{},[2046,2051,2053,2059,2061,2067,2068,2074],{"type":46,"tag":70,"props":2047,"children":2048},{},[2049],{"type":51,"value":2050},"Note:",{"type":51,"value":2052}," ",{"type":46,"tag":133,"props":2054,"children":2056},{"className":2055},[],[2057],{"type":51,"value":2058},"orchestrate",{"type":51,"value":2060}," blocks are deprecated. Use ",{"type":46,"tag":133,"props":2062,"children":2064},{"className":2063},[],[2065],{"type":51,"value":2066},"deployment_group",{"type":51,"value":271},{"type":46,"tag":133,"props":2069,"children":2071},{"className":2070},[],[2072],{"type":51,"value":2073},"deployment_auto_approve",{"type":51,"value":2075}," instead.",{"type":46,"tag":54,"props":2077,"children":2078},{},[2079,2080,2085],{"type":51,"value":1016},{"type":46,"tag":133,"props":2081,"children":2083},{"className":2082},[],[2084],{"type":51,"value":1647},{"type":51,"value":2086}," for all context variables and patterns.",{"type":46,"tag":177,"props":2088,"children":2090},{"id":2089},"publish-output-and-upstream-input-blocks",[2091],{"type":51,"value":2092},"Publish Output and Upstream Input Blocks",{"type":46,"tag":54,"props":2094,"children":2095},{},[2096],{"type":51,"value":2097},"Link Stacks together by publishing outputs from one Stack and consuming them in another:",{"type":46,"tag":184,"props":2099,"children":2101},{"className":334,"code":2100,"language":336,"meta":192,"style":192},"# In network Stack - publish outputs\npublish_output \"vpc_id_network\" {\n  type  = string\n  value = deployment.network.vpc_id\n}\n\n# In application Stack - consume outputs\nupstream_input \"network_stack\" {\n  type   = \"stack\"\n  source = \"app.terraform.io\u002Fmy-org\u002Fmy-project\u002Fnetworking-stack\"\n}\n\ndeployment \"app\" {\n  inputs = {\n    vpc_id = upstream_input.network_stack.vpc_id_network\n  }\n}\n",[2102],{"type":46,"tag":133,"props":2103,"children":2104},{"__ignoreMap":192},[2105,2113,2121,2129,2137,2144,2151,2159,2167,2175,2183,2190,2197,2205,2212,2220,2227],{"type":46,"tag":342,"props":2106,"children":2107},{"class":344,"line":345},[2108],{"type":46,"tag":342,"props":2109,"children":2110},{},[2111],{"type":51,"value":2112},"# In network Stack - publish outputs\n",{"type":46,"tag":342,"props":2114,"children":2115},{"class":344,"line":354},[2116],{"type":46,"tag":342,"props":2117,"children":2118},{},[2119],{"type":51,"value":2120},"publish_output \"vpc_id_network\" {\n",{"type":46,"tag":342,"props":2122,"children":2123},{"class":344,"line":363},[2124],{"type":46,"tag":342,"props":2125,"children":2126},{},[2127],{"type":51,"value":2128},"  type  = string\n",{"type":46,"tag":342,"props":2130,"children":2131},{"class":344,"line":372},[2132],{"type":46,"tag":342,"props":2133,"children":2134},{},[2135],{"type":51,"value":2136},"  value = deployment.network.vpc_id\n",{"type":46,"tag":342,"props":2138,"children":2139},{"class":344,"line":381},[2140],{"type":46,"tag":342,"props":2141,"children":2142},{},[2143],{"type":51,"value":387},{"type":46,"tag":342,"props":2145,"children":2146},{"class":344,"line":390},[2147],{"type":46,"tag":342,"props":2148,"children":2149},{"emptyLinePlaceholder":394},[2150],{"type":51,"value":397},{"type":46,"tag":342,"props":2152,"children":2153},{"class":344,"line":400},[2154],{"type":46,"tag":342,"props":2155,"children":2156},{},[2157],{"type":51,"value":2158},"# In application Stack - consume outputs\n",{"type":46,"tag":342,"props":2160,"children":2161},{"class":344,"line":409},[2162],{"type":46,"tag":342,"props":2163,"children":2164},{},[2165],{"type":51,"value":2166},"upstream_input \"network_stack\" {\n",{"type":46,"tag":342,"props":2168,"children":2169},{"class":344,"line":417},[2170],{"type":46,"tag":342,"props":2171,"children":2172},{},[2173],{"type":51,"value":2174},"  type   = \"stack\"\n",{"type":46,"tag":342,"props":2176,"children":2177},{"class":344,"line":426},[2178],{"type":46,"tag":342,"props":2179,"children":2180},{},[2181],{"type":51,"value":2182},"  source = \"app.terraform.io\u002Fmy-org\u002Fmy-project\u002Fnetworking-stack\"\n",{"type":46,"tag":342,"props":2184,"children":2185},{"class":344,"line":435},[2186],{"type":46,"tag":342,"props":2187,"children":2188},{},[2189],{"type":51,"value":387},{"type":46,"tag":342,"props":2191,"children":2192},{"class":344,"line":443},[2193],{"type":46,"tag":342,"props":2194,"children":2195},{"emptyLinePlaceholder":394},[2196],{"type":51,"value":397},{"type":46,"tag":342,"props":2198,"children":2199},{"class":344,"line":451},[2200],{"type":46,"tag":342,"props":2201,"children":2202},{},[2203],{"type":51,"value":2204},"deployment \"app\" {\n",{"type":46,"tag":342,"props":2206,"children":2207},{"class":344,"line":460},[2208],{"type":46,"tag":342,"props":2209,"children":2210},{},[2211],{"type":51,"value":951},{"type":46,"tag":342,"props":2213,"children":2214},{"class":344,"line":469},[2215],{"type":46,"tag":342,"props":2216,"children":2217},{},[2218],{"type":51,"value":2219},"    vpc_id = upstream_input.network_stack.vpc_id_network\n",{"type":46,"tag":342,"props":2221,"children":2222},{"class":344,"line":478},[2223],{"type":46,"tag":342,"props":2224,"children":2225},{},[2226],{"type":51,"value":562},{"type":46,"tag":342,"props":2228,"children":2229},{"class":344,"line":1791},[2230],{"type":46,"tag":342,"props":2231,"children":2232},{},[2233],{"type":51,"value":387},{"type":46,"tag":54,"props":2235,"children":2236},{},[2237,2238,2244],{"type":51,"value":1016},{"type":46,"tag":133,"props":2239,"children":2241},{"className":2240},[],[2242],{"type":51,"value":2243},"references\u002Flinked-stacks.md",{"type":51,"value":2245}," for complete documentation and examples.",{"type":46,"tag":60,"props":2247,"children":2249},{"id":2248},"terraform-stacks-cli",[2250],{"type":51,"value":2251},"Terraform Stacks CLI",{"type":46,"tag":54,"props":2253,"children":2254},{},[2255,2259],{"type":46,"tag":70,"props":2256,"children":2257},{},[2258],{"type":51,"value":202},{"type":51,"value":2260},": Terraform Stacks is Generally Available (GA) as of Terraform CLI v1.13+. Stacks now count toward Resources Under Management (RUM) for HCP Terraform billing.",{"type":46,"tag":177,"props":2262,"children":2264},{"id":2263},"initialize-and-validate",[2265],{"type":51,"value":2266},"Initialize and Validate",{"type":46,"tag":184,"props":2268,"children":2272},{"className":2269,"code":2270,"language":2271,"meta":192,"style":192},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","terraform stacks init              # Download providers, modules, generate lock file\nterraform stacks providers-lock    # Regenerate lock file (add platforms if needed)\nterraform stacks validate          # Check syntax without uploading\n","bash",[2273],{"type":46,"tag":133,"props":2274,"children":2275},{"__ignoreMap":192},[2276,2301,2322],{"type":46,"tag":342,"props":2277,"children":2278},{"class":344,"line":345},[2279,2284,2290,2295],{"type":46,"tag":342,"props":2280,"children":2282},{"style":2281},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[2283],{"type":51,"value":21},{"type":46,"tag":342,"props":2285,"children":2287},{"style":2286},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[2288],{"type":51,"value":2289}," stacks",{"type":46,"tag":342,"props":2291,"children":2292},{"style":2286},[2293],{"type":51,"value":2294}," init",{"type":46,"tag":342,"props":2296,"children":2298},{"style":2297},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[2299],{"type":51,"value":2300},"              # Download providers, modules, generate lock file\n",{"type":46,"tag":342,"props":2302,"children":2303},{"class":344,"line":354},[2304,2308,2312,2317],{"type":46,"tag":342,"props":2305,"children":2306},{"style":2281},[2307],{"type":51,"value":21},{"type":46,"tag":342,"props":2309,"children":2310},{"style":2286},[2311],{"type":51,"value":2289},{"type":46,"tag":342,"props":2313,"children":2314},{"style":2286},[2315],{"type":51,"value":2316}," providers-lock",{"type":46,"tag":342,"props":2318,"children":2319},{"style":2297},[2320],{"type":51,"value":2321},"    # Regenerate lock file (add platforms if needed)\n",{"type":46,"tag":342,"props":2323,"children":2324},{"class":344,"line":363},[2325,2329,2333,2338],{"type":46,"tag":342,"props":2326,"children":2327},{"style":2281},[2328],{"type":51,"value":21},{"type":46,"tag":342,"props":2330,"children":2331},{"style":2286},[2332],{"type":51,"value":2289},{"type":46,"tag":342,"props":2334,"children":2335},{"style":2286},[2336],{"type":51,"value":2337}," validate",{"type":46,"tag":342,"props":2339,"children":2340},{"style":2297},[2341],{"type":51,"value":2342},"          # Check syntax without uploading\n",{"type":46,"tag":177,"props":2344,"children":2346},{"id":2345},"deployment-workflow",[2347],{"type":51,"value":2348},"Deployment Workflow",{"type":46,"tag":54,"props":2350,"children":2351},{},[2352,2356,2358,2364,2365,2371],{"type":46,"tag":70,"props":2353,"children":2354},{},[2355],{"type":51,"value":491},{"type":51,"value":2357},": No ",{"type":46,"tag":133,"props":2359,"children":2361},{"className":2360},[],[2362],{"type":51,"value":2363},"plan",{"type":51,"value":1048},{"type":46,"tag":133,"props":2366,"children":2368},{"className":2367},[],[2369],{"type":51,"value":2370},"apply",{"type":51,"value":2372}," commands. Upload configuration triggers deployment runs automatically.",{"type":46,"tag":184,"props":2374,"children":2376},{"className":2269,"code":2375,"language":2271,"meta":192,"style":192},"# 1. Upload configuration (triggers deployment runs)\nterraform stacks configuration upload\n\n# 2. Monitor deployments\nterraform stacks deployment-run list                          # List runs (non-interactive)\nterraform stacks deployment-group watch -deployment-group=... # Stream status updates\n\n# 3. Approve deployments (if auto-approve not configured)\nterraform stacks deployment-run approve-all-plans -deployment-run-id=...\nterraform stacks deployment-group approve-all-plans -deployment-group=...\nterraform stacks deployment-run cancel -deployment-run-id=...  # Cancel if needed\n",[2377],{"type":46,"tag":133,"props":2378,"children":2379},{"__ignoreMap":192},[2380,2388,2409,2416,2424,2450,2481,2488,2496,2521,2545],{"type":46,"tag":342,"props":2381,"children":2382},{"class":344,"line":345},[2383],{"type":46,"tag":342,"props":2384,"children":2385},{"style":2297},[2386],{"type":51,"value":2387},"# 1. Upload configuration (triggers deployment runs)\n",{"type":46,"tag":342,"props":2389,"children":2390},{"class":344,"line":354},[2391,2395,2399,2404],{"type":46,"tag":342,"props":2392,"children":2393},{"style":2281},[2394],{"type":51,"value":21},{"type":46,"tag":342,"props":2396,"children":2397},{"style":2286},[2398],{"type":51,"value":2289},{"type":46,"tag":342,"props":2400,"children":2401},{"style":2286},[2402],{"type":51,"value":2403}," configuration",{"type":46,"tag":342,"props":2405,"children":2406},{"style":2286},[2407],{"type":51,"value":2408}," upload\n",{"type":46,"tag":342,"props":2410,"children":2411},{"class":344,"line":363},[2412],{"type":46,"tag":342,"props":2413,"children":2414},{"emptyLinePlaceholder":394},[2415],{"type":51,"value":397},{"type":46,"tag":342,"props":2417,"children":2418},{"class":344,"line":372},[2419],{"type":46,"tag":342,"props":2420,"children":2421},{"style":2297},[2422],{"type":51,"value":2423},"# 2. Monitor deployments\n",{"type":46,"tag":342,"props":2425,"children":2426},{"class":344,"line":381},[2427,2431,2435,2440,2445],{"type":46,"tag":342,"props":2428,"children":2429},{"style":2281},[2430],{"type":51,"value":21},{"type":46,"tag":342,"props":2432,"children":2433},{"style":2286},[2434],{"type":51,"value":2289},{"type":46,"tag":342,"props":2436,"children":2437},{"style":2286},[2438],{"type":51,"value":2439}," deployment-run",{"type":46,"tag":342,"props":2441,"children":2442},{"style":2286},[2443],{"type":51,"value":2444}," list",{"type":46,"tag":342,"props":2446,"children":2447},{"style":2297},[2448],{"type":51,"value":2449},"                          # List runs (non-interactive)\n",{"type":46,"tag":342,"props":2451,"children":2452},{"class":344,"line":390},[2453,2457,2461,2466,2471,2476],{"type":46,"tag":342,"props":2454,"children":2455},{"style":2281},[2456],{"type":51,"value":21},{"type":46,"tag":342,"props":2458,"children":2459},{"style":2286},[2460],{"type":51,"value":2289},{"type":46,"tag":342,"props":2462,"children":2463},{"style":2286},[2464],{"type":51,"value":2465}," deployment-group",{"type":46,"tag":342,"props":2467,"children":2468},{"style":2286},[2469],{"type":51,"value":2470}," watch",{"type":46,"tag":342,"props":2472,"children":2473},{"style":2286},[2474],{"type":51,"value":2475}," -deployment-group=...",{"type":46,"tag":342,"props":2477,"children":2478},{"style":2297},[2479],{"type":51,"value":2480}," # Stream status updates\n",{"type":46,"tag":342,"props":2482,"children":2483},{"class":344,"line":400},[2484],{"type":46,"tag":342,"props":2485,"children":2486},{"emptyLinePlaceholder":394},[2487],{"type":51,"value":397},{"type":46,"tag":342,"props":2489,"children":2490},{"class":344,"line":409},[2491],{"type":46,"tag":342,"props":2492,"children":2493},{"style":2297},[2494],{"type":51,"value":2495},"# 3. Approve deployments (if auto-approve not configured)\n",{"type":46,"tag":342,"props":2497,"children":2498},{"class":344,"line":417},[2499,2503,2507,2511,2516],{"type":46,"tag":342,"props":2500,"children":2501},{"style":2281},[2502],{"type":51,"value":21},{"type":46,"tag":342,"props":2504,"children":2505},{"style":2286},[2506],{"type":51,"value":2289},{"type":46,"tag":342,"props":2508,"children":2509},{"style":2286},[2510],{"type":51,"value":2439},{"type":46,"tag":342,"props":2512,"children":2513},{"style":2286},[2514],{"type":51,"value":2515}," approve-all-plans",{"type":46,"tag":342,"props":2517,"children":2518},{"style":2286},[2519],{"type":51,"value":2520}," -deployment-run-id=...\n",{"type":46,"tag":342,"props":2522,"children":2523},{"class":344,"line":426},[2524,2528,2532,2536,2540],{"type":46,"tag":342,"props":2525,"children":2526},{"style":2281},[2527],{"type":51,"value":21},{"type":46,"tag":342,"props":2529,"children":2530},{"style":2286},[2531],{"type":51,"value":2289},{"type":46,"tag":342,"props":2533,"children":2534},{"style":2286},[2535],{"type":51,"value":2465},{"type":46,"tag":342,"props":2537,"children":2538},{"style":2286},[2539],{"type":51,"value":2515},{"type":46,"tag":342,"props":2541,"children":2542},{"style":2286},[2543],{"type":51,"value":2544}," -deployment-group=...\n",{"type":46,"tag":342,"props":2546,"children":2547},{"class":344,"line":435},[2548,2552,2556,2560,2565,2570],{"type":46,"tag":342,"props":2549,"children":2550},{"style":2281},[2551],{"type":51,"value":21},{"type":46,"tag":342,"props":2553,"children":2554},{"style":2286},[2555],{"type":51,"value":2289},{"type":46,"tag":342,"props":2557,"children":2558},{"style":2286},[2559],{"type":51,"value":2439},{"type":46,"tag":342,"props":2561,"children":2562},{"style":2286},[2563],{"type":51,"value":2564}," cancel",{"type":46,"tag":342,"props":2566,"children":2567},{"style":2286},[2568],{"type":51,"value":2569}," -deployment-run-id=...",{"type":46,"tag":342,"props":2571,"children":2572},{"style":2297},[2573],{"type":51,"value":2574},"  # Cancel if needed\n",{"type":46,"tag":177,"props":2576,"children":2578},{"id":2577},"configuration-management",[2579],{"type":51,"value":2580},"Configuration Management",{"type":46,"tag":184,"props":2582,"children":2584},{"className":2269,"code":2583,"language":2271,"meta":192,"style":192},"terraform stacks configuration list                    # List configuration versions\nterraform stacks configuration fetch -configuration-id=...  # Download configuration\nterraform stacks configuration watch                   # Monitor upload status\n",[2585],{"type":46,"tag":133,"props":2586,"children":2587},{"__ignoreMap":192},[2588,2612,2642],{"type":46,"tag":342,"props":2589,"children":2590},{"class":344,"line":345},[2591,2595,2599,2603,2607],{"type":46,"tag":342,"props":2592,"children":2593},{"style":2281},[2594],{"type":51,"value":21},{"type":46,"tag":342,"props":2596,"children":2597},{"style":2286},[2598],{"type":51,"value":2289},{"type":46,"tag":342,"props":2600,"children":2601},{"style":2286},[2602],{"type":51,"value":2403},{"type":46,"tag":342,"props":2604,"children":2605},{"style":2286},[2606],{"type":51,"value":2444},{"type":46,"tag":342,"props":2608,"children":2609},{"style":2297},[2610],{"type":51,"value":2611},"                    # List configuration versions\n",{"type":46,"tag":342,"props":2613,"children":2614},{"class":344,"line":354},[2615,2619,2623,2627,2632,2637],{"type":46,"tag":342,"props":2616,"children":2617},{"style":2281},[2618],{"type":51,"value":21},{"type":46,"tag":342,"props":2620,"children":2621},{"style":2286},[2622],{"type":51,"value":2289},{"type":46,"tag":342,"props":2624,"children":2625},{"style":2286},[2626],{"type":51,"value":2403},{"type":46,"tag":342,"props":2628,"children":2629},{"style":2286},[2630],{"type":51,"value":2631}," fetch",{"type":46,"tag":342,"props":2633,"children":2634},{"style":2286},[2635],{"type":51,"value":2636}," -configuration-id=...",{"type":46,"tag":342,"props":2638,"children":2639},{"style":2297},[2640],{"type":51,"value":2641},"  # Download configuration\n",{"type":46,"tag":342,"props":2643,"children":2644},{"class":344,"line":363},[2645,2649,2653,2657,2661],{"type":46,"tag":342,"props":2646,"children":2647},{"style":2281},[2648],{"type":51,"value":21},{"type":46,"tag":342,"props":2650,"children":2651},{"style":2286},[2652],{"type":51,"value":2289},{"type":46,"tag":342,"props":2654,"children":2655},{"style":2286},[2656],{"type":51,"value":2403},{"type":46,"tag":342,"props":2658,"children":2659},{"style":2286},[2660],{"type":51,"value":2470},{"type":46,"tag":342,"props":2662,"children":2663},{"style":2297},[2664],{"type":51,"value":2665},"                   # Monitor upload status\n",{"type":46,"tag":177,"props":2667,"children":2669},{"id":2668},"other-commands",[2670],{"type":51,"value":2671},"Other Commands",{"type":46,"tag":184,"props":2673,"children":2675},{"className":2269,"code":2674,"language":2271,"meta":192,"style":192},"terraform stacks create              # Create new Stack (interactive)\nterraform stacks fmt                 # Format Stack files\nterraform stacks list                # Show all Stacks\nterraform stacks version             # Display version\nterraform stacks deployment-group rerun -deployment-group=...  # Rerun deployment\n",[2676],{"type":46,"tag":133,"props":2677,"children":2678},{"__ignoreMap":192},[2679,2700,2721,2741,2762],{"type":46,"tag":342,"props":2680,"children":2681},{"class":344,"line":345},[2682,2686,2690,2695],{"type":46,"tag":342,"props":2683,"children":2684},{"style":2281},[2685],{"type":51,"value":21},{"type":46,"tag":342,"props":2687,"children":2688},{"style":2286},[2689],{"type":51,"value":2289},{"type":46,"tag":342,"props":2691,"children":2692},{"style":2286},[2693],{"type":51,"value":2694}," create",{"type":46,"tag":342,"props":2696,"children":2697},{"style":2297},[2698],{"type":51,"value":2699},"              # Create new Stack (interactive)\n",{"type":46,"tag":342,"props":2701,"children":2702},{"class":344,"line":354},[2703,2707,2711,2716],{"type":46,"tag":342,"props":2704,"children":2705},{"style":2281},[2706],{"type":51,"value":21},{"type":46,"tag":342,"props":2708,"children":2709},{"style":2286},[2710],{"type":51,"value":2289},{"type":46,"tag":342,"props":2712,"children":2713},{"style":2286},[2714],{"type":51,"value":2715}," fmt",{"type":46,"tag":342,"props":2717,"children":2718},{"style":2297},[2719],{"type":51,"value":2720},"                 # Format Stack files\n",{"type":46,"tag":342,"props":2722,"children":2723},{"class":344,"line":363},[2724,2728,2732,2736],{"type":46,"tag":342,"props":2725,"children":2726},{"style":2281},[2727],{"type":51,"value":21},{"type":46,"tag":342,"props":2729,"children":2730},{"style":2286},[2731],{"type":51,"value":2289},{"type":46,"tag":342,"props":2733,"children":2734},{"style":2286},[2735],{"type":51,"value":2444},{"type":46,"tag":342,"props":2737,"children":2738},{"style":2297},[2739],{"type":51,"value":2740},"                # Show all Stacks\n",{"type":46,"tag":342,"props":2742,"children":2743},{"class":344,"line":372},[2744,2748,2752,2757],{"type":46,"tag":342,"props":2745,"children":2746},{"style":2281},[2747],{"type":51,"value":21},{"type":46,"tag":342,"props":2749,"children":2750},{"style":2286},[2751],{"type":51,"value":2289},{"type":46,"tag":342,"props":2753,"children":2754},{"style":2286},[2755],{"type":51,"value":2756}," version",{"type":46,"tag":342,"props":2758,"children":2759},{"style":2297},[2760],{"type":51,"value":2761},"             # Display version\n",{"type":46,"tag":342,"props":2763,"children":2764},{"class":344,"line":381},[2765,2769,2773,2777,2782,2786],{"type":46,"tag":342,"props":2766,"children":2767},{"style":2281},[2768],{"type":51,"value":21},{"type":46,"tag":342,"props":2770,"children":2771},{"style":2286},[2772],{"type":51,"value":2289},{"type":46,"tag":342,"props":2774,"children":2775},{"style":2286},[2776],{"type":51,"value":2465},{"type":46,"tag":342,"props":2778,"children":2779},{"style":2286},[2780],{"type":51,"value":2781}," rerun",{"type":46,"tag":342,"props":2783,"children":2784},{"style":2286},[2785],{"type":51,"value":2475},{"type":46,"tag":342,"props":2787,"children":2788},{"style":2297},[2789],{"type":51,"value":2790},"  # Rerun deployment\n",{"type":46,"tag":60,"props":2792,"children":2794},{"id":2793},"monitoring-deployments-with-hcp-terraform-api",[2795],{"type":51,"value":2796},"Monitoring Deployments with HCP Terraform API",{"type":46,"tag":54,"props":2798,"children":2799},{},[2800],{"type":51,"value":2801},"For programmatic monitoring in automation, CI\u002FCD, or non-interactive environments (like AI agents), use the HCP Terraform API instead of CLI watch commands. The API provides endpoints for:",{"type":46,"tag":118,"props":2803,"children":2804},{},[2805,2810,2815,2820,2825,2830],{"type":46,"tag":122,"props":2806,"children":2807},{},[2808],{"type":51,"value":2809},"Configuration status and validation",{"type":46,"tag":122,"props":2811,"children":2812},{},[2813],{"type":51,"value":2814},"Deployment group summaries",{"type":46,"tag":122,"props":2816,"children":2817},{},[2818],{"type":51,"value":2819},"Deployment run status",{"type":46,"tag":122,"props":2821,"children":2822},{},[2823],{"type":51,"value":2824},"Deployment step details (plan\u002Fapply)",{"type":46,"tag":122,"props":2826,"children":2827},{},[2828],{"type":51,"value":2829},"Error diagnostics with file locations and code snippets",{"type":46,"tag":122,"props":2831,"children":2832},{},[2833],{"type":51,"value":2834},"Stack outputs via artifacts endpoint",{"type":46,"tag":54,"props":2836,"children":2837},{},[2838],{"type":46,"tag":70,"props":2839,"children":2840},{},[2841],{"type":51,"value":2842},"Key points:",{"type":46,"tag":118,"props":2844,"children":2845},{},[2846,2851,2862,2875],{"type":46,"tag":122,"props":2847,"children":2848},{},[2849],{"type":51,"value":2850},"CLI watch commands stream indefinitely and don't work in automation",{"type":46,"tag":122,"props":2852,"children":2853},{},[2854,2856],{"type":51,"value":2855},"Use artifacts endpoint to retrieve Stack outputs: ",{"type":46,"tag":133,"props":2857,"children":2859},{"className":2858},[],[2860],{"type":51,"value":2861},"GET \u002Fapi\u002Fv2\u002Fstack-deployment-steps\u002F{step-id}\u002Fartifacts?name=apply-description",{"type":46,"tag":122,"props":2863,"children":2864},{},[2865,2867,2873],{"type":51,"value":2866},"Diagnostics endpoint requires ",{"type":46,"tag":133,"props":2868,"children":2870},{"className":2869},[],[2871],{"type":51,"value":2872},"stack_deployment_step_id",{"type":51,"value":2874}," query parameter",{"type":46,"tag":122,"props":2876,"children":2877},{},[2878,2880,2886],{"type":51,"value":2879},"Artifacts endpoint returns HTTP 307 redirect (use ",{"type":46,"tag":133,"props":2881,"children":2883},{"className":2882},[],[2884],{"type":51,"value":2885},"curl -L",{"type":51,"value":2887},")",{"type":46,"tag":54,"props":2889,"children":2890},{},[2891,2893,2899],{"type":51,"value":2892},"For complete API workflow, authentication, polling best practices, and example scripts, see ",{"type":46,"tag":133,"props":2894,"children":2896},{"className":2895},[],[2897],{"type":51,"value":2898},"references\u002Fapi-monitoring.md",{"type":51,"value":1855},{"type":46,"tag":60,"props":2901,"children":2903},{"id":2902},"common-patterns",[2904],{"type":51,"value":2905},"Common Patterns",{"type":46,"tag":54,"props":2907,"children":2908},{},[2909,2914,2916,2922],{"type":46,"tag":70,"props":2910,"children":2911},{},[2912],{"type":51,"value":2913},"Component Dependencies",{"type":51,"value":2915},": Dependencies are automatically inferred when one component references another's output (e.g., ",{"type":46,"tag":133,"props":2917,"children":2919},{"className":2918},[],[2920],{"type":51,"value":2921},"subnet_ids = component.vpc.private_subnet_ids",{"type":51,"value":2923},").",{"type":46,"tag":54,"props":2925,"children":2926},{},[2927,2932,2933,2938],{"type":46,"tag":70,"props":2928,"children":2929},{},[2930],{"type":51,"value":2931},"Multi-Region Deployment",{"type":51,"value":493},{"type":46,"tag":133,"props":2934,"children":2936},{"className":2935},[],[2937],{"type":51,"value":626},{"type":51,"value":2939}," on providers and components to deploy across multiple regions. Each region gets its own provider configuration and component instances.",{"type":46,"tag":54,"props":2941,"children":2942},{},[2943,2948],{"type":46,"tag":70,"props":2944,"children":2945},{},[2946],{"type":51,"value":2947},"Deferred Changes",{"type":51,"value":2949},": Stacks support deferred changes to handle dependencies where values are only known after apply. This enables complex multi-component deployments where some resources depend on runtime values from other components (cluster endpoints, generated passwords, etc.).",{"type":46,"tag":54,"props":2951,"children":2952},{},[2953,2955,2961],{"type":51,"value":2954},"For complete examples including multi-region deployments, component dependencies, deferred changes patterns, and linked Stacks, see ",{"type":46,"tag":133,"props":2956,"children":2958},{"className":2957},[],[2959],{"type":51,"value":2960},"references\u002Fexamples.md",{"type":51,"value":1855},{"type":46,"tag":60,"props":2963,"children":2965},{"id":2964},"best-practices",[2966],{"type":51,"value":2967},"Best Practices",{"type":46,"tag":613,"props":2969,"children":2970},{},[2971,2981,3019,3029,3039,3056,3066,3076],{"type":46,"tag":122,"props":2972,"children":2973},{},[2974,2979],{"type":46,"tag":70,"props":2975,"children":2976},{},[2977],{"type":51,"value":2978},"Component Granularity",{"type":51,"value":2980},": Create components for logical infrastructure units that share a lifecycle",{"type":46,"tag":122,"props":2982,"children":2983},{},[2984,2989,2991],{"type":46,"tag":70,"props":2985,"children":2986},{},[2987],{"type":51,"value":2988},"Module Compatibility",{"type":51,"value":2990},":\n",{"type":46,"tag":118,"props":2992,"children":2993},{},[2994,2999,3009,3014],{"type":46,"tag":122,"props":2995,"children":2996},{},[2997],{"type":51,"value":2998},"Modules used with Stacks cannot include provider blocks (configure providers in Stack configuration)",{"type":46,"tag":122,"props":3000,"children":3001},{},[3002,3007],{"type":46,"tag":70,"props":3003,"children":3004},{},[3005],{"type":51,"value":3006},"Test public registry modules",{"type":51,"value":3008}," before using in production Stacks - some modules may have compatibility issues",{"type":46,"tag":122,"props":3010,"children":3011},{},[3012],{"type":51,"value":3013},"Consider using raw resources for critical infrastructure if module compatibility is uncertain",{"type":46,"tag":122,"props":3015,"children":3016},{},[3017],{"type":51,"value":3018},"Example: Some terraform-aws-modules versions have been found to have compatibility issues with Stacks (e.g., ALB and ECS modules)",{"type":46,"tag":122,"props":3020,"children":3021},{},[3022,3027],{"type":46,"tag":70,"props":3023,"children":3024},{},[3025],{"type":51,"value":3026},"State Isolation",{"type":51,"value":3028},": Each deployment has its own isolated state",{"type":46,"tag":122,"props":3030,"children":3031},{},[3032,3037],{"type":46,"tag":70,"props":3033,"children":3034},{},[3035],{"type":51,"value":3036},"Input Variables",{"type":51,"value":3038},": Use variables for values that differ across deployments; use locals for shared values",{"type":46,"tag":122,"props":3040,"children":3041},{},[3042,3047,3049,3054],{"type":46,"tag":70,"props":3043,"children":3044},{},[3045],{"type":51,"value":3046},"Provider Lock Files",{"type":51,"value":3048},": Always generate and commit ",{"type":46,"tag":133,"props":3050,"children":3052},{"className":3051},[],[3053],{"type":51,"value":168},{"type":51,"value":3055}," to version control",{"type":46,"tag":122,"props":3057,"children":3058},{},[3059,3064],{"type":46,"tag":70,"props":3060,"children":3061},{},[3062],{"type":51,"value":3063},"Naming Conventions",{"type":51,"value":3065},": Use descriptive names for components and deployments",{"type":46,"tag":122,"props":3067,"children":3068},{},[3069,3074],{"type":46,"tag":70,"props":3070,"children":3071},{},[3072],{"type":51,"value":3073},"Deployment Groups",{"type":51,"value":3075},": You can organize deployments into deployment groups. Deployment groups enable auto-approval rules, logical organization, and provide a foundation for scaling. Deployment groups are an HCP Terraform Premium tier feature",{"type":46,"tag":122,"props":3077,"children":3078},{},[3079,3084],{"type":46,"tag":70,"props":3080,"children":3081},{},[3082],{"type":51,"value":3083},"Testing",{"type":51,"value":3085},": Test Stack configurations in dev\u002Fstaging deployments before production",{"type":46,"tag":60,"props":3087,"children":3089},{"id":3088},"troubleshooting",[3090],{"type":51,"value":3091},"Troubleshooting",{"type":46,"tag":54,"props":3093,"children":3094},{},[3095,3100],{"type":46,"tag":70,"props":3096,"children":3097},{},[3098],{"type":51,"value":3099},"Circular Dependencies",{"type":51,"value":3101},": Refactor to break circular references or use intermediate components.",{"type":46,"tag":54,"props":3103,"children":3104},{},[3105,3110,3112,3117],{"type":46,"tag":70,"props":3106,"children":3107},{},[3108],{"type":51,"value":3109},"Deployment Destruction",{"type":51,"value":3111},": Cannot destroy from UI. Set ",{"type":46,"tag":133,"props":3113,"children":3115},{"className":3114},[],[3116],{"type":51,"value":1828},{"type":51,"value":3118}," in deployment block, upload configuration, and HCP Terraform creates a destroy run.",{"type":46,"tag":54,"props":3120,"children":3121},{},[3122,3127,3129,3134],{"type":46,"tag":70,"props":3123,"children":3124},{},[3125],{"type":51,"value":3126},"Empty Diagnostics",{"type":51,"value":3128},": Add required ",{"type":46,"tag":133,"props":3130,"children":3132},{"className":3131},[],[3133],{"type":51,"value":2872},{"type":51,"value":3135}," query parameter to diagnostics API requests.",{"type":46,"tag":54,"props":3137,"children":3138},{},[3139,3143],{"type":46,"tag":70,"props":3140,"children":3141},{},[3142],{"type":51,"value":2988},{"type":51,"value":3144},": Test public registry modules before production use. Some modules may have compatibility issues with Stacks.",{"type":46,"tag":60,"props":3146,"children":3148},{"id":3147},"references",[3149],{"type":51,"value":3150},"References",{"type":46,"tag":54,"props":3152,"children":3153},{},[3154],{"type":51,"value":3155},"For detailed documentation, see:",{"type":46,"tag":118,"props":3157,"children":3158},{},[3159,3169,3179,3189,3199,3209],{"type":46,"tag":122,"props":3160,"children":3161},{},[3162,3167],{"type":46,"tag":133,"props":3163,"children":3165},{"className":3164},[],[3166],{"type":51,"value":1022},{"type":51,"value":3168}," - Complete component block reference with all arguments and syntax",{"type":46,"tag":122,"props":3170,"children":3171},{},[3172,3177],{"type":46,"tag":133,"props":3173,"children":3175},{"className":3174},[],[3176],{"type":51,"value":1647},{"type":51,"value":3178}," - Complete deployment block reference with all configuration options",{"type":46,"tag":122,"props":3180,"children":3181},{},[3182,3187],{"type":46,"tag":133,"props":3183,"children":3185},{"className":3184},[],[3186],{"type":51,"value":2243},{"type":51,"value":3188}," - Publish outputs and upstream inputs for linking Stacks together",{"type":46,"tag":122,"props":3190,"children":3191},{},[3192,3197],{"type":46,"tag":133,"props":3193,"children":3195},{"className":3194},[],[3196],{"type":51,"value":2960},{"type":51,"value":3198}," - Complete working examples for multi-region and component dependencies",{"type":46,"tag":122,"props":3200,"children":3201},{},[3202,3207],{"type":46,"tag":133,"props":3203,"children":3205},{"className":3204},[],[3206],{"type":51,"value":2898},{"type":51,"value":3208}," - Full API workflow for programmatic monitoring and automation",{"type":46,"tag":122,"props":3210,"children":3211},{},[3212,3218],{"type":46,"tag":133,"props":3213,"children":3215},{"className":3214},[],[3216],{"type":51,"value":3217},"references\u002Ftroubleshooting.md",{"type":51,"value":3219}," - Detailed troubleshooting guide for common issues and solutions",{"type":46,"tag":3221,"props":3222,"children":3223},"style",{},[3224],{"type":51,"value":3225},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3227,"total":1799},[3228,3243,3255,3268,3282,3294,3308,3318,3332,3347,3357,3368],{"slug":3229,"name":3229,"fn":3230,"description":3231,"org":3232,"tags":3233,"stars":25,"repoUrl":26,"updatedAt":3242},"aws-ami-builder","build Amazon Machine Images with Packer","Build Amazon Machine Images (AMIs) with Packer using the amazon-ebs builder. Use when creating custom AMIs for EC2 instances.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3234,3237,3238,3239],{"name":3235,"slug":3236,"type":15},"AWS","aws",{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":3240,"slug":3241,"type":15},"Packer","packer","2026-04-06T18:25:04.01571",{"slug":3244,"name":3244,"fn":3245,"description":3246,"org":3247,"tags":3248,"stars":25,"repoUrl":26,"updatedAt":3254},"azure-image-builder","build Azure managed images with Packer","Build Azure managed images and Azure Compute Gallery images with Packer. Use when creating custom images for Azure VMs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3249,3252,3253],{"name":3250,"slug":3251,"type":15},"Azure","azure",{"name":17,"slug":18,"type":15},{"name":3240,"slug":3241,"type":15},"2026-04-06T18:25:06.590174",{"slug":3256,"name":3256,"fn":3257,"description":3258,"org":3259,"tags":3260,"stars":25,"repoUrl":26,"updatedAt":3267},"azure-verified-modules","develop certified Azure Verified Modules","Azure Verified Modules (AVM) requirements and best practices for developing certified Azure Terraform modules. Use when creating or reviewing Azure modules that need AVM certification.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3261,3262,3265,3266],{"name":3250,"slug":3251,"type":15},{"name":3263,"slug":3264,"type":15},"Compliance","compliance",{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},"2026-04-06T18:25:16.88768",{"slug":3269,"name":3269,"fn":3270,"description":3271,"org":3272,"tags":3273,"stars":25,"repoUrl":26,"updatedAt":3281},"new-terraform-provider","scaffold new Terraform providers","Use this when scaffolding a new Terraform provider.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3274,3277,3280],{"name":3275,"slug":3276,"type":15},"Plugin Development","plugin-development",{"name":3278,"slug":3279,"type":15},"Templates","templates",{"name":20,"slug":21,"type":15},"2026-04-06T18:25:11.814973",{"slug":3283,"name":3283,"fn":3284,"description":3285,"org":3286,"tags":3287,"stars":25,"repoUrl":26,"updatedAt":3293},"provider-actions","implement Terraform Provider lifecycle actions","Implement Terraform Provider actions using the Plugin Framework. Use when developing imperative operations that execute at lifecycle events (before\u002Fafter create, update, destroy).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3288,3291,3292],{"name":3289,"slug":3290,"type":15},"API Development","api-development",{"name":3275,"slug":3276,"type":15},{"name":20,"slug":21,"type":15},"2026-04-06T18:25:07.880533",{"slug":3295,"name":3295,"fn":3296,"description":3297,"org":3298,"tags":3299,"stars":25,"repoUrl":26,"updatedAt":3307},"provider-docs","generate and review Terraform provider documentation","Create, update, and review Terraform provider documentation for Terraform Registry using HashiCorp-recommended patterns, tfplugindocs templates, and schema descriptions. Use when adding or changing provider configuration, resources, data sources, ephemeral resources, list resources, functions, or guides; when validating generated docs; and when troubleshooting missing or incorrect Registry documentation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3300,3303,3306],{"name":3301,"slug":3302,"type":15},"Documentation","documentation",{"name":3304,"slug":3305,"type":15},"Technical Writing","technical-writing",{"name":20,"slug":21,"type":15},"2026-04-06T18:25:09.261559",{"slug":3309,"name":3309,"fn":3310,"description":3311,"org":3312,"tags":3313,"stars":25,"repoUrl":26,"updatedAt":3317},"provider-resources","implement Terraform Provider resources and data sources","Implement Terraform Provider resources and data sources using the Plugin Framework. Use when developing CRUD operations, schema design, state management, and acceptance testing for provider resources.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3314,3315,3316],{"name":3289,"slug":3290,"type":15},{"name":3275,"slug":3276,"type":15},{"name":20,"slug":21,"type":15},"2026-04-06T18:25:10.56237",{"slug":3319,"name":3319,"fn":3320,"description":3321,"org":3322,"tags":3323,"stars":25,"repoUrl":26,"updatedAt":3331},"provider-test-patterns","implement Terraform provider acceptance test patterns","Terraform provider acceptance test patterns using terraform-plugin-testing with the Plugin Framework. Covers test structure, TestCase\u002FTestStep fields, ConfigStateChecks with custom statecheck.StateCheck implementations, plan checks, CompareValue for cross-step assertions, config helpers, import testing with ImportStateKind, sweepers, and scenario patterns (basic, update, disappears, validation, regression), and ephemeral resource testing with the echoprovider package. Use when writing, reviewing, or debugging provider acceptance tests, including questions about statecheck, plancheck, TestCheckFunc, CheckDestroy, ExpectError, import state verification, ephemeral resources, or how to structure test files.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3324,3325,3328,3329],{"name":3275,"slug":3276,"type":15},{"name":3326,"slug":3327,"type":15},"QA","qa",{"name":20,"slug":21,"type":15},{"name":3083,"slug":3330,"type":15},"testing","2026-04-06T18:25:14.352781",{"slug":3333,"name":3333,"fn":3334,"description":3335,"org":3336,"tags":3337,"stars":25,"repoUrl":26,"updatedAt":3346},"push-to-registry","push Packer build metadata to HCP registry","Push Packer build metadata to HCP Packer registry for tracking and managing image lifecycle. Use when integrating Packer builds with HCP Packer for version control and governance.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3338,3339,3342,3345],{"name":17,"slug":18,"type":15},{"name":3340,"slug":3341,"type":15},"Governance","governance",{"name":3343,"slug":3344,"type":15},"HCP","hcp",{"name":3240,"slug":3241,"type":15},"2026-04-06T18:25:02.749563",{"slug":3348,"name":3348,"fn":3349,"description":3350,"org":3351,"tags":3352,"stars":25,"repoUrl":26,"updatedAt":3356},"refactor-module","refactor Terraform configurations into reusable modules","Transform monolithic Terraform configurations into reusable, maintainable modules following HashiCorp's module design principles and community best practices.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3353,3354,3355],{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},"2026-04-06T18:25:20.953737",{"slug":3358,"name":3358,"fn":3359,"description":3360,"org":3361,"tags":3362,"stars":25,"repoUrl":26,"updatedAt":3367},"run-acceptance-tests","run acceptance tests for Terraform providers","Guide for running acceptance tests for a Terraform provider. Use this when asked to run an acceptance test or to run a test with the prefix `TestAcc`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3363,3364,3365,3366],{"name":3275,"slug":3276,"type":15},{"name":3326,"slug":3327,"type":15},{"name":20,"slug":21,"type":15},{"name":3083,"slug":3330,"type":15},"2026-04-06T18:25:13.098191",{"slug":3369,"name":3369,"fn":3370,"description":3371,"org":3372,"tags":3373,"stars":25,"repoUrl":26,"updatedAt":3380},"terraform-policy","write and test Terraform policy files","Write, test, or convert Terraform Policy files (.policy.hcl, .policytest.hcl, Sentinel→tfpolicy). Triggers: policy.hcl, policytest, convert sentinel, tfpolicy, write a policy.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3374,3375,3376,3379],{"name":3263,"slug":3264,"type":15},{"name":23,"slug":24,"type":15},{"name":3377,"slug":3378,"type":15},"Security","security",{"name":20,"slug":21,"type":15},"2026-07-18T05:48:20.299442",{"items":3382,"total":1791},[3383,3390,3396,3403,3409,3415,3421],{"slug":3229,"name":3229,"fn":3230,"description":3231,"org":3384,"tags":3385,"stars":25,"repoUrl":26,"updatedAt":3242},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3386,3387,3388,3389],{"name":3235,"slug":3236,"type":15},{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":3240,"slug":3241,"type":15},{"slug":3244,"name":3244,"fn":3245,"description":3246,"org":3391,"tags":3392,"stars":25,"repoUrl":26,"updatedAt":3254},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3393,3394,3395],{"name":3250,"slug":3251,"type":15},{"name":17,"slug":18,"type":15},{"name":3240,"slug":3241,"type":15},{"slug":3256,"name":3256,"fn":3257,"description":3258,"org":3397,"tags":3398,"stars":25,"repoUrl":26,"updatedAt":3267},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3399,3400,3401,3402],{"name":3250,"slug":3251,"type":15},{"name":3263,"slug":3264,"type":15},{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"slug":3269,"name":3269,"fn":3270,"description":3271,"org":3404,"tags":3405,"stars":25,"repoUrl":26,"updatedAt":3281},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3406,3407,3408],{"name":3275,"slug":3276,"type":15},{"name":3278,"slug":3279,"type":15},{"name":20,"slug":21,"type":15},{"slug":3283,"name":3283,"fn":3284,"description":3285,"org":3410,"tags":3411,"stars":25,"repoUrl":26,"updatedAt":3293},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3412,3413,3414],{"name":3289,"slug":3290,"type":15},{"name":3275,"slug":3276,"type":15},{"name":20,"slug":21,"type":15},{"slug":3295,"name":3295,"fn":3296,"description":3297,"org":3416,"tags":3417,"stars":25,"repoUrl":26,"updatedAt":3307},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3418,3419,3420],{"name":3301,"slug":3302,"type":15},{"name":3304,"slug":3305,"type":15},{"name":20,"slug":21,"type":15},{"slug":3309,"name":3309,"fn":3310,"description":3311,"org":3422,"tags":3423,"stars":25,"repoUrl":26,"updatedAt":3317},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3424,3425,3426],{"name":3289,"slug":3290,"type":15},{"name":3275,"slug":3276,"type":15},{"name":20,"slug":21,"type":15}]