---
title: Developer Guide
description: Turn infrastructure templates into real cloud resources with InfraKitchen — no deep cloud or OpenTofu/Terraform knowledge required.
---

This guide shows how to turn infrastructure templates into real cloud resources with **InfraKitchen**. You do not need deep cloud or OpenTofu/Terraform knowledge to follow the steps.

## Core Ideas (Know These First)

- **Template**: Defines what can be built (the recipe).
- **Template Version**: Specific version of IaC code linked to the template.
- **Resource**: A real instance created from a template + version + variables.
- **Variables**: Inputs the code needs (some required, some frozen, some sensitive).
- **Integrations**: Credentials (AWS, Azure, GCP, etc.).
- **Storage**: Backend for OpenTofu/Terraform state (S3, Blob, GCS).
- **Dependency Tags**: Key/value tags that can flow down to children.
- **Dependency Configs**: Key/value config values that prefill matching variable names for children.
- **Outputs**: Values produced after provisioning (can feed child resources).
- **Abstract Resource**: Organizes hierarchy and passes tags/configs; does not create cloud infra.

## Prerequisites Checklist

Before creating a non-abstract resource:

- Template exists and is enabled.
- You know which Template Version to use.
- Required variables identified.
- Cloud integration(s) available.
- (Optional) Parent resources already provisioned (if template has parents).
- Storage backend configured globally or selectable.

For an abstract resource, integrations and storage are not needed.

## Quick Start: Create & Provision

1. Go to Resources.
2. Click <kbd>Create</kbd>.
3. Pick a template.
4. Enter:
    - Name (unique within template + version).
    - Description (optional).
    - Parent resources (if required).
5. (Optional) Add dependency tags/configs you want children to inherit.
6. Add labels (e.g. team, env).
7. Select cloud integration(s) (skip for abstract).
8. (Optional) Select workspace.
9. Choose Template Version.
10. Fill variables:
    - Required must have values.
    - Sensitive are masked.
    - Frozen cannot change later.
    - Unique must be globally unique for same template.
    - References: may auto\-populate from parent outputs or dependency configs.
11. Save.
12. If approval flow enabled: wait for approval. Else proceed.
13. (Optional) Run Dry Run (Plan) to preview.
14. Click <kbd>Provision</kbd>.

Result: State becomes `provisioned`, status `done`. Outputs become available.

## Dry Run (Plan) Purpose

Use Dry Run before Provision / Update to see adds, changes, destroys without applying. Fix variable mistakes early.

## Using Outputs & References

After provisioning:

- Child resource variables can reference parent outputs.
- Dependency configs with matching names prefill child variable values (override allowed).
- Tags marked inherited flow automatically.

## Updating a Resource

You can change: description, variables (not frozen), labels, integrations, workspace, template version.

Update flow:

1. Start Update.
2. Temp state is created.
3. Review differences (plan optional).
4. If needed, adjust variables.
5. If approval flow: await approval.
6. Apply changes.
7. Revision increments; outputs refresh.

Discard temp state if changes unwanted.

## Recreate

Use when resource was destroyed or rejected:

- Triggers provisioning again from existing definition.
- Same steps as initial Provision (approval may apply).

## Destroy vs Delete

- **Destroy**: Removes cloud infra; keeps resource record (state becomes `destroyed`).
- **Delete**: Permanently removes record (only allowed after destroy). Cannot undo.

Destroy rules:

- No child resources still provisioned.
- Approval may be required.
- Outputs cleared after success.

## Abstract Resources

When creating an abstract resource:

- Skip integrations, template version, workspace, variables.
- Use it to group and propagate tags/configs.
- Can have children (abstract or provisioned).
- No Provision / Destroy — only Create, Update, Delete.

## Lifecycle Cheat Sheet

| Action      | Start State      | End State        | Notes |
|-------------|------------------|------------------|-------|
| Provision   | provision        | provisioned      | Runs IaC apply. |
| Update      | provisioned      | provisioned      | Temp state preview. |
| Recreate    | destroyed/rejected | provisioned    | Fresh apply. |
| Dry Run     | provision/provisioned (pre\-apply) | unchanged | Preview only. |
| Destroy     | provisioned      | destroyed        | Runs IaC destroy. |
| Delete      | destroyed        | (removed)        | Final cleanup. |

## Best Practices

- Start with abstract resources for Environment / Account to cascade tags/configs.
- Use Dry Run on updates to avoid surprises.
- Keep naming consistent (include env + region).
- Avoid frequent Template Version jumps in production—test on staging first.
- Destroy before Delete to keep audit trail until truly not needed.
