---
title: "Analytics - Getting started with Terraform"
url: https://docs.ovhcloud.com/pl/guides/public-cloud/data-analytics/analytics/analytics-order-terraform
lang: pl
lastUpdated: 2025-02-03
---
# Analytics - Getting started with Terraform

## Objective

Public Cloud Managed Analytics services allow you to focus on building and deploying cloud applications while OVHcloud takes care of the analytics infrastructure and maintenance.

**This guide explains how to order an OpenSearch instance of an Analytics service using Terraform.**

## Requirements

- [Terraform >= 0.17.1](https://www.terraform.io/) installed
- Access to the [OVHcloud API](https://eu.api.ovh.com/) (create your credentials by consulting [this guide](/pl/guides/manage-and-operate/api/first-steps.md))
- A [Public Cloud project](https://www.ovhcloud.com/pl/public-cloud/) in your OVHcloud account

## Instructions

### Step 1: Gather the OVHcloud required parameters

#### Getting your cluster/API tokens information

The "OVH provider" needs to be configured with a set of credentials:

- an `application_key`
- an `application_secret`
- a `consumer_key`

**Why?**

Because, behind the scenes, the "OVH Terraform provider" is doing requests to OVHcloud APIs.

In order to retrieve this necessary information, please follow our [First steps with the OVHcloud APIs](/pl/guides/manage-and-operate/api/first-steps.md) tutorial.

Specifically, you have to generate these credentials via the [OVHcloud token generation page](https://api.ovh.com/createToken?GET=/cloud/project/*/database/*\&POST=/cloud/project/*/database/*\&PUT=/cloud/project/*/database/*\&DELETE=/cloud/project/*/database/*) with the following rights:

![OVHcloud API rights](/images/guides/public-cloud/data-analytics/analytics/analytics-getting-started-terraform/api-rights.png)

When you have successfully generated your OVHcloud tokens, please save them as you will have to use them very soon.

The last needed information is the `service_name`: it is the ID of your Public Cloud project.

**How to get it?**

In the Public Cloud section, you can retrieve your service name ID thanks to the `Copy to clipboard` button.

![Copy paste service name](/images/guides/public-cloud/data-analytics/analytics/analytics-getting-started-terraform/get-service-name.png)

You will also use this information in Terraform resources definition files.

### Step 2: Gather the set of required parameters

In order to create a new OpenSearch cluster, you will need to specify at least:

- the _version_ (e.g. "2.0")
- the _region_ (e.g. "GRA")
- the _plan_ (e.g. "business")
- the _flavor_ of the cluster (e.g. "db1-7")

### Step 3: Create Terraform files

First, create a `main.tf` file defining the resources that will be created

```bash
terraform {
  required_providers {
    ovh = {
      source  = "ovh/ovh"
      version = "0.22"
    }
  }

  required_version = ">= 0.17.1"
}

provider "ovh" {
  endpoint           = var.ovh.endpoint
  application_key    = var.ovh.application_key
  application_secret = var.ovh.application_secret
  consumer_key       = var.ovh.consumer_key
}

resource "ovh_cloud_project_database" "service" {
  service_name = var.product.project_id
  description  = var.product.name
  engine       = "opensearch"
  version      = var.product.version
  plan         = var.product.plan
  nodes {
    region = var.product.region
  }
  flavor = var.product.flavor
}

resource "ovh_cloud_project_database_opensearch_user" "analyticsuser" {
  service_name = ovh_cloud_project_database.service.service_name
  cluster_id   = ovh_cloud_project_database.service.id
  name         = var.access.name
}

resource "ovh_cloud_project_database_ip_restriction" "iprestriction" {
  service_name = ovh_cloud_project_database.service.service_name
  engine       = ovh_cloud_project_database.service.engine
  cluster_id   = ovh_cloud_project_database.service.id
  ip           = var.access.ip
}
```

Then, create a `variables.tf` file defining the variables used in `main.tf`:

```bash
variable "ovh" {
  type = map(string)
  default = {
    endpoint           = "ovh-eu"
    application_key    = ""
    application_secret = ""
    consumer_key       = ""
  }
}

variable "product" {
  type = map(string)
  default = {
    name       = "opensearch-terraform"
    project_id = ""
    region     = "GRA"
    plan       = "business"
    flavor     = "db1-7"
    version    = "2.0"
  }
}

variable "access" {
  type = map(string)
  default = {
    name = "johndoe"
    ip = "xx.xx.xx.xx/32"
  }
}
```

Here, we defined the `ovh-eu` endpoint because we want to call the OVHcloud Europe API. Other endpoints exist, depending on your needs:

- `ovh-eu` for OVHcloud Europe API
- `ovh-ca` for OVHcloud North-America API

Then, create a `secrets.tfvars` file containing the required variables values:

```bash
ovh = {
  endpoint           = "ovh-eu"
  application_key    = "<application_key>"
  application_secret = "<application_secret>"
  consumer_key       = "<consumer_key>"
}

product = {
  project_id = "`<service_name>`"
  name       = "opensearch-terraform"
  region     = "GRA"
  plan       = "business"
  flavor     = "db1-7"
  version    = "2.0"
}

access = {
  name = "johndoe"
  ip = "<ip_range>"
}
```

:::info
Don't forget to replace `<service_name>`, `<application_key>`, `<application_secret>`, `<consumer_key>`, `<ip_range>` by the real data.
:::

Finally, create an `outputs.tf` file defining the resources that will be exported:

```bash
output "cluster_uri" {
  value = ovh_cloud_project_database.service.endpoints.0.uri
}

output "user_name" {
  value = ovh_cloud_project_database_opensearch_user.analyticsuser.name
}

output "user_password" {
  value     = ovh_cloud_project_database_opensearch_user.analyticsuser.password
  sensitive = true
}
```

### Step 4: Run

Now we need to initialise Terraform, generate a plan, and apply it.

```bash
$ terraform init
```

The [init](https://www.terraform.io/cli/commands/init) command will initialize your working directory which contains `.tf` configuration files.

It's the first command to execute for a new configuration, or after doing a checkout of an existing configuration in a given git repository for example.

The `init` command will:

- Download and install Terraform providers/plugins
- Initialise backend (if defined)
- Download and install modules (if defined)

Now, we can generate our plan:

```bash
$ terraform plan -var-file=secrets.tfvars
```

Thanks to the [plan](https://www.terraform.io/cli/commands/plan) command, we can check what Terraform wants to create, modify or remove.

The plan is OK for us, so let's [apply](https://www.terraform.io/cli/commands/apply) it:

```bash
$ terraform apply -var-file=secrets.tfvars -auto-approve
```

Finally export the user credentials and the URI:

```bash
export PASSWORD=$(terraform output -raw user_password)
export USER=$(terraform output -raw user_name)
export URI=$(terraform output -raw cluster_uri)
```

And that's it, the OpenSearch cluster is created.

## How to deploy with Another engine

In this guide, we explained how to deploy an OpenSearch service but you can find example for Kafka service here and tweak them according to your needs :

[https://github.com/ovh/public-cloud-databases-examples/tree/main/databases/kafka/terraform/hello-world](https://github.com/ovh/public-cloud-databases-examples/tree/main/databases/kafka/terraform/hello-world)

## Go further

[OpenSearch capabilities](/pl/guides/public-cloud/databases/opensearch-capabilities.md)

[Starting with OpenSearch analytics service](/pl/guides/public-cloud/databases/opensearch-getting-started.md)

[Configuring vRack for Public Cloud](/pl/guides/public-cloud/network-services/vrack.md)

Visit our dedicated Discord channel: [https://discord.gg/ovhcloud](https://discord.gg/ovhcloud). Ask questions, provide feedback and interact directly with the team that builds our Analytics services.

If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](https://www.ovhcloud.com/pl/professional-services/) to get a quote and ask our Professional Services experts for a custom analysis of your project.

Join our [community of users](https://community.ovhcloud.com/).
