ServiceNow Terraform
ServiceNow Terraform
Introduction
ServiceNow Terraform integration connects ServiceNow workflows and governance with Terraform-based Infrastructure as Code (IaC). In a typical enterprise implementation, ServiceNow can act as the service request and governance layer while Terraform performs the actual infrastructure provisioning. The integration can also synchronize Terraform-managed infrastructure into the ServiceNow Configuration Management Database (CMDB), giving operations teams visibility into resources created through Terraform.
Consider a common enterprise requirement: a developer needs a new AWS application environment. Instead of manually creating a virtual network, compute resources, security components, and supporting services, the developer submits a request through ServiceNow. The approved request can initiate an HCP Terraform workflow, which provisions the infrastructure from an approved Terraform configuration.
The reverse flow is equally important. After Terraform creates the infrastructure, ServiceNow can receive information about those resources and populate the CMDB. This creates a practical relationship between request → approval → provisioning → infrastructure inventory → operational management.
This article explains the architecture, prerequisites, implementation process, testing approach, troubleshooting considerations, and practical consultant recommendations for ServiceNow Terraform integrations.
What Is ServiceNow Terraform Integration?
ServiceNow Terraform integration refers to the mechanisms used to connect ServiceNow with Terraform-based infrastructure provisioning and management.
There are two important integration patterns.
| Integration pattern | Primary purpose |
|---|---|
| ServiceNow Service Catalog + Terraform | Allow users to request and provision infrastructure through ServiceNow |
| Service Graph Connector for Terraform | Import Terraform-managed resources into ServiceNow CMDB |
The first pattern is request-driven provisioning.
The second pattern is infrastructure visibility and CMDB synchronization.
HashiCorp’s current documentation identifies the ServiceNow Service Catalog integration as a mechanism for ordering Service Items, creating workspaces, and performing Terraform runs using prepared Terraform configurations or no-code modules.
The Service Graph Connector takes the opposite operational direction: it uses Terraform state information to import supported resources into ServiceNow CMDB. It does not need to query the cloud provider directly for those resources.
Why this architecture matters
Without integration, an enterprise may have the following disconnected systems:
ServiceNow for tickets
Terraform for infrastructure
AWS/Azure/GCP for actual resources
CMDB for infrastructure inventory
Git for Terraform source code
HCP Terraform for execution
The integration connects these processes so that infrastructure provisioning does not become an isolated DevOps activity.
Real-World ServiceNow Terraform Use Cases
Use Case 1 – Self-Service Cloud Infrastructure
A development team needs an application server.
Instead of raising a manual infrastructure ticket and waiting for an infrastructure engineer, the team selects a predefined ServiceNow catalog item such as:
Request New Application Environment
The catalog form may collect:
Application name
Environment
Region
Instance size
Network
Owner
Cost center
Business justification
ServiceNow can then trigger the Terraform workflow.
Terraform uses an approved module to create the infrastructure.
The important design principle is that users should not normally be allowed to submit arbitrary Terraform code through ServiceNow.
They should select approved parameters exposed through the service catalog.
Use Case 2 – Terraform Resources in ServiceNow CMDB
Suppose an organization has hundreds of AWS resources deployed through Terraform.
The infrastructure team needs ServiceNow CMDB records for operational processes such as:
Incident management
Change management
Asset visibility
Service mapping
Ownership reporting
Infrastructure audits
The Service Graph Connector for Terraform can import supported resources from HCP Terraform into ServiceNow CMDB. The current connector supports selected resources from AWS, Microsoft Azure, Google Cloud, and VMware vSphere.
This means an operations engineer can search the CMDB for infrastructure that was provisioned through Terraform.
Use Case 3 – Infrastructure Change Governance
Consider a production database server.
A team changes its Terraform configuration and submits a pull request.
The Terraform pipeline performs:
Terraform validation
Terraform plan
Policy checks
Approval
Terraform apply
ServiceNow update
The resulting infrastructure information can be reflected in ServiceNow.
This gives the organization a clearer relationship between the infrastructure lifecycle and its IT service management processes.
ServiceNow Terraform Architecture
A practical architecture can be represented as:
Developer / Employee
|
v
+------------------+
| ServiceNow |
| Service Catalog |
+------------------+
|
Request / Approval
|
v
+------------------+
| HCP Terraform |
| Workspace / Run |
+------------------+
|
Terraform Apply
|
v
+-----------------------+
| AWS / Azure / GCP / |
| VMware Infrastructure |
+-----------------------+
|
Terraform State
|
v
+------------------+
| Service Graph |
| Connector |
+------------------+
|
v
+------------------+
| ServiceNow CMDB |
+------------------+
There are therefore two different flows.
Provisioning flow
ServiceNow
↓
Service Catalog
↓
Approval
↓
HCP Terraform
↓
Terraform Run
↓
Cloud Infrastructure
CMDB synchronization flow
Terraform State
↓
HCP Terraform
↓
Service Graph Connector
↓
ETL / Mapping
↓
ServiceNow CMDB
This distinction is important during implementation because provisioning and CMDB synchronization solve different problems.
ServiceNow Service Catalog Integration
The ServiceNow Service Catalog integration allows ServiceNow users to request infrastructure through catalog items backed by Terraform configurations.
HashiCorp currently documents this integration as using prepared Terraform configurations hosted in VCS repositories or no-code modules.
A typical implementation looks like:
User
↓
ServiceNow Catalog Item
↓
Variables
↓
Approval
↓
Terraform Workspace
↓
Terraform Plan
↓
Terraform Apply
↓
Cloud Resource
Example
A catalog item could expose:
| ServiceNow variable | Terraform variable |
|---|---|
| Application Name | application_name |
| Environment | environment |
| Region | region |
| Instance Size | instance_size |
| Cost Center | cost_center |
| Owner | owner |
The ServiceNow form should validate these values before sending them to Terraform.
Service Graph Connector for Terraform
The Service Graph Connector solves a different problem.
Terraform creates infrastructure, but operations teams still need to know:
What was created?
Where is it located?
Which workspace created it?
Which organization owns it?
What is its current state?
Which ServiceNow CI represents it?
The connector uses Terraform state as its primary source for importing supported infrastructure into ServiceNow CMDB.
The integration supports two primary import mechanisms:
Scheduled polling
ServiceNow periodically retrieves Terraform information.
This can be useful when:
Webhooks aren’t practical
Infrastructure changes are relatively infrequent
A scheduled synchronization model fits operational requirements
HashiCorp notes that frequent scheduled imports are not recommended for very large environments because processing can become lengthy.
Webhook-based synchronization
HCP Terraform can notify ServiceNow after relevant Terraform runs complete.
This is generally useful when the CMDB needs to reflect infrastructure changes soon after Terraform execution.
The Service Graph Connector validates the webhook using an HMAC token.
Prerequisites
Before beginning implementation, confirm the following.
ServiceNow prerequisites
Depending on the selected integration, you may need:
Appropriate ServiceNow subscription/entitlement
Administrator or integration-specific roles
Required ServiceNow applications/plugins
CMDB availability for Service Graph implementation
IntegrationHub components where required
Network connectivity
For the Service Graph Connector, current HashiCorp documentation lists ServiceNow versions including Washington DC, Xanadu, and Yokohama for the documented Enterprise setup and identifies required dependencies such as ITOM Discovery License, Integration Commons for CMDB, Discovery and Service Mapping Patterns, and ServiceNow IntegrationHub Standard Pack.
Always validate the exact compatibility matrix against your ServiceNow instance before production deployment.
HCP Terraform prerequisites
You should have:
HCP Terraform organization
Appropriate workspace
Terraform configuration
VCS repository or approved module
API credentials
Team permissions
Appropriate workspace permissions
Terraform prerequisites
At minimum:
Terraform installed for local development where applicable
Provider configuration
Terraform configuration files
.terraform.lock.hclRemote state strategy
Variables and outputs
Version-controlled source code
HashiCorp recommends keeping the Terraform lock file in version control so provider selections can be reproduced consistently.
Step-by-Step Build Process
Step 1 – Prepare the Terraform Configuration
Start with a small and controlled Terraform configuration.
For example:
terraform {
required_version = ">= 1.3.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = var.aws_region
}
resource "aws_instance" "application_server" {
ami = var.ami_id
instance_type = var.instance_type
tags = {
Name = var.application_name
Environment = var.environment
ManagedBy = "Terraform"
}
}
The exact provider version and resource configuration should be selected according to the target environment and current provider documentation.
The important implementation principle is to keep infrastructure parameters externalized as variables.
Step 2 – Create Variables
Example:
variable "application_name" {
type = string
}
variable "environment" {
type = string
}
variable "aws_region" {
type = string
}
variable "instance_type" {
type = string
}
variable "ami_id" {
type = string
}
In a ServiceNow-driven model, these variables can correspond to approved Service Catalog fields.
Step 3 – Create the HCP Terraform Workspace
Create a workspace for the application or infrastructure component.
For example:
Organization: Enterprise-Cloud
Workspace: payments-prod
Configure:
VCS connection
Terraform working directory
Variables
Environment variables
Sensitive values
Execution settings
Team permissions
Avoid putting credentials directly inside .tf files.
Step 4 – Install the ServiceNow Terraform Integration
For the Service Catalog model, the ServiceNow administrator installs the Terraform integration application from the ServiceNow Store.
HashiCorp’s current setup documentation identifies the ServiceNow Terraform integration as published by HashiCorp Inc.
The documented ServiceNow roles include admin or x_terraform.config_user.
After installation, configure the connection between ServiceNow and HCP Terraform.
Step 5 – Configure the Service Catalog Item
Create a catalog item representing the infrastructure service.
For example:
Catalog Item: Provision Application Server
Fields:
Application Name
Environment
Region
Instance Size
Business Owner
Cost Center
Use choice fields instead of free-text fields wherever possible.
For example:
Environment:
Development
Test
Production
This prevents a user from entering arbitrary values such as:
production12345
PROD!!!
when the Terraform module expects controlled values.
Step 6 – Map ServiceNow Variables to Terraform
The catalog variables need to be mapped to Terraform inputs.
For example:
ServiceNow:
instance_size = "t3.medium"
↓
Terraform:
var.instance_type
A well-designed integration keeps this mapping explicit.
For more advanced implementations, HashiCorp documents conventions for using ServiceNow variable sets to create Terraform variables and environment variables.
Step 7 – Configure Approval
Production infrastructure should normally have a governance process.
For example:
User Request
↓
Manager Approval
↓
Cloud Operations Approval
↓
Terraform Run
Development environments may use a lighter workflow.
The important point is that ServiceNow should enforce organizational governance without forcing Terraform to contain business approval logic.
Configuring Service Graph Connector
If CMDB synchronization is required, install the Service Graph Connector for Terraform.
The connector is a certified scoped application available through the ServiceNow Store.
Step 1 – Install the Connector
In ServiceNow:
All
→ Service Graph Connector for Terraform
Install/configure the application according to your ServiceNow Store entitlement and supported release.
Step 2 – Create an HCP Terraform API Token
A dedicated team API token is preferable to a broad user token when the integration only needs access to specific Terraform resources.
HashiCorp specifically documents using a team API token to scope the resources that ServiceNow can import.
Store the token securely.
Do not place it in:
Terraform source code
Git repositories
ServiceNow catalog variables
Documentation
Scripts committed to source control
Step 3 – Configure Terraform Credentials in ServiceNow
In ServiceNow, open the Service Graph Connector configuration.
Configure the Terraform authentication credentials with the HCP Terraform API token.
Then configure the Terraform connection URL.
For HCP Terraform, the documented default is:
https://app.terraform.io
For Terraform Enterprise, use the appropriate Enterprise URL.
Step 4 – Configure Webhook Authentication
Create a webhook secret.
The same secret is configured on both sides.
Conceptually:
HCP Terraform
|
| HMAC-signed webhook
|
v
ServiceNow
ServiceNow validates the signature before processing the notification.
This protects the endpoint against unauthenticated webhook requests.
Step 5 – Create the HCP Terraform Webhook
In HCP Terraform:
Workspace
→ Settings
→ Notifications
→ Create Notification
Select:
Destination = Webhook
A documented ServiceNow webhook endpoint follows this structure:
https://<SERVICENOW_HOSTNAME>/api/x_hashi_service_gr/sg_terraform_webhook
The webhook token must match the token configured in ServiceNow.
For a practical implementation, trigger synchronization on completed Terraform runs rather than unnecessarily sending notifications for every intermediate event.
Testing the Technical Integration
Testing should be performed in stages.
Test 1 – Terraform Only
Run:
terraform init
terraform validate
terraform plan
terraform apply
Expected result:
Apply complete!
Resources: 1 added
Confirm the resource exists in the cloud provider.
Test 2 – ServiceNow Catalog Request
Submit:
Application: Payments
Environment: Development
Region: us-east-1
Instance Size: t3.medium
Expected flow:
Catalog Request
↓
Approval
↓
Terraform Workspace
↓
Terraform Run
↓
AWS Resource
Check the Terraform run history to verify that the expected variable values were received.
Test 3 – CMDB Synchronization
After Terraform completes, verify the Service Graph Connector import.
Search ServiceNow CMDB for the expected CI.
The HashiCorp tutorial demonstrates this using a virtual machine instance and verifies that the infrastructure created by Terraform appears in the ServiceNow CMDB.
Validate:
CI exists
CI class is correct
Resource identifier matches
Terraform workspace information is available
Tags are populated where supported
Operational status is correct
The connector also imports Terraform tags and adds tf_organization and tf_workspace information.
Test 4 – Terraform Update
Change a supported Terraform attribute.
Run:
terraform plan
terraform apply
Then verify:
Terraform state
↓
Service Graph Connector
↓
ServiceNow CMDB
The CMDB record should reflect the applicable updated information.
Test 5 – Terraform Destroy
Run:
terraform destroy
After the connector processes the deletion, verify the ServiceNow CI.
The documented connector behavior is to mark resources removed from Terraform state as Non-Operational after the relevant import processing completes.
This test is particularly important because many CMDB implementations validate creation but overlook deletion.
Common Errors and Troubleshooting
Error 1 – ServiceNow Cannot Authenticate to Terraform
Check:
API token validity
Token expiration
Team permissions
Organization access
Workspace permissions
Connection URL
A token may be valid but still lack permission to access the required workspace.
Error 2 – Webhook Is Not Updating CMDB
Check:
Webhook URL
HMAC token
ServiceNow endpoint
HCP Terraform notification configuration
Terraform run status
ServiceNow import logs
A webhook being configured does not necessarily mean that every Terraform event will trigger the desired CMDB processing.
Error 3 – Resource Exists in Terraform but Not CMDB
Check whether the resource type is supported by the connector.
The Service Graph Connector supports selected resource types rather than automatically mapping every resource exposed by every Terraform provider.
If the resource is not covered, evaluate whether a custom ETL mapping is appropriate.
Error 4 – Duplicate CIs
Duplicate records usually require investigation of identification and reconciliation logic.
Review:
Resource identifiers
ETL mapping
Reconciliation rules
Existing discovery sources
Multiple data sources populating the same CI
Do not solve duplicate CMDB records simply by deleting records manually. Determine why two sources believe they own the same CI.
Error 5 – Custom ETL Changes Are Lost
If you modify delivered ETL mappings directly, future application upgrades can create maintenance problems.
HashiCorp recommends cloning the existing ETL record and maintaining custom rules separately so that updates to the default mapping do not overwrite customizations.
ServiceNow Terraform Best Practices
1. Separate provisioning from governance
Terraform should manage infrastructure state.
ServiceNow should manage:
Requests
Approvals
Governance
Service management
CMDB visibility
Avoid putting every business approval rule into Terraform.
2. Use approved Terraform modules
Instead of allowing users to select arbitrary infrastructure combinations, expose approved modules.
For example:
Approved Web Server
Approved Database
Approved Kubernetes Cluster
Approved Network
The catalog exposes only the parameters that the organization has approved.
3. Use least-privilege credentials
Create dedicated integration credentials.
For CMDB synchronization, scope the Terraform token to the required organizations/workspaces rather than granting unrestricted access.
4. Keep Terraform in version control
Use Git-based workflows for:
Terraform source
Modules
Variable definitions
Documentation
Policy code
Do not treat ServiceNow as the source of truth for Terraform configuration.
5. Make ServiceNow the request layer, not the Terraform editor
A common architectural mistake is trying to build a complete Terraform development experience inside ServiceNow.
A cleaner enterprise architecture is:
Git
↓
Terraform
↓
HCP Terraform
↓
Infrastructure
ServiceNow
↓
Request / Approval / Governance
The systems have clear responsibilities.
6. Design for idempotency
Terraform configurations should produce predictable results when executed repeatedly.
For example, a request for:
Environment = DEV
Instance Count = 2
should consistently converge to the intended infrastructure state.
7. Control CMDB ownership
Before implementing synchronization, define which system owns which CI attributes.
For example:
| Attribute | Possible source |
|---|---|
| Cloud resource ID | Terraform |
| Environment | Terraform |
| Application owner | ServiceNow |
| Business service | ServiceNow |
| Operational status | ServiceNow / integration |
| Infrastructure tags | Terraform |
| Change record | ServiceNow |
Without ownership rules, CMDB data can become inconsistent.
8. Test lifecycle operations
Do not test only provisioning.
Test:
Create
Update
Failed deployment
Retry
Replacement
Destroy
Credential expiration
Webhook failure
Terraform workspace deletion
This exposes integration problems before production deployment.
Practical Consultant Checklist
Before moving a ServiceNow Terraform integration to production, verify:
Terraform modules are version controlled
HCP Terraform workspaces are correctly separated
ServiceNow catalog variables are validated
Production approvals are configured
API tokens use appropriate scope
Secrets are stored securely
Webhook authentication is enabled
CMDB reconciliation rules are reviewed
Supported resource coverage has been confirmed
Custom ETL mappings are maintained separately
Create/update/delete scenarios have been tested
Failed Terraform runs have an operational process
Ownership of CMDB attributes is documented
Monitoring and audit requirements are defined
FAQ
1. What is ServiceNow Terraform integration?
It is an integration between ServiceNow and Terraform that can support infrastructure provisioning through ServiceNow Service Catalog and synchronization of Terraform-managed resources into ServiceNow CMDB.
These are separate integration patterns and can be implemented independently.
2. Can ServiceNow provision AWS resources using Terraform?
Yes. A ServiceNow catalog request can be connected to HCP Terraform so that an approved request supplies parameters to a prepared Terraform configuration or module. The Terraform workflow then provisions the infrastructure.
3. Does the Terraform Service Graph Connector discover every Terraform resource?
No. The connector provides mapping for supported resource types and cloud providers. Current documentation identifies selected AWS, Azure, GCP, and VMware vSphere resources. Organizations can customize ETL mappings when additional resource coverage is required.
Summary
ServiceNow Terraform integration is best understood as an enterprise workflow rather than simply an API connection.
A practical implementation separates responsibilities:
ServiceNow
Request + Approval + Governance
|
v
HCP Terraform
Plan + Apply + State
|
v
Cloud Infrastructure
|
v
Service Graph Connector
|
v
ServiceNow CMDB
For self-service infrastructure, the ServiceNow Service Catalog provides a controlled entry point for users while HCP Terraform performs infrastructure provisioning. For operational visibility, the Service Graph Connector can bring Terraform-managed resources into ServiceNow CMDB using Terraform state as its source.
The most important implementation decision is to maintain clear ownership between ServiceNow, Terraform, cloud platforms, Git, and the CMDB. When those responsibilities are clearly defined, the integration becomes easier to secure, troubleshoot, audit, and maintain.
For Oracle Fusion Cloud projects, Terraform and ServiceNow can also coexist with Oracle Cloud Infrastructure and Fusion integration architectures. Oracle’s 26A documentation provides the current Fusion Cloud Applications documentation and API references for integration scenarios.
For additional Oracle reference material, use the official Oracle Fusion Cloud Applications documentation. For the specific Oracle Time and Labor reference requested in the broader documentation set, see the Oracle Time and Labor documentation.