🔍

Elastic CloudのElasticsearchとプラグインをTerraformで管理する

2023/12/01に公開

この記事は 検索エンジンプロダクトを一緒に開発してた同窓会 Advent Calendar 2023 の1日目の記事です。

はじめに

Elastic CloudではブラウザからElasticsearchを作成すると使用できるバージョンが限られます。

しかし、使用するプラグインによっては対応バージョンが限られているため厳密に扱いたいことがあります。
TerraformでElastic Cloudリソースを管理することでバージョンを固定できたので、方法をまとめます。

Terraformでの管理方法

Providerを導入する

Elastic公式の ec を使用します。

Elastic Cloudの認証は Elastic Cloud Provider を参考にします。

API key認証とUsername and passwordログインがありますが、ここでは推奨されているAPI key認証で実施します。

Elastic CloudコンソールでAPI keyを発行し、以下のように認証します。

$ export EC_API_KEY="<apikey value>"
provider "ec" {
  apikey = "<apikey value>"
}

Elasticsearch deploymentを管理する

ec_deployment を参考にします。

設定項目が多いため、初めて作る際はElastic Cloudコンソールでdeploymentを作成し、作成されたリソースをimportするのが良さそうです。

terraform import ec_deployment.sample <resource id>

importしたdeployment

resource "ec_deployment" "sample" {
  name                   = "sample"
  region                 = "gcp-us-west1"
  version                = "8.8.1"
  deployment_template_id = "gcp-storage-optimized-v5"
  elasticsearch = {
    cold = {
      autoscaling = {}
    }
    hot = {
      autoscaling = {}
    }
    coordinating = {
      autoscaling = {}
    }
    frozen = {
      autoscaling = {}
    }
    master = {
      autoscaling = {}
    }
    ml = {
      autoscaling = {}
    }
    warm = {
      autoscaling = {}
    }
    config    = {}
    extension = []
  }
  observability = {}
  kibana = {
    config = {}
  }
}

プラグインを管理する

契約プランによってはElastic Cloud標準プラグイン以外は使用できないようなので、サポートに問い合わせるなどして有効にする必要があります。

プラグイン自体は ec_deployment_extension で管理することが可能ですが、サイズが大きくGitで管理するのが辛いこともあり、今回はElasticsearchのバージョンを固定化するのが主目的なので、ここではElastic Cloudコンソールから手動でアップロードする方法を取ります。

プラグインをアップロードして得られたURLなどを以下のようにdeploymentのextensionに設定します。

resource "ec_deployment" "sample" {
  ... 省略 ...
  
  elasticsearch = {
    ... 省略 ...
    
    extension = [
      {
        name    = "sudachi-3.1.0.zip"
        type    = "plugin"
        url     = "repo://01234567"
        version = "8.8.1"
      }
    ]
  }
}

まとめ

Elastic CloudのリソースをTerraformで管理できました。
Elasticsearchバージョンの管理を厳密に管理できるようになったのが大きいです。
今後はサイズの大きいプラグイン自体もTerraform管理できないかなと考えています。

参考文献

Discussion