Terraform
This Driver runs Terraform to provision resources. The Terraform definition can be provided in-line or reference a Terraform module in a Git repository.
Property
Property | Description |
---|---|
Resource Type | Any |
Account Type | None |
Inputs
Values
Name | Type | Description |
---|---|---|
files |
object | [Optional] A Map of filenames to their content to create in the directory before terraform is executed. |
source |
object | [Optional] A Git repository to use for the Terraform definition. |
script |
string | [Optional] An inline terraform definition in HCL format. If specified with source , it works as override.tf |
variables |
object | A Map of variable names that are used as inputs to the Terraform definition and their values. |
At least one of source
or script
must be specified.
Source object
The source object defines how the Driver will use Terraform definitions that are stored in Git. In order for the Driver to use the source based Terraform definitions, the repository must be accessible to the Driver and credentials must be supplied if necessary.
Property | Type | Description |
---|---|---|
path |
string | [Optional] Relative path to the scripts: path/to/scripts . |
rev |
string | [Optional] Branch name, tag, or commit SHAFor example, /refs/heads/main |
url |
object | Repository URLFor example, github.com:my-org/project.git for SSH or https://github.com/my-org/project.git for HTTPS. |
username |
object | [Optional] User Name to authenticate. Default is git . |
Secrets
Name | Type | Description |
---|---|---|
files |
object | [Optional] A Map of filenames to their content to create in the directory before terraform is executed. |
source |
object | [Optional] Credentials for the git repo. |
variables |
object | A Map of variable names that are used as sensitive inputs to the Terraform definition. |
Source object
Credentials to be used to access the git repository. The choice of credentials depends on the url
format.
Property | Type | Description |
---|---|---|
password |
string | [Optional] Password or Personal Account Token - for HTTPS. |
ssh_key |
string | [Optional] SSH Private key - for connections over SSH. |
Notes
Interaction with Humanitec Resources
Resource Types in Humanitec have a specified Resource Output Schema. In order for a resource to be usable in Humanitec, the Terraform definition must specify output
variables that exactly match this schema.
For example, the s3 resource type has the following output schema:
Name | Type | Description |
---|---|---|
aws_access_key_id |
string, secret | [Optional] Credentials for the git repo. |
aws_secret_access_key |
string, secret | A Map of variable names that are used as sensitive inputs to the Terraform definition. |
bucket |
string | The bucket name. |
region |
string | The region the bucket is hosted in. |
Therefore, the Terraform definition should have outputs defined similar to:
output "region" {
value = module.aws_s3.s3_bucket_region
}
output "bucket" {
value = module.aws_s3.s3_bucket_bucket_domain_name
}
output "aws_access_key_id" {
value = var.credentials.access_key
sensitive = true
}
output "aws_secret_access_key" {
value = var.credentials.secret_key
sensitive = true
}
Example
Here is an example of using the Terraform Driver to provision an S3 bucket using a public git repository:
curl "https://api.humanitec.io/orgs/${HUMANITEC_ORG}/resources/defs" \
-H "Authorization: Bearer ${HUMANITEC_TOKEN}" \
-H "Content-Type: application/json" \
--data-binary '{
"id": "s3-terraform",
"name": "s3-terraform",
"type": "s3",
"driver_type": "angus-demo/terraform",
"driver_inputs": {
"values": {
"files": {
"example.txt": "Hello world!"
},
"source": {
"path": "s3",
"rev": "refs/heads/main",
"url": "https://github.com/chrishumanitec/terraform-demo.git"
},
"variables": {
"bucket": "humanitec-terraform-demo-${context.app.id}-${context.env.id}",
"region": "eu-west-3"
}
},
"secrets": {
"variables": {
"credentials": {
"access_key": "...",
"secret_key": "..."
}
}
}
},
"criteria": [
{"env_type":"test-envs"}
]
}'