Deploying and Managing InfluxDB Resources with Terraform

Thulasiraj Komminar
4 min readFeb 15, 2024

--

Introduction:

  • Terraform is a powerful infrastructure as code tool that automates cloud infrastructure provisioning and management through simple configuration files. If you’re interested in learning more, I’ve written a short blog outlining some key components of Terraform.
  • InfluxDB is a specialized time-series database tailored for efficiently handling large volumes of time-stamped data. In this blog, we’ll explore how to leverage Terraform for provisioning and managing resources within InfluxDB.

Prerequisites:

To install Terraform, you can easily follow the steps outlined in this blog post: Install Terraform.

Before diving in, ensure you have a basic understanding of InfluxDB and its components. For installation guidance, refer to this resource: Install InfluxDB.

Provider Configuration:

To create and manage InfluxDB resources using Terraform, it utilizes specialized plugins known as providers to interface with InfluxDB. I’ve developed and published a provider for InfluxDB on the Terraform registry, enabling seamless resource creation and management.

Let’s begin by configuring the provider.

  • Create a file named versions.tf and insert the following code to declare the InfluxDB provider. This allows Terraform to install and utilize the provider. Provider dependencies are specified within a required_providers block.
terraform {
required_providers {
influxdb = {
source = "komminarlabs/influxdb"
version = "1.0.0"
}
}
}
  • Create another file named main.tf to initialize the InfluxDB provider. We’ll use a provider block to configure it. You can specify the provider configuration using arguments such as url and token, or alternatively, utilize environment variables like INFLUXDB_TOKEN and INFLUXDB_URL.
export INFLUXDB_TOKEN="influxdb-token"
export INFLUXDB_URL="http://localhost:8086"
provider "influxdb" {
token = "influxdb-token"
url = "http://localhost:8086"
}

Creating and Managing InfluxDB Resources:

The komminarlabs/influxdb provider offers various data sources and resources.

Data Sources:

  • influxdb_authorization
  • influxdb_authorizations
  • influxdb_bucket
  • influxdb_buckets
  • influxdb_organization
  • influxdb_organizations

Resources:

  • influxdb_authorization
  • influxdb_bucket
  • influxdb_organization

We’ll begin by creating resources and then utilize data sources to query the created resources. Let’s create two files: resources.tf and datasources.tf.

Resources

Resources are the most important element in the Terraform language. Each resource block describes one or more infrastructure objects.

  • Organization:

An InfluxDB organization is a workspace for a group of users. All dashboards, tasks, buckets, members, etc., belong to an organization. Add the following code to create our organisation.

resource "influxdb_organization" "iot" {
name = "IoT"
description = "An IoT organization"
}

After running a Terraform plan and verifying everything looks good, let’s proceed with applying the changes.

Terraform execution plan and apply results
Switch to the new organization in InfluxDB
  • Bucket:

An InfluxDB bucket is a named location where time series data is stored. All buckets have a retention period, a duration of time that each data point persists. InfluxDB drops all points with timestamps older than the bucket’s retention period. A bucket belongs to an organization.

Let’s proceed by creating a bucket named signals with a retention period of 14 days (1209600 seconds).

resource "influxdb_bucket" "signals" {
org_id = influxdb_organization.iot.id
name = "signals"
description = "This is a bucket to store signals"
retention_period = 1209600
}
Terraform execution plan and apply results
  • Authorization:

Authorizations are InfluxDB Read/Write API tokens that grants read access, write access, or both to specific buckets in an organization.

In the following step, we will generate an authorization that enables both read and write access to the bucket established in the prior phase.

resource "influxdb_authorization" "signals_rw" {
org_id = influxdb_organization.iot.id
description = "Read & Write access signals bucket"

permissions = [{
action = "read"
resource = {
id = influxdb_bucket.signals.id
org_id = influxdb_organization.iot.id
type = "buckets"
}
},
{
action = "write"
resource = {
id = influxdb_bucket.signals.id
org_id = influxdb_organization.iot.id
type = "buckets"
}
}]
}
Terraform execution plan and apply results
API token shown in InfluxDB

Data Sources

With all the necessary resources created in InfluxDB to manage our time series data, we can now utilize datasources to list all the resources we’ve created.

A data source is accessed via a special kind of resource known as a data resource, declared using a data block.

data "influxdb_organization" "iot" {
name = "IoT"
}

output "iot_organization" {
value = data.influxdb_organization.iot
}

data "influxdb_bucket" "signals" {
name = "signals"
}

output "signals_bucket" {
value = data.influxdb_bucket.signals
}
Terraform execution plan and apply results

Additional Resources:

Conclusion:

Now that we’ve explored how to leverage Terraform for creating and managing InfluxDB resources, it’s time to start utilizing it. If you encounter any bugs or issues while using the provider, be sure to report them promptly.

--

--

Thulasiraj Komminar
Thulasiraj Komminar

Written by Thulasiraj Komminar

Industry 4.0 | Smart Manufacturing | IIoT | Data Platform Engineer | AWS Community Builder | Terraform | MLOps

No responses yet