Homeโ€บโš™๏ธ Track 4: Automate & Governโ€บModule 141 min read ยท 15/21

Configuration as Code

Tutorial

Configuration as Code

Manage Dynatrace configuration with Terraform and Monaco CLI โ€” version-controlled, repeatable, auditable.

Two Tools

Tool                What It Does                              Best For
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Terraform           Declarative state management (HCL)        Greenfield deployment
Monaco CLI          Dynatrace-native config as code (YAML)    Brownfield export, CI/CD

Terraform Provider (v1.94.0)

# Setup
terraform {
  required_providers {
    dynatrace = {
      source  = "dynatrace-oss/dynatrace"
      version = "~> 1.94"
    }
  }
}

# Configure via environment variables
export DYNATRACE_ENV_URL="https://ENV-ID.live.dynatrace.com"
export DYNATRACE_API_TOKEN="dt0c01.XXXX.YYYY"

# For workflows, dashboards, SLOs (require OAuth):
export DT_CLIENT_ID="dt0s02.XXXX"
export DT_CLIENT_SECRET="dt0s02.XXXX.YYYY"
export DT_ACCOUNT_ID="urn:dtaccount:UUID"

Export Existing Configuration

# After terraform init, the provider binary can export ALL config:
cd .terraform/providers/registry.terraform.io/dynatrace-oss/dynatrace/*/linux_amd64/

# Export everything (generates .tf files)
./terraform-provider-dynatrace -export

# Export specific resources with dependencies
./terraform-provider-dynatrace -export -ref dynatrace_alerting dynatrace_dashboard

# Export and import into Terraform state
./terraform-provider-dynatrace -export -import-state dynatrace_platform_slo

โš ๏ธ -import-state makes resources managed. On next terraform apply, anything in state but NOT in .tf files gets deleted.

Monaco CLI (v2.28.5)

# Export all config as YAML
monaco download --url https://ENV-ID.live.dynatrace.com \
  --token-name DT_API_TOKEN --output-folder export/

# Deploy config
monaco deploy manifest.yaml --environment prod

# Dry run (preview changes)
monaco deploy manifest.yaml --environment prod --dry-run

๐Ÿ’ก Use Monaco for brownfield export (capture existing config), Terraform for greenfield deployment (define desired state). Many teams use both.

๐Ÿ›  Try it: Open Ctrl+K โ†’ "Settings" โ†’ browse any setting (try "Anomaly detection"). Notice the schema ID in the URL โ€” that's the same ID you'd use in Terraform's dynatrace_setting resource. Every UI setting has an API equivalent.

Terraform Export Utility

The Dynatrace TF provider binary can export existing config:

# Export all configs
./terraform-provider-dynatrace -export

# Export with dependencies + state import (brownfield adoption)
./terraform-provider-dynatrace -export -ref -import-state

# Export specific resource
./terraform-provider-dynatrace -export dynatrace_alerting

Flags: -ref (data sources), -import-state (init + import), -flat (no modules).