Importing Datadog Resources into Terraform
Overview
Terraform supports an out-of-the-box way to import existing resources into your terraform state via the terraform import
command.
This can be done via the terraform import <resource_type>.<resource_name> <existing_id>
.
This approach is state only
and requires already having the HCL resource fully defined in your terraform configuration files. To import the configuration fully, you can use a tool like Terraformer.
The terraformer project allows you to import a resource as both state and HCL configuration.
Once installed, you can setup a terraform directory with a basic main.tf
This uses terraform 0.13+ syntax, but you can find more configurations on the official datadog provider docs
# main.tf
terraform {
required_providers {
datadog = {
source = "DataDog/datadog"
}
}
}
# Configure the Datadog provider
provider "datadog" {}
Then run terraform init
from within this directory to pull the datadog terraform provider.
Now you can use terraformer
to start importing resources. For example, to import Dashboard abc-def-ghi
you can run
terraformer import datadog --resources=dashboard --filter=dashboard=abc-def-ghi --api-key <YOUR_API_KEY> --app-key <YOUR_APP_KEY> --api-url <YOUR_DATADOG_SITE_URL>
This generates a folder generated
that contains both a terraform state file, as well as HCL terraform config files representing the imported resource.
generated
└── datadog
└── dashboard
├── dashboard.tf
├── outputs.tf
├── provider.tf
└── terraform.tfstate
dashboard.tf
: The HCL configuration file for the newly imported dashboardoutputs.tf
: An HCL containing outputs to use potentially in other configurationsprovider.tf
: An HCL initialization of the provider, similar to whats in our main.tf
fileterraform.tfstate
: The terraform state representing the imported dashboard
All example commands require the --api-key
, --app-key
, and --api-url
flags.
- Import all monitors:
terraformer import datadog --resources=monitor
- Import monitor with id 1234:
terraformer import datadog --resources=monitor --filter=monitor=1234
- Import monitors with id 1234 and 12345:
terraformer import datadog --resources=monitor --filter=monitor=1234:12345
- Import all monitors and dashboards:
terraformer import datadog --resources=monitor,dashboard
- Import monitor with id 1234 and dashboard with id abc-def-ghi:
terraformer import datadog --resources=monitor,dashboard --filter=monitor=1234,dashboard=abc-def-ghi
As of version 0.8.10
, Terraformer generates tf
/json
and tfstate
files using Terraform v0.12.29
. To ensure compatibility, run the upgrade command terraform 0.13upgrade .
using Terraform v0.13.x
. See official Terraform docs for upgrading.
Import resource using terraformer.
Using Terraform v0.13.x
, cd
into the generated resource directory and run terraform 0.13upgrade .
.
Run terraform init
to re-run the provider installer.
Run terraform apply
to apply upgrades to Terraform state files.