Déployer un cluster Elasticsearch dans Elastic Cloud

Cet article vous permettra de déployer un simple cluster Elasticsearch au sein de Elastic Cloud. Ce service est directement proposé par Elastic.

Votre cluster sera déployé soit chez Google Cloud, AWS ou Microsoft Azure.

Premiers pas

Avant de commencer le déploiement du cluster, vous aurez besoin :

Vous pouvez profiter d'un essai Elastic Cloud de 14 jours en utilisant le lien non sponsorisé : Lien vers la création d'un compte d'essai.

Préparation du projet

Création d'une clé API

Pour le déploiement, nous allons avoir besoin d'une clé. Pour créer cette dernière, connectez-vous à votre compte Elastic Cloud et ouvrez la page API Keys.

Vous pouvez accéder à cette page manuellement, en cliquant sur Elasticsearch Service depuis la page Home. Depuis la navigation de gauche, cliquez sur Features puis sur la page API Keys.

Depuis la page API Keys, vous avez la liste des clés API que vous avez créées. Pour créer une nouvelle clé, cliquez sur le bouton Generate API key. Pour l'article, nous allons utiliser le nom terraform. Vous êtes libre d'utiliser le nom que vous souhaitez. Cliquer ensuite sur Generate API key. Cliquer ensuite sur Download API key.

Création de l'environnement local

Dans votre ordinateur, créer le dossier du projet, par exemple deploy-elastic. Au sein de ce dossier, créer les fichiers Terraform suivant :

  • main.tf
  • outputs.tf
  • variables.tf

Le fichier main.tf contiendra l'ensemble de nos directives ou de notre configuration nécessaire au déploiement du cluster.

Le fichier outputs.tf contiendra les déclarations permettant d'afficher des données qui pourront être réutilisées, notamment lorsque l'on utilise des modules.

Le fichier variables.tf contiendra les variables qui personnaliseront notre cluster.

Déploiement du cluster

Importation du provider

Pour déployer notre cluster, nous avons besoin du provider Google. Pour cela, nous allons ajouter dans le fichier main.tf le contenu ci-dessous :

terraform {
  required_providers {
    ec = {
      source  = "elastic/ec"
      version = "0.3.0"
    }
  }
}

provider "ec" {
  apikey = "<apiKey>"
}

Le premier bloc permet d'indiquer à Terraform que l'on souhaite utiliser le provider ec. Voici le lien vers la documentation du provider ec.

Le deuxième bloc permet de s'authentifier auprès d'Elastic pour la création de notre cluster. Avant de continuer, remplacer "<apiKey>" par var.ec_apikey. Et ajouter, dans le fichier variables.tf, le bloc ci-dessous :

variable "ec_apikey" {
type = string
}

Le résultat doit être le suivant :

terraform {
  required_providers {
    ec = {
      source  = "elastic/ec"
      version = "0.3.0"
    }
  }
}

provider "ec" {
  apikey = var.ec_apikey
}

Lancer la commande terraform init pour initialiser votre projet Terraform. Cette commande va télécharger le provider ec dans le dossier de notre projet.

Si vous lancez la commande terraform plan, il vous sera demandé de renseigner la valeur de la variable ec_apikey. Pour plus de sécurité et pour éviter d'avoir à recopier la valeur de la variable à chaque exécution, nous allons créer une variable d'environnement de la clé API que nous avons créé précédemment, pour ce faire, lancer la commande suivante :

export TF_VAR_ec_apikey=$(cat <chemin-vers-nom-token>)

En ajoutant TF_VAR_ avant le nom de notre variable, Terraform effectuera une recherche des variables d'environnements lors de l'exécution d'une commande terraform .... Ceci est recommandé lors d'une automatisation d'un déploiement avec GitLab Ci, par exemple. N'oubliez pas de remplacer <chemin-vers-nom-token> par le chemin vers le fichier que nous avons téléchargé lors de la création de la clé API.

Vous pouvez, à nouveau, exécuter la commande terraform plan pour contrôler que la variable d'environnement est bien passée à Terraform. La sortie de la commande doit être la suivante :

No changes. Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.

Définition du cluster

La définition d'un cluster est définie par 2 directives ec_stack et ec_deployment. La première est une directive de type Data Sources qui permet de définir la version Elasticsearch souhaitée ainsi que la région de déploiement.

La seconde directive, de type Ressources permet de définir la configuration du cluster.

Vous trouverez, ci-dessous, les 2 directives à ajouter au fichier main.tf pour déployer un cluster Elasticsearch le plus simple possible.

data "ec_stack" "stack" {
    version_regex = "7.15.2"
    region        = var.region
}

resource "ec_deployment" "elasticsearch_cluster" {
    name = "mon-cluster"

    region                 = data.ec_stack.stack.region
    version                = data.ec_stack.stack.version_regex
    deployment_template_id = "gcp-storage-optimized"

    elasticsearch {
        autoscale = "false"

        topology {
            id            = "hot_content"
            size_resource = "memory"
            size          = "1g"
            zone_count    = 1
        }
    }

    kibana {
        topology {
            size_resource = "memory"
            size          = "1g"
            zone_count    = 1
        }
    }
}

Ajouter la variable, ci-dessous, dans le fichier variables.tf :

variable "region" {
    type    = string
    default = "gcp-europe-west1"
}

En lançant la commande terraform apply, vous déploierez un cluster Elasticsearch dans un datacenter Google en Belgique. Une fois terminé, ouvrez votre navigateur et afficher la liste des déploiements dans votre compte Elastic, Lien vers la page des déploiements.

Cliquez sur mon-cluster pour afficher les détails du déploiement, vous remarquez, en bas de page, qu'il existe une seule instance d'Elasticsearch ainsi qu'une seule instance de Kibana.

Si vous souhaitez personnaliser davantage votre cluster, notamment la région ou le template de déploiement, vous retrouverez, voici la liste des liens pour le déploiement d'un cluster Elasticsearch :

Si vous souhaitez déployer plusieurs instances d'Elasticsearch, et/ou de Kibana, vous pouvez modifier la valeur de zone_count.

Je vous invite à lire la documentation du provider Terraform ec pour avoir plus d'informations sur les possibilités qui vous sont offertes pour le déploiement de votre cluster.

Destruction du cluster

Pour procéder à la destruction du cluster, il faut lancer la commande : terraform destroy pour détruire le cluster et la commande unset TF_VAR_ec_apikey pour supprimer la variable d'environnement.

N'oubliez pas de vous rendre dans la page des clés d'API de votre compte Elastic pour révoquer la clé que nous avons créée.

Liens utiles