Datadog
This provider uses the terraform-provider-datadog.
1. Installation
Section titled “1. Installation”First you will need to install Terraformer with the Datadog provider. See the README.
2. Set up a template Terraform workspace
Section titled “2. Set up a template Terraform workspace”Before you can use Terraformer, you need to create a template workspace so that Terraformer can access the DataDog/datadog provider.
To do this, create a new directory with a basic provider.tf file:
terraform { required_providers { datadog = { source = "DataDog/datadog" version = ">= 4.9.0" } }}
provider "datadog" { # Configuration options}then run:
$ terraform initYou should see the output: Terraform has been successfully initialized!
3. Run Terraformer
Section titled “3. Run Terraformer”export DATADOG_API_KEY=Datadog API key. More information on this at https://docs.datadoghq.com/account_management/api-app-keys/export DATADOG_HOST=Datadog API host i.e. https://api.datadoghq.eu which can be found at https://docs.datadoghq.com/getting_started/site/#access-the-datadog-siteexport DATADOG_APP_KEY=Datadog APP key. More information on this at https://docs.datadoghq.com/account_management/api-app-keys/
./terraformer import datadog --resources=*You can also specify only certain kinds of resources to import as well, i.e. --resources=dashboard.
4. Inspect the imported Terraform files
Section titled “4. Inspect the imported Terraform files”You should now see a generated/ subdirectory with generated files.
You can now initialize and use your new generated resources:
$ terraform init$ terraform plan # No changes. Your infrastructure matches the configuration.Filtering Resources
Section titled “Filtering Resources”You can use the filter argument to restrict the import of Terraform resources.
Filtering based on Tags follows the convention --filter="Name=tags;Value='your tag'".
# Import monitors based on multiple tags./terraformer import datadog --resources=monitor --filter="Name=tags;Value='foo:bar'" --filter="Name=tags;Value='env:production'"
# Import monitor where tag doesn't include colon./terraformer import datadog --resources=monitor --filter="Name=tags;Value=anExampleTag"Filtering based on resource ID:
# Import dashboard based on the dashboard ID./terraformer import datadog --resources=dashboard --filter=dashboard=some-id
# Import dashboard_v2 based on the dashboard ID./terraformer import datadog --resources=dashboard_v2 --filter=dashboard_v2=some-id
# Import based on multiple resource IDs ./terraformer import datadog --resources=monitor --filter=monitor=id1:id2:id4Tag filters are order specific. For example, if your monitor has tags (in the order) atag: atagvalue, foo:bar but you filter for --filter="Name=tags;Value='foo:bar'" --filter="Name=tags;Value='atag: atagvalue'", the monitor would not be imported.
Supported Datadog resources
Section titled “Supported Datadog resources”agentless_scanning_aws_scan_optionsdatadog_agentless_scanning_aws_scan_options
agentless_scanning_azure_scan_optionsdatadog_agentless_scanning_azure_scan_options- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
agentless_scanning_gcp_scan_optionsdatadog_agentless_scanning_gcp_scan_options
api_keydatadog_api_key
application_keydatadog_application_key
app_builder_appdatadog_app_builder_app- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
apm_retention_filterdatadog_apm_retention_filter
apm_retention_filter_orderdatadog_apm_retention_filter_order- NOTE: Importing a single retention filter order by ID accepts any value because the Datadog provider stores it as
filtersOrderID, for example--filter=apm_retention_filter_order=any-value
- NOTE: Importing a single retention filter order by ID accepts any value because the Datadog provider stores it as
appsec_waf_custom_ruledatadog_appsec_waf_custom_rule
appsec_waf_exclusion_filterdatadog_appsec_waf_exclusion_filter
authn_mappingdatadog_authn_mapping
aws_cur_configdatadog_aws_cur_config- NOTE: Requires DataDog/datadog provider 3.39.0 or newer.
azure_uc_configdatadog_azure_uc_config- NOTE: Requires DataDog/datadog provider 3.39.0 or newer.
cloud_configuration_ruledatadog_cloud_configuration_rule- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
dashboarddatadog_dashboard
dashboard_jsondatadog_dashboard_json
dashboard_listdatadog_dashboard_list
dashboard_v2datadog_dashboard_v2- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
- NOTE: Discovers the same dashboard IDs as
dashboardanddashboard_json; select one dashboard resource representation for each imported dashboard to avoid duplicate Terraform ownership.
cloud_inventory_sync_configdatadog_cloud_inventory_sync_config- NOTE: Requires DataDog/datadog provider 3.86.0 or newer.
- NOTE: Importing resource requires resource ID’s to be passed via Filter option
cost_budgetdatadog_cost_budget- NOTE: Requires DataDog/datadog provider 3.39.0 or newer.
csm_threats_agent_ruledatadog_csm_threats_agent_rule- NOTE: For policy-scoped rules, filter IDs use
policy_id:rule_idformat, for example--filter="csm_threats_agent_rule='policy-abc:rule-123'"; unscoped rules accept bare rule IDs
- NOTE: For policy-scoped rules, filter IDs use
csm_threats_policydatadog_csm_threats_policy
custom_allocation_ruledatadog_custom_allocation_rule- NOTE: Requires DataDog/datadog provider 3.39.0 or newer.
datasetdatadog_dataset- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
datastoredatadog_datastore- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
- NOTE: Imports datastore configuration metadata. Datastore items are not part of this Terraform resource.
domain_allowlistdatadog_domain_allowlist- NOTE: Singleton resource. Only one domain allowlist per org.
deployment_gatedatadog_deployment_gate- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
downtimedatadog_downtime
downtime_scheduledatadog_downtime_schedule- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
gcp_uc_configdatadog_gcp_uc_config- NOTE: Requires DataDog/datadog provider 3.39.0 or newer.
incident_notification_ruledatadog_incident_notification_rule- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
incident_notification_templatedatadog_incident_notification_template- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
incident_typedatadog_incident_type- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
integration_awsdatadog_integration_aws
integration_aws_lambda_arndatadog_integration_aws_lambda_arn
integration_aws_log_collectiondatadog_integration_aws_log_collection
integration_azuredatadog_integration_azure- NOTE: Sensitive field
client_secretis not generated and needs to be manually set
- NOTE: Sensitive field
integration_confluent_resourcedatadog_integration_confluent_resource- NOTE: Import ID is composite
account_id:resource_id. Discovery lists resources across all Confluent accounts.
- NOTE: Import ID is composite
integration_fastly_servicedatadog_integration_fastly_service- NOTE: Import ID is composite
account_id:service_id. Discovery lists services across all Fastly accounts.
- NOTE: Import ID is composite
integration_gcpdatadog_integration_gcp- NOTE: Sensitive fields
private_key, private_key_id, client_idis not generated and needs to be manually set
- NOTE: Sensitive fields
integration_ms_teams_tenant_based_handledatadog_integration_ms_teams_tenant_based_handle
integration_pagerdutydatadog_integration_pagerduty
integration_pagerduty_service_objectdatadog_integration_pagerduty_service_object
integration_slack_channeldatadog_integration_slack_channel- NOTE: Importing resource requires resource ID or
account_nameto be passed via Filter option
- NOTE: Importing resource requires resource ID or
ip_allowlistdatadog_ip_allowlist- NOTE: Singleton resource. Only one IP allowlist per org.
logs_archivedatadog_logs_archive
logs_archive_orderdatadog_logs_archive_order
logs_custom_pipelinedatadog_logs_custom_pipeline
logs_indexdatadog_logs_index
logs_index_orderdatadog_logs_index_order
logs_integration_pipelinedatadog_logs_integration_pipeline
logs_metricdatadog_logs_metric
logs_pipeline_orderdatadog_logs_pipeline_order
logs_restriction_querydatadog_logs_restriction_query
metric_metadatadatadog_metric_metadata- NOTE: Importing resource requires resource ID’s to be passed via Filter option
metric_tag_configurationdatadog_metric_tag_configuration
monitordatadog_monitor
monitor_config_policydatadog_monitor_config_policy
monitor_jsondatadog_monitor_json
monitor_notification_ruledatadog_monitor_notification_rule- NOTE: Requires DataDog/datadog provider 3.83.0 or newer.
observability_pipelinedatadog_observability_pipeline- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
on_call_escalation_policydatadog_on_call_escalation_policy- NOTE: The Datadog API does not expose a list endpoint for On-Call escalation policies; pass IDs explicitly, for example
--filter=on_call_escalation_policy=policy-id
- NOTE: The Datadog API does not expose a list endpoint for On-Call escalation policies; pass IDs explicitly, for example
on_call_scheduledatadog_on_call_schedule- NOTE: The Datadog API does not expose a list endpoint for On-Call schedules; pass IDs explicitly, for example
--filter=on_call_schedule=schedule-id
- NOTE: The Datadog API does not expose a list endpoint for On-Call schedules; pass IDs explicitly, for example
on_call_team_routing_rulesdatadog_on_call_team_routing_rules- NOTE: On-Call team routing rules are keyed by Datadog team ID, for example
--filter=on_call_team_routing_rules=team-id
- NOTE: On-Call team routing rules are keyed by Datadog team ID, for example
on_call_user_notification_channeldatadog_on_call_user_notification_channel- NOTE: Importing a single On-Call user notification channel by ID requires quoting the
user_id:channel_idfilter value, for example--filter="on_call_user_notification_channel='user-id:channel-id'" - NOTE: To import channels for one user, filter by
user_id, for example--filter="Type=on_call_user_notification_channel;Name=user_id;Value=user-id" - NOTE: Push notification channels are skipped because the Datadog provider resource supports email and phone channels.
- NOTE: Importing a single On-Call user notification channel by ID requires quoting the
on_call_user_notification_ruledatadog_on_call_user_notification_rule- NOTE: Importing a single On-Call user notification rule by ID requires quoting the
user_id:rule_idfilter value, for example--filter="on_call_user_notification_rule='user-id:rule-id'" - NOTE: To import notification rules for one user, filter by
user_id, for example--filter="Type=on_call_user_notification_rule;Name=user_id;Value=user-id"
- NOTE: Importing a single On-Call user notification rule by ID requires quoting the
openapi_apidatadog_openapi_api- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
- NOTE: The DataDog/datadog provider marks this resource as deprecated.
org_connectiondatadog_org_connection
org_groupdatadog_org_group- NOTE: Requires DataDog/datadog provider 4.8.0 or newer.
org_group_membershipdatadog_org_group_membership- NOTE: Requires DataDog/datadog provider 4.8.0 or newer.
org_group_policydatadog_org_group_policy- NOTE: Requires DataDog/datadog provider 4.8.0 or newer. Policies are discovered per org group.
organization_settingsdatadog_organization_settings- NOTE: Singleton-like. Lists org(s) via V1 API and imports each by public ID.
powerpackdatadog_powerpack- NOTE: Discovers the same powerpack IDs as
powerpack_v2; select one powerpack resource representation for each imported powerpack to avoid duplicate Terraform ownership.
- NOTE: Discovers the same powerpack IDs as
powerpack_v2datadog_powerpack_v2- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
- NOTE: Discovers the same powerpack IDs as
powerpack; select one powerpack resource representation for each imported powerpack to avoid duplicate Terraform ownership.
reference_tabledatadog_reference_table- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
- NOTE: Imports reference table configuration. Reference table row data is not part of this Terraform resource.
- NOTE: Local file reference tables are skipped because the DataDog/datadog provider validates
sourceasS3,GCS, orAZURE.
rum_applicationdatadog_rum_application
rum_metricdatadog_rum_metric
rum_retention_filterdatadog_rum_retention_filter- NOTE: Importing a single RUM retention filter by ID requires
application_id:retention_filter_id, for example--filter="rum_retention_filter='app-id:filter-id'"
- NOTE: Importing a single RUM retention filter by ID requires
rum_retention_filters_orderdatadog_rum_retention_filters_order- NOTE: Importing a single RUM retention filters order by ID uses the RUM application ID, for example
--filter=rum_retention_filters_order=app-id
- NOTE: Importing a single RUM retention filters order by ID uses the RUM application ID, for example
roledatadog_role
security_monitoring_default_ruledatadog_security_monitoring_default_rule
security_monitoring_critical_assetdatadog_security_monitoring_critical_asset- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
security_monitoring_filterdatadog_security_monitoring_filter
security_monitoring_ruledatadog_security_monitoring_rule
security_monitoring_suppressiondatadog_security_monitoring_suppression- NOTE: Requires DataDog/datadog provider 3.36.0 or newer.
security_notification_ruledatadog_security_notification_rule- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
sensitive_data_scanner_groupdatadog_sensitive_data_scanner_group- NOTE: Requires DataDog/datadog provider 3.90.0 or newer.
sensitive_data_scanner_group_orderdatadog_sensitive_data_scanner_group_order- NOTE: Requires DataDog/datadog provider 3.90.0 or newer.
sensitive_data_scanner_ruledatadog_sensitive_data_scanner_rule- NOTE: Requires DataDog/datadog provider 3.90.0 or newer.
service_accountdatadog_service_account
service_account_application_keydatadog_service_account_application_key- NOTE: Importing requires
service_account_idfilter or compositeservice_account_id:key_idID filter, for example--filter="Type=service_account_application_key;Name=service_account_id;Value=sa-id"or--filter="service_account_application_key='sa-id:key-id'"
- NOTE: Importing requires
service_definition_yamldatadog_service_definition_yaml- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
service_level_objectivedatadog_service_level_objective
slo_correctiondatadog_slo_correction
software_catalogdatadog_software_catalog- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
- NOTE: Broad discovery excludes discovered/snapshot entities and imports only catalog entities that expose raw schema, because the Datadog provider read path requires raw schema to reconstruct the required
entitybody. ID filters use the catalog entity reference, for example--filter="software_catalog='service:default/checkout'"
spans_metricdatadog_spans_metric
synthetics_concurrency_capdatadog_synthetics_concurrency_cap- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
- NOTE: Singleton resource. The Datadog provider stores the import ID as
synthetics-concurrency-cap.
synthetics_global_variabledatadog_synthetics_global_variable- NOTE: Importing resource requires resource ID’s to be passed via Filter option
synthetics_private_locationdatadog_synthetics_private_location
synthetics_suitedatadog_synthetics_suite- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
synthetics_testdatadog_synthetics_test
tag_pipeline_rulesetdatadog_tag_pipeline_ruleset- NOTE: Requires DataDog/datadog provider 3.39.0 or newer.
teamdatadog_team
team_connectiondatadog_team_connection- NOTE: Requires DataDog/datadog provider 4.5.0 or newer.
- NOTE: Team connections can be filtered by
source
team_hierarchy_linksdatadog_team_hierarchy_links- NOTE: Team hierarchy links can be filtered by
parent_team_idorsub_team_id
- NOTE: Team hierarchy links can be filtered by
team_linkdatadog_team_link- NOTE: Importing a single team link by ID requires quoting the
team_id:link_idfilter value, for example--filter="team_link='team-id:link-id'"; links can also be filtered byteam_id
- NOTE: Importing a single team link by ID requires quoting the
team_membershipdatadog_team_membership- NOTE: Importing a single membership by ID requires quoting the
team_id:user_idfilter value, for example--filter="team_membership='team-id:user-id'"; memberships can also be filtered byteam_id
- NOTE: Importing a single membership by ID requires quoting the
team_notification_ruledatadog_team_notification_rule- NOTE: Requires DataDog/datadog provider 3.85.0 or newer.
- NOTE: Importing a single notification rule by ID requires quoting the
team_id:rule_idfilter value, for example--filter="team_notification_rule='team-id:rule-id'"; notification rules can also be filtered byteam_id
team_permission_settingdatadog_team_permission_setting- NOTE: Requires DataDog/datadog provider 3.90.0 or newer.
- NOTE: Importing a single permission setting by ID requires quoting the
team_id:actionfilter value, for example--filter="team_permission_setting='team-id:manage_membership'"; permission settings can also be filtered byteam_id
team_syncdatadog_team_sync- NOTE: Requires DataDog/datadog provider 4.5.0 or newer.
- NOTE: The Datadog provider currently supports the GitHub team sync source
userdatadog_user
webhookdatadog_webhook- NOTE: The Datadog API does not expose a webhook list endpoint; pass webhook names explicitly, for example
--filter=webhook=example-webhook
- NOTE: The Datadog API does not expose a webhook list endpoint; pass webhook names explicitly, for example
workflow_automationdatadog_workflow_automation- NOTE: Requires DataDog/datadog provider 4.9.0 or newer.
- NOTE: The Datadog API does not expose a workflow list endpoint; pass workflow IDs explicitly, for example
--filter=workflow_automation=11111111-2222-3333-4444-555555555555 - NOTE: Workflow webhook secrets are not returned by the Datadog API; workflows that use webhook triggers may need
webhook_secretto be set manually after import.
Unsupported / Deferred Resources
Section titled “Unsupported / Deferred Resources”The following Terraform provider resources have been evaluated and cannot be safely imported by Terraformer:
| Resource | Reason |
|---|---|
datadog_integration_aws_account | Wildcard --resources=* conflicts with legacy integration_aws generator; required empty blocks (lambda_forwarder, namespace_filters, xray_services) are dropped by Terraformer’s flatmap parser before AllowEmptyValues is consulted. Revisit after legacy generator is removed. |
datadog_integration_aws_event_bridge | List API returns full event source names (with assigned suffix); provider’s required event_generator_name is the user-supplied prefix only, and there is no safe way to derive it. |
datadog_integration_cloudflare_account | api_key is required and sensitive; read API does not return it. |
datadog_integration_confluent_account | api_secret is required and sensitive; read API does not return it. |
datadog_integration_fastly_account | api_key is required and sensitive; read API does not return it. |
datadog_integration_ms_teams_workflows_webhook_handle | url is required and sensitive; read API does not return it. |
datadog_integration_opsgenie_service_object | opsgenie_api_key is required and sensitive; Datadog API explicitly never returns it. |
datadog_logs_custom_destination | Deferred because credential-backed destination variants preserve secret values from existing Terraform state and the Datadog API does not return those values. |
datadog_secure_embed_dashboard | Deferred because Datadog exposes secure embeds by dashboard_id:token only; the API and provider import path require the token and do not provide a list/token discovery endpoint. |
datadog_app_key_registration | Required id configuration attribute is stripped during Terraformer HCL conversion, producing an empty resource block that fails validation. |
datadog_org_group_policy_override | Delete resets the target org config value to the parent policy, and server-created overrides make broad discovery noisy and potentially ephemeral. |
datadog_webhook_custom_variable | Provider import seeds only id, but provider read looks up the variable by name; Terraformer cannot safely refresh the required name/value state from a broad ID import. |
datadog_integration_aws_external_id | Creates a short-lived external ID operation; provider read is a no-op and delete only removes Terraform state. |
datadog_action_connection | Deferred until a dedicated importer handles AWS versus HTTP credential-backed variants and the HTTP token-auth read path that omits sensitive token values. |
datadog_datastore_item | Datastore items are high-cardinality datastore row data; broad import would turn arbitrary data-plane records into Terraform-owned configuration. |
datadog_child_organization | The provider read path is a no-op after create, delete is not supported, and create returns sensitive generated API/application key material that cannot be reconstructed by broad import. |
datadog_cloud_workload_security_agent_rule | Deprecated in favor of the already registered datadog_csm_threats_agent_rule, so broad import would risk duplicate ownership of the same agent rules. |
datadog_compliance_custom_framework | Deferred because the API supports get/update/delete by handle/version but exposes no broad list endpoint to discover custom framework handles and versions. |
datadog_compliance_resource_evaluation_filter | Deferred because the API requires cloud/resource selectors to list filters and does not provide a broad inventory of all resources with configured evaluation filters. |
datadog_restriction_policy | Deferred because the API reads a policy only by known resource_id and does not expose a broad list endpoint for restriction policy resource IDs. |
datadog_security_monitoring_rule_json | The provider requires a json configuration document but its import/read flow cannot reconstruct that document from an ID alone, and it duplicates datadog_security_monitoring_rule ownership. |
datadog_user_role | Deferred because broad import would create separate role-assignment resources that conflict with the already supported datadog_user.roles and datadog_service_account.roles ownership paths. |