Upgrade to Pro — share decks privately, control downloads, hide ads and more …

宣言的かつ安全に管理するElasticsearch/Declarative management for Elasticsearch

宣言的かつ安全に管理するElasticsearch/Declarative management for Elasticsearch

第49回Elasticsearch勉強会での発表資料です。
https://www.meetup.com/tokyo-elastic-fantastics/events/287299123/

Kazuma Arimura

August 31, 2022
Tweet

More Decks by Kazuma Arimura

Other Decks in Technology

Transcript

  1. 宣言的かつ安全に管理する
    Elasticsearch
    第49回Elasticsearch勉強会
    @pakio
    2022/08/31

    View full-size slide

  2. 2022
    自己紹介
    - 名前: 有村 和真
    - 所属: 株式会社メルカリ - US@Tokyo
    - @pakio
    - @paki0o

    View full-size slide

  3. 2022
    今回のゴール
    ● Elasticsearchにおける、いい感じの構成管理方法を整理する
    ● 可能な限りヒューマンエラーを減らす方法を考える

    View full-size slide

  4. 2022
    はじめにアンケートから
    インフラ周り、どれくらいIaC化、構成・設定のコード管理できていますか?
    1. 全く手つかず/取り組み中
    2. アプリケーション・データベース等はできているが、
    Esに関しては検討中
    3. Es含め完璧 🙆
    Zoomのチャット欄にて数字でご回答ください!

    View full-size slide

  5. 2022
    前提: PostgreSQLで考える構成管理
    一般的なデータベースの代表例として、PostgreSQLの管理についてまずは考えてみる
    ● 構成管理
    ○ バージョン、使用するインスタンス、セキュリティ関連の設定共にTerraformでサポートされている
    ○ RDS(AWS): Terraform - AWS Provider
    ○ Cloud SQL(GCP): Terraform - Google Cloud Platform Provider
    ● テーブル定義
    ○ sqldefやFlywayなどで別途ファイルに定義/管理
    → 基本的にデプロイ時のパイプライン内で完結

    View full-size slide

  6. 2022
    Elasticsearchの構成管理を考えてみる
    本題、Elasticsearchの構成管理ついて考えてみる
    ● 構成管理
    ○ ????
    ● インデックス定義等その他の管理
    ○ ????

    View full-size slide

  7. 2022
    Elasticsearchの構成管理を考えてみる
    本題、Elasticsearchの構成管理ついて考えてみる
    ● 構成管理
    ○ Opensearch(AWS): Terraform - AWS Provider
    ○ Elasticsearch Service(Elastic Cloud): Terraform - Elastic Cloud Provider
    ■ 2020/12にβ版が、2021/03にGA版リリースされている
    ■ ecctlが少し早い2019/12にβ版をリリースしているので、その選択肢を取っているところもあるかも?
    ● インデックス定義等その他の管理
    ○ ????

    View full-size slide

  8. 2022
    Terraform - Elastic Cloud Provider
    Elastic公式のTerraform Provider
    Deploymentの他、プラグインやカスタム辞書などの管理や
    トラフィックフィルタも宣言的に管理可能
    Pros
    ● 宣言的にクラスタの構成管理が可能
    ○ コードレビューができる
    ● ecctlと比較し、宣言が完結で管理も簡単
    ○ ecctlではDeployment IDの別途管理が必要
    ⇔ tfstate内に保存される為自前の管理が不要
    Cons
    ● UI上でサポートされている一部のコンフィグに
    未対応

    View full-size slide

  9. 2022
    Elasticsearchの構成管理を考えてみる
    ● 構成管理
    ○ Opensearch(AWS): Terraform - AWS Provider
    ○ Elasticsearch Service(Elastic Cloud): Terraform - Elastic Cloud Provider
    ● インデックス定義等その他の管理
    ○ Elasticsearch ~7.x: phillbaker/terraform-provider-elasticsearch
    ○ Elasticsearch 8.x~: Terraform Provider Elastic Stack

    View full-size slide

  10. 2022
    phillbaker/terraform-provider-elasticsearch
    有志開発のTerraform Provider
    初期リリースが2017年と歴史が長く、またOpenSearchにも対応
    Pros
    ● 開発が活発かつ、ユーザが多い
    ○ 公式: 6k, phillbaker: 60k (ダウンロード数/週)
    ● Mapping/Settings/Analysis周りの設定がJSONで
    定義可能なため、素のJSONファイルからも移行が容易
    ● SecurityやILM, Snapshot lifecycle, Userなどにも対応
    Cons
    ● Elasticsearch v8以降に関しては、
    後述の公式Terraform Providerへの移行を推奨(Issue)

    View full-size slide

  11. 2022
    Terraform Provider Elastic Stack
    Elastic社が中心に開発中の、公式Terraform Provider
    リリースが2021/12と比較的歴史が浅く、まだまだ発展途上
    Pros
    ● 前述のProviderでサポートされている設定に加えて、
    Ingest Pipelineの定義も可能
    Cons
    ● JSONで定義可能な設定が少なく、定義が複雑
    ○ settingsに関しては、ネストも非対応
    ○ analyzer等多くの設定を必要とする検索用途で
    は、現段階での移行は現実的ではなさそう

    View full-size slide

  12. 2022
    Terraform Provider Elastic Stack
    Elastic社が中心に開発中の、公式Terraform Provider
    リリースが2021/12と比較的歴史が浅く、まだまだ発展途上
    Pros
    ● 前述のProviderでサポートされている設定に加えて、
    Ingest Pipelineの定義も可能
    Cons
    ● JSONで定義可能な設定が少なく、定義が複雑
    ○ settingsに関しては、ネストも非対応
    ○ analyzer等多くの設定を必要とする検索用途で
    は、現段階での移行は現実的ではなさそう

    View full-size slide

  13. 2022
    Elasticsearchの構成管理を考えてみる
    ● 構成管理
    ○ Opensearch(AWS): Terraform - AWS Provider
    ○ Elasticsearch Service(Elastic Cloud): Terraform - Elastic Cloud Provider
    ● インデックス定義等その他の管理
    ○ Elasticsearch ~7.x: phillbaker/terraform-provider-elasticsearch
    ○ Elasticsearch 8.x~: Terraform Provider Elastic Stack

    View full-size slide

  14. 2022
    Elasticsearchの構成管理を考えてみる
    ● 構成管理
    ○ Opensearch(AWS): Terraform - AWS Provider
    ○ Elasticsearch Service(Elastic Cloud): Terraform - Elastic Cloud Provider
    ● インデックス定義等その他の管理
    ○ Elasticsearch ~7.x: phillbaker/terraform-provider-elasticsearch
    ○ Elasticsearch 8.x~: Terraform Provider Elastic Stack
    ○ 共通する課題としてインデックス定義のバリデーションができない

    View full-size slide

  15. 2022
    バリデーション問題
    Q. 右のインデックス定義で問題なく
    インデックスを作成できますか?

    View full-size slide

  16. 2022
    バリデーション問題
    Q. 右のインデックス定義で問題なく
    インデックスを作成できますか?

    🙅 setttingsになっています(typo)

    View full-size slide

  17. 2022
    バリデーション問題
    Q. 右のインデックス定義で問題なく
    インデックスを作成できますか?

    View full-size slide

  18. 2022
    バリデーション問題
    Q. 右のインデックス定義で問題なく
    インデックスを作成できますか?

    🙅 作成時にillegal_argument_exceptionになりま
    す(Invalid synonym rule)

    View full-size slide

  19. 2022
    Elasticsearchの構成管理を考えてみる
    ● 構成管理
    ○ Opensearch(AWS): Terraform - AWS Provider
    ○ Elasticsearch Service(Elastic Cloud): Terraform - Elastic Cloud Provider
    ● インデックス定義等その他の管理
    ○ Elasticsearch ~7.x: phillbaker/terraform-provider-elasticsearch
    ○ Elasticsearch 8.x~: Terraform Provider Elastic Stack
    ○ CI上でのバリデーション: Elasticsearch Github Action

    View full-size slide

  20. 2022
    Elasticsearch Github Action
    Elasticsearch Github Action
    Elasticから提供されている、Github Actions上にElasticsearchを構築するアクション。
    プラグインの導入/任意のセキュリティの設定も可能。
    → 他CIツールを利用している場合でも、CIプロセス上でElasticsearchの仮環境を構築すれば代替可能
    バリデーション方法
    CI上に構築された仮のElasticsearchを利用し実際に作成を試みることで、インデックス定義のバリデーションを行う
    ● Terraformを利用してインデックス管理をしている場合: CI上で terraform apply を実行
    ● JSON管理で管理している場合: curlで登録、もしくはeskeeperのような管理ツールを導入/CI上で実行

    View full-size slide

  21. 2022
    Elasticsearch Github Action
    デモ: GitHub

    View full-size slide

  22. 2022
    Elasticsearchの構成管理を考えてみる
    ● 構成管理
    ○ Opensearch(AWS): Terraform - AWS Provider
    ○ Elasticsearch Service(Elastic Cloud): Terraform - Elastic Cloud Provider
    ● インデックス定義等その他の管理
    ○ Elasticsearch ~7.x: phillbaker/terraform-provider-elasticsearch
    ○ Elasticsearch 8.x~: Terraform Provider Elastic Stack
    ○ CI上でのバリデーション: Elasticsearch Github Action

    View full-size slide

  23. 2022
    Elasticsearchの構成管理を考えてみる
    ● 構成管理
    ○ Opensearch(AWS): Terraform - AWS Provider
    ○ Elasticsearch Service(Elastic Cloud): Terraform - Elastic Cloud Provider
    ● インデックス定義等その他の管理
    ○ Elasticsearch ~7.x: phillbaker/terraform-provider-elasticsearch
    ○ Elasticsearch 8.x~: Terraform Provider Elastic Stack
    ○ CI上でのバリデーション: Elasticsearch Github Action
    → かなりな範囲をElastic公式ツール、もしくはクラウドプロバイダから提供されるツールでカバー可能
    = 安定運用💪

    View full-size slide

  24. 2022
    まとめ
    ● Elasticsearchの運用でもIaC + 自動テストで安定運用・構成管理が可能
    ● 直近1~2年で多くのツールが登場しており、一般的なアプローチもとれるように
    ● CI上でElasticsearchを立ち上げられる -> 品質のテストも可能に?

    View full-size slide

  25. 2022
    参考文献/リンク
    ● elastic/terraform-provider-elasticstack: Terraform provider for Elastic Stack
    ● phillbaker/terraform-provider-elasticsearch: An elasticsearch provider for terraform
    ● Elasticsearchのバージョンアップと検索基盤の改善 - ZOZO TECH BLOG
    ● po3rin/eskeeper: eskeeper synchronizes index and alias with configuration files while ensuring idempotency.
    ● elastic/elastic-github-actions: This action spins up an Elasticsearch instance that can be accessed and used ...

    View full-size slide