1. Tout passe par l'API #
Donc tout s'automatise.
Principe #
Templates, politiques ILM et SLM, pipelines d'ingestion, rôles et clés d'API sont des appels d'API : les décrire en code permet de les revoir, de les tester et de reconstruire un cluster à l'identique.
2. Terraform #
Le fournisseur elasticstack.
Exemple #
terraform {
required_providers { elasticstack = { source = "elastic/elasticstack" } }
}
provider "elasticstack" {
elasticsearch {
endpoints = ["https://es01:9200"]
api_key = var.es_api_key
}
}
resource "elasticstack_elasticsearch_index_lifecycle" "logs_30d" {
name = "logs-30d"
hot {
rollover { max_primary_shard_size = "50gb", max_age = "1d" }
}
delete {
min_age = "30d"
delete {}
}
}
resource "elasticstack_elasticsearch_index_template" "nginx" {
name = "logs-nginx"
index_patterns = ["logs-nginx-*"]
priority = 200
data_stream {}
template {
settings = jsonencode({ "index.lifecycle.name" = elasticstack_elasticsearch_index_lifecycle.logs_30d.name })
}
}Erreur Courante : Un objet modifié à la main dans Kibana ou par l'API sera écrasé au prochain terraform apply : documentez que le code est la source de vérité et restreignez les droits d'écriture manuels en production.3. Ansible et CI/CD #
Installer et déployer.
Pratiques #
- Ansible pour installer et configurer les nœuds (paquets,
elasticsearch.yml, JVM, certificats) avec un redémarrage nœud par nœud. - Sur Kubernetes, ECK + GitOps (Argo CD, Flux) : le manifeste du cluster est dans Git.
- En CI : valider les templates sur un cluster éphémère (conteneur), simuler les pipelines (
_simulate), puis appliquer. - Des tests de non-régression de requêtes (résultats attendus) protègent la pertinence lors des changements de mapping.
