Elastic Certified Engineer Exam対策 – Index TemplateとComponent Template

Training banner: a trainer at a board teaching Elastic Certified Engineer concepts, with bold 'TRAINING' text overlay and Japanese script トレーニング

このブログの目的

本ブログシリーズの目的は、Elastic Certified Engineer Examの合格に必要な知識と技術を体系的に習得することです。Elastic Certified Engineer Examでは、Elasticsearchの運用や設計に関する実践的なスキルが問われます。本記事は、その試験範囲の中でも、Elastic社が公開している試験ガイドに記載されている以下の項目に対応しています。

Data Management – Define an index that satisfies a given set of requirements

この試験範囲では、要件に応じたIndex設計を行うために必要となる、Index Template、Component Template、Mappings、Aliases、Settings、Templateの優先順位(priority)などの理解が求められます。

本記事では、単なる概念説明にとどまらず、実際のコマンド実行例や動作確認手順を通じて、試験で求められる実践的なスキルを身に付けることを目指します。また、Elastic Certified Engineer Exam対策だけでなく、実際のElasticsearch運用においても役立つ知識を習得できるよう構成しています。

ぜひ実際にコマンドを実行しながら学習を進め、試験合格と実践的な技術力の向上につなげてください。

試験情報は以下サイトで確認可能

<https://www.elastic.co/training/elastic-certified-engineer-exam>

Index Templateとは

Index Templateは、新しく作成されるIndexに対して、あらかじめ設定やマッピングを自動適用するための仕組みです。対象となるIndex名のパターン(例: logs-*)を指定しておくことで、Index作成時にsettings、mappings、aliasesなどの定義を自動的に反映できます。これにより、運用担当者がIndexごとに同じ設定を繰り返し作成する必要がなくなり、設定ミスの防止や運用の標準化を実現できます。

上図に記載されている処理の流れを箇条書きにすると、以下のようになります。

  1. クライアントが POST my-logs-2026.06.05/_doc を実行し、Documentを投入する
  2. Elasticsearchは、指定されたIndex(my-logs-2026.06.05)が既に存在するか確認する Indexが存在する場合
  3. そのまま既存IndexへDocumentを投入する Indexが存在しない場合
  4. Index名に一致する index_patterns を持つIndex Templateを検索する
  5. 該当するIndex Templateが見つかった場合は、そのTemplateの設定を適用する
  6. Templateに定義された Settings、Mappings、Aliases を利用して新しいIndexを作成する
  7. 作成したIndexへDocumentを投入する

Index Templateがなぜ必要か

Index Templateが必要となる最大の理由は、新しく作成されるIndexに対して設定やマッピングを自動的かつ一貫して適用するためです。Elasticsearchでは、ユーザーが直接Indexを作成する場合だけでなく、ILMによるRolloverやData StreamによるBacking Index生成など、さまざまな場面で新しいIndexが作成されます。その際、毎回settingsやmappingsを手動で定義するのは非効率であり、設定漏れや不整合の原因となります。Index Templateを利用することで、Index名のパターンに応じて必要な設定を自動適用できるため、運用の標準化と管理負荷の軽減を実現できます。

Index Template 作成コマンド

以下は、”logs_template”という名称で、Index Templateを作成するコマンドです。

PUT _index_template/my_logs_template
{
  "index_patterns": [
    "my-logs-*"
  ],
  "priority": 100,
  "template": {
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 1,
      "index.lifecycle.name": "logs_policy",
      "index.lifecycle.rollover_alias": "my-logs",
      "index.routing.allocation.include._tier_preference": "data_hot",
      "index.refresh_interval": "30s",
      "index.codec": "best_compression"
    }
  }
}
項目説明
index_patternsこのテンプレートを適用する対象Index名のパターンを指定します。新規作成されるIndex名が “my-logs-*” に一致した場合、自動的に本テンプレートが適用されます。
priority複数のIndex Templateが同じIndexに適用可能な場合の優先順位を指定します。数値が大きいほど優先されます。
templateIndex作成時に適用する設定内容を定義する領域です。settings、mappings、aliasesなどを配下に定義できます。

Index Template作成コマンドの細かな設定内容については、以下の公式Documentを参照してください。

Elastic Docs > manage data > The Elasticsearch data store > Templates

https://www.elastic.co/docs/manage-data/data-store/templates

Elastic Docs API > Index

https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-index-template

mappingの定義がない状態で、Dataを投入するとどうなるか

前述のIndex Templateでは、settingsのみを定義しており、mappingsは定義していません。この状態で、以下Data Ingestコマンド(データ投入コマンド)で、まだ存在しないIndexに対してDocumentを投入してみます。

POST my-logs-2026.06.05/_doc
{
  "@timestamp": "2026-06-05T10:00:00Z",
  "host": "server01",
  "status": 200,
  "response_time": 123.45,
  "success": true,
  "message": "Application started successfully"
}

この時、”my-logs-2026.06.05”は存在しませんが、Elasticsearchは自動的にIndexを作成します。また、Index名が “my-logs-*”に一致するため、先ほど作成したIndex Templateが適用されます。

しかし、このTemplateにはMapping定義が存在しません。そのため、ElasticsearchはDynamic Mapping機能を利用して、投入されたデータから各フィールドの型を自動判定し、Mappingを生成します。

作成されたMappingは以下のコマンドで確認できます。

GET my-logs-2026.06.05/_mapping

実行すると、以下のようなMappingが生成されていることが確認できます。

{
  "my-logs-2026.06.05": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "host": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "message": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "response_time": {
          "type": "float"
        },
        "status": {
          "type": "long"
        },
        "success": {
          "type": "boolean"
        }
      }
    }
  }
}

このように、Mappingが定義されていない場合でも、ElasticsearchはDynamic Mappingによって自動的にMappingを生成し、データを格納できます。

一方で、自動判定された型が必ずしも期待通りになるとは限りません。例えばIPアドレスは文字列として認識されるため、自動的にip型にはなりません。また、一度作成されたMappingの型は後から変更できないため、運用環境では事前に適切なMappingを定義しておくことが推奨されます。

Dynamic Mappingは迅速にデータ投入を開始できる便利な機能ですが、本番環境では意図しない型定義によるトラブルを防ぐためにも、明示的なMapping設計を行うことが重要です。

Component Templateとは

Component Templateは、Index Templateで利用する設定部品を再利用可能な形で管理するための仕組みです。settingsやmappings、aliasesの定義を個別のComponent Templateとして作成し、それらを複数のIndex Templateから参照できます。例えば、共通のシャード設定やログデータ向けのマッピング定義をComponent Templateとして切り出しておけば、複数のIndex Templateで同じ設定を共有できるため、管理が容易になります。また、設定変更が発生した場合も、Component Templateを更新するだけで関連するテンプレートへ反映できるため、運用効率の向上や設定の一貫性維持に役立ちます。大規模環境では特に重要な機能であり、Elastic Certified Engineer Examでも理解しておきたいポイントの一つです。

上図では、Component Template 1と2が複数のIndex Templateで共有されており、それぞれのIndex Templateは用途に応じて異なるComponent Templateを組み合わせています。これにより、共通設定の一元管理と設定の再利用が可能となり、運用効率や保守性を向上させることができます。

Component Templateの作成と使用コマンド例

Component Templateは、Index Templateで利用するsettings、mappings、aliasesなどの設定を部品化して管理するための仕組みです。ここでは、ログIndexで利用する共通のMapping定義をComponent Templateとして作成し、それをIndex Templateから参照する例を確認します。

まず、ログデータ向けのMappingをComponent Templateとして作成します。

PUT _component_template/my_logs_mappings_component
{
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "host": {
          "type": "keyword"
        },
        "client_ip": {
          "type": "ip"
        },
        "status": {
          "type": "integer"
        },
        "response_time": {
          "type": "float"
        },
        "success": {
          "type": "boolean"
        },
        "message": {
          "type": "text"
        }
      }
    }
  }
}

このコマンドでは、my_logs_mappings_component というComponent Templateを作成しています。template配下のmappingsには、ログデータで利用する各フィールドの型を定義しています。例えば、@timestampはdate型、hostはkeyword型、client_ipはip型として定義しています。これにより、複数のIndex Templateから同じMapping定義を再利用できるようになります。

作成したComponent Templateは、以下のコマンドで確認できます。

GET _component_template/my_logs_mappings_component

続いて、このComponent Templateを利用するIndex Templateを作成します。

PUT _index_template/my_logs_template
{
  "index_patterns": [
    "my-logs-*"
  ],
  "priority": 100,
  "composed_of": [
    "my_logs_mappings_component"
  ],
  "template": {
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 1
    },
    "aliases": {
      "logs": {}
    }
  }
}

このIndex Templateでは、composed_ofに my_logs_mappings_component を指定しています。これにより、Index Template自体にはmappingsを直接記述していませんが、Component Templateで定義したMappingが組み込まれます。

また、この例ではIndex Template側にsettingsとaliasesを直接定義しています。つまり、MappingはComponent Templateから再利用し、Index固有のsettingsやaliasesはIndex Template側で定義する構成です。

このTemplateが適用されるIndexへDocumentを投入すると、ElasticsearchはIndex名が my-logs-* に一致することを確認し、Index Templateを適用します。その際、composed_ofで指定されたComponent Templateも合わせて適用されるため、作成されるIndexにはComponent Templateで定義したMappingが反映されます。

例えば、以下のようにDocumentを投入します。

POST my-logs-2026.06.05/_doc
{
  "@timestamp": "2026-06-05T10:00:00Z",
  "host": "server01",
  "client_ip": "192.168.1.100",
  "status": 200,
  "response_time": 123.45,
  "success": true,
  "message": "Application started successfully"
}

投入後、以下のコマンドでMappingを確認できます。

GET my-logs-2026.06.05/_mapping

確認すると、client_ipがip型、hostがkeyword型など、Component Templateで定義したMappingがIndexに反映されていることが分かります。

このようにComponent Templateを利用することで、共通のMappingやSettingsを部品として管理し、複数のIndex Templateから再利用できます。大規模なElasticsearch環境では、同じ定義を何度も記述する必要がなくなり、設定の一貫性を保ちやすくなります。

テンプレートの優先順位

複数のIndex Templateが同じIndex名に適用可能な場合、どのテンプレートの設定を採用するかを決定するために「優先順位(priority)」が使用されます。例えば、logs-* に適用されるテンプレートと logs-app-* に適用されるテンプレートが存在する場合、logs-app-prod のようなIndexは両方の条件に一致します。このような場合、より高いpriorityが設定されたIndex Templateの定義が優先されます。適切に優先順位を設計することで、共通設定を広範囲に適用しつつ、特定用途向けの設定のみを上書きすることが可能になります。テンプレートの競合は試験でも頻出のテーマであり、priorityによる動作を正しく理解しておくことが重要です。

settings定義

settingsは、Indexの動作や保存方法を制御するための設定です。Index Templateでは、新しく作成されるIndexに対して共通のsettingsを自動適用できます。代表的な設定として、シャード数(number_of_shards)、レプリカ数(number_of_replicas)、ILMポリシー、アナライザーなどがあります。これらをテンプレートに定義しておくことで、作成されるIndexごとに同じ設定を手動で指定する必要がなくなり、運用の標準化や設定ミスの防止につながります。

それでは実際のコマンドから、設定内容を確認していきます。

PUT _index_template/my_logs_template
{
  "index_patterns": [
    "my-logs-*"
  ],
  "priority": 100,
  "template": {
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 1,
      "index.lifecycle.name": "logs_policy",
      "index.lifecycle.rollover_alias": "my-logs",
      "index.routing.allocation.include._tier_preference": "data_hot",
      "index.refresh_interval": "30s",
      "index.codec": "best_compression"
    }
  }
}

上記のsettingsでは、Indexの構成や配置先、ライフサイクル管理などを定義しています。

設定項目設定値説明
number_of_shards3Primary Shard数を指定します。この例では3つのPrimary Shardが作成されます。
number_of_replicas1Replica Shard数を指定します。各Primary Shardに対して1つのReplicaが作成されます。
index.lifecycle.namelogs_policyIndexに適用するILM(Index Lifecycle Management)ポリシー名を指定します。
index.lifecycle.rollover_aliasmy-logsILMによるRolloverで利用するAlias名を指定します。
index.routing.allocation.include._tier_preferencedata_hotIndexを優先的に配置するData Tierを指定します。この例ではHot Tierへの配置を優先します。
index.refresh_interval30sRefreshの実行間隔を指定します。Document投入後、検索可能になるまでの間隔に影響します。
index.codecbest_compression保存時の圧縮方式を指定します。ディスク使用量を削減できますが、圧縮・展開時のCPU負荷は増加します。

このようにsettingsでは、Indexの性能や可用性、保存効率、データ配置ポリシーなどを制御できます。特にElastic Certified Engineer Examでは、シャード数、レプリカ数、ILM関連設定、Data Tier関連設定の理解が重要となります。

mappings定義

mappingsは、Documentの各フィールドをどのデータ型として格納するかを定義する設定です。Elasticsearchでは、Mappingを定義しなくてもDynamic Mappingによって自動的にフィールド型が決定されます。しかし、自動判定された型が必ずしも意図通りになるとは限りません。例えばIPアドレスは文字列として扱われるため、自動的にip型にはなりません。また、一度作成されたMappingの型は後から変更できないため、運用環境では事前にMappingを定義しておくことが推奨されます。Index TemplateにMappingを定義しておくことで、新規作成されるIndexへ一貫したフィールド定義を適用でき、検索精度や集計性能の向上、運用トラブルの防止につながります。

それでは実際に、mappingsを定義したIndex Templateを作成してみます。

PUT _index_template/my_logs_template
{
  "index_patterns": [
    "my-logs-*"
  ],
  "priority": 100,
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "host": {
          "type": "keyword"
        },
        "client_ip": {
          "type": "ip"
        },
        "status": {
          "type": "integer"
        },
        "response_time": {
          "type": "float"
        },
        "success": {
          "type": "boolean"
        },
        "message": {
          "type": "text"
        }
      }
    }
  }
}

このTemplateでは、ログデータでよく利用されるフィールドに対して、事前にデータ型を定義しています。特にclient_ipをip型、hostをkeyword型として定義することで、後続の検索や集計を効率的に実行できるようになります。

続いて、このTemplateが適用されるDocumentを投入します。

POST my-logs-2026.06.05-2/_doc
{
  "@timestamp": "2026-06-05T10:00:00Z",
  "host": "server01",
  "client_ip": "192.168.1.100",
  "status": 200,
  "response_time": 123.45,
  "success": true,
  "message": "Application started successfully"
}

投入時点では”my-logs-2026.06.05-2”というIndexは存在しませんが、Elasticsearchは自動的にIndexを作成し、Index名が「my-logs-*」に一致するため、先ほど作成したIndex Templateを適用します。

作成されたMappingは以下のコマンドで確認できます。

GET my-logs-2026.06.05-2/_mapping

確認すると、Dynamic Mappingによる型推測ではなく、Templateで定義したMappingがそのまま適用されていることが分かります。例えばclient_ipは文字列ではなくip型として登録され、hostはtext型ではなくkeyword型として登録されます。このようにMappingを事前定義することで、フィールド型を意図通りに制御できるため、本番環境ではDynamic Mappingに依存するよりも、明示的なMapping定義を行うことが推奨されます。

以下コマンドで、上記indexに対する検索を実施し、登録データを確認します。

get my-logs-2026.06.05-2/_search

aliases定義

aliasesは、1つ以上のIndexに対して別名(Alias)を付与する機能です。アプリケーションやユーザーは実際のIndex名ではなくAlias名を使用してデータの検索や更新を行うことができます。これにより、Index名が変更された場合でもアプリケーション側の設定変更を不要にできるほか、複数Indexを1つの論理的なIndexとして扱うことも可能になります。また、ILMのRollover機能ではAliasを利用して書き込み先Indexを切り替えるため、運用上も重要な役割を持っています。

それでは実際に、aliasesを定義したIndex Templateを作成してみます。

PUT _index_template/my_logs_template
{
  "index_patterns": [
    "my-logs-*"
  ],
  "priority": 100,
  "template": {
    "aliases": {
      "logs": {}
    }
  }
}

このTemplateでは、”my-logs-*” に一致するIndexが作成された際、自動的に “logs” というAliasが付与されます。これにより、実際のIndex名を意識せずにAlias経由でデータへアクセスできるようになります。

aliasesが必要となる代表的なケースとして、以下があります。

  • アプリケーションから固定名でIndexへアクセスしたい場合
  • ILMのRolloverで書き込み先Indexを切り替える場合
  • 複数Indexを1つの論理的なIndexとして検索したい場合
  • Index名変更時のアプリケーション修正を避けたい場合

続いて、このTemplateが適用されるDocumentを投入します。

POST my-logs-2026.06.05/_doc
{
  "@timestamp": "2026-06-05T10:00:00Z",
  "host": "server01",
  "message": "Application started successfully"
}
POST my-logs-2026.06.06/_doc
{
  "@timestamp": "2026-06-06T09:15:00Z",
  "host": "server02",
  "message": "Application processing request"
}
POST my-logs-2026.06.07/_doc
{
  "@timestamp": "2026-06-07T14:30:00Z",
  "host": "server03",
  "message": "Application completed request"
}

投入時点では各Indexは存在しませんが、Elasticsearchは自動的にIndexを作成し、Index名が “my-logs-*” に一致するため、先ほど作成したIndex Templateを適用します。また、Templateで定義されたAliasも各Indexへ自動的に付与されます。

作成されたAliasは以下のコマンドで確認できます。

GET _alias/logs

実行すると、Alias “logs” が複数のIndexに紐付いていることを確認できます。

Aliasを利用した検索は以下のように実行できます。

GET logs/_search

この検索では、Alias “logs” に紐付いたすべてのIndexが検索対象となります。そのため、個々のIndex名を指定しなくても、複数Indexに格納されたログデータをまとめて検索できます。

このようにAliasを利用することで、アプリケーションと実際のIndex構成を分離できるため、運用性や拡張性を大幅に向上させることができます。特にILMによるRolloverや大規模ログ基盤では頻繁に利用される重要な機能です。

なお、本章ではAliasの動作を分かりやすく説明するために、”my-logs-2026.06.05” や “my-logs-2026.06.06 ”のような日付付きIndex名を例として使用しています。しかし、これはあくまで学習・検証用途を想定したサンプル構成です。

実際の本番環境では、日単位で新しいIndexを作成すると、データ量に対して過剰な数のIndexやShardが生成される場合があります。IndexやShardが増えすぎると、クラスタ管理コストの増加や検索性能の低下につながる可能性があります。

そのため本番環境では、「1日ごとにIndexを作成する」という考え方ではなく、データ量や保持期間を考慮して適切なShardサイズとなるよう設計することが重要です。近年ではData StreamとILM(Index Lifecycle Management)を組み合わせ、一定サイズや一定期間でRolloverする構成が一般的となっています。

本資料で使用している日付付きIndex名は、Index TemplateやAliasの動作を理解するためのサンプルであり、本番環境でのIndex設計をそのまま推奨するものではありません。

シミュレーション機能

Index Templateを作成した後、「実際にどのTemplateが適用されるのか」「複数のTemplateが存在する場合にどの設定が採用されるのか」を事前に確認したいケースがあります。そのような場合に利用できるのがシミュレーション機能です。

特に本番環境では、複数のIndex TemplateやComponent Templateが存在することが一般的です。そのため、意図した設定が適用されるかを事前に確認せずに運用を開始すると、想定外のMappingやSettingsが適用される可能性があります。シミュレーション機能を利用することで、実際にIndexを作成することなく、適用結果を安全に確認できます。

例えば、以下のTemplateが存在するとします。

PUT _index_template/my_logs_template
{
  "index_patterns": [
    "my-logs-*"
  ],
  "priority": 100,
  "template": {
    "settings": {
      "number_of_shards": 3
    },
    "mappings": {
      "properties": {
        "host": {
          "type": "keyword"
        }
      }
    }
  }
}

このTemplateが実際にどのように適用されるかは、以下のシミュレーションコマンドで確認できます。

POST _index_template/_simulate_index/my-logs-2026.06.05

実行すると、指定したIndex名に対して適用されるIndex TemplateやComponent Templateが評価され、最終的なSettingsやMappingsが返却されます。

結果には以下のような情報が含まれます。

{
  "template": {
    "settings": {
      "index": {
        "number_of_shards": "3"
      }
    },
    "mappings": {
      "properties": {
        "host": {
          "type": "keyword"
        }
      }
    }
  }
}

この結果から、Index名「my-logs-2026.06.05」に対して、どのようなSettingsやMappingsが使用されるのかを確認できます。

シミュレーション機能は、以下のような場面で特に有効です。

  • Template作成後の動作確認
  • 複数Templateの競合確認
  • priorityの動作確認
  • Component Templateの組み合わせ結果の確認
  • 本番投入前の事前検証

このシミュレートコマンドに関する公式ドキュメントは以下となります。

Elastic Docs > Manage data > The Elasticsearch data store > Templates > Simulate multi-component templates

https://www.elastic.co/docs/manage-data/data-store/templates/simulate-multi-component-templates

Elastic Docs API > Index > Simulate an index

https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-simulate-index-template

テンプレート適用確認方法

Index Templateを作成した後、「実際にTemplateが適用されたのか」を確認したいケースがあります。例えば、Indexが期待した設定で作成されているか、Mappingが正しく適用されているか、Aliasが付与されているかなどを確認することで、Templateの設定ミスや優先順位の競合を早期に発見できます。

まず、Templateが適用されるIndexへDocumentを投入します。

POST my-logs-2026.06.10/_doc
{
  "@timestamp": "2026-06-10T10:00:00Z",
  "host": "server01",
  "client_ip": "192.168.1.100",
  "status": 200,
  "response_time": 123.45,
  "success": true,
  "message": "Application started successfully"
}

投入時に対象Indexが存在しない場合、Elasticsearchは自動的にIndexを作成します。このとき、Index名がTemplateの “index_patterns”に一致していれば、Index Templateが適用されます。

まず、作成されたIndexを確認します。

GET _cat/indices/my-logs-*?v

実行すると、以下のように作成されたIndexを確認できます。

続いて、Templateで定義したMappingが適用されているか確認します。

GET my-logs-2026.06.10/_mapping

例えば以下のような結果が確認できます。

この結果から、Templateで定義した Fieldの型が適用されているか、確認することができます。

続いて、Settingsを確認します。

GET my-logs-2026.06.10/_settings

実行すると、Templateで定義したシャード数やレプリカ数などを確認できます。

{
  "my-logs-2026.06.10": {
    "settings": {
      "index": {
        "number_of_shards": "1",
        "number_of_replicas": "1"
      }
    }
  }
}

Aliasを定義している場合は、以下のコマンドで確認できます。

GET _alias/logs

これにより、AliasとIndexの関連付けを確認できます。

また、どのIndex Templateが存在しているかを確認したい場合は、以下のコマンドを使用します。

GET _index_template

特定のTemplateのみ確認したい場合は、Template名を指定できます。

GET _index_template/my_logs_template

このように、Template適用後は “_mapping”、”_settings”、”_alias”、”_cat/indices” を組み合わせることで、期待した設定が適用されているかを確認できます。本番環境では、Template作成後にこれらの確認を実施することで、設定ミスやTemplate競合によるトラブルを未然に防ぐことができます。

Component Templateの組み合わせ

Component Templateは、Settings・Mappings・Aliasesなどの設定を部品化し、複数のIndex Templateから再利用できる仕組みです。大規模環境では、共通設定を複数のIndex Templateで利用するケースが多くあります。そのような場合に、毎回同じ設定を記述するのではなく、Component Templateとして切り出すことで保守性と再利用性を向上できます。

元となるIndex Templateの作成コマンド

まずは、Settings・Mappings・Aliasesをすべて含んだ1つのIndex Templateを作成するとします。

PUT _index_template/my_logs_template
{
  "index_patterns": [
    "my-logs-*"
  ],
  "priority": 100,
  "template": {
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 1,
      "index.refresh_interval": "30s",
      "index.codec": "best_compression"
    },
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "host": {
          "type": "keyword"
        },
        "client_ip": {
          "type": "ip"
        },
        "status": {
          "type": "integer"
        },
        "message": {
          "type": "text"
        }
      }
    },
    "aliases": {
      "logs": {}
    }
  }
}

このように、一つのコマンドでsettings、mappingsを定義しても問題はありませんが、SettingsやMappingsを他のTemplateでも利用したい場合、同じ定義を何度も記述することになります。

上記を複数のComponent Templateへ分ける

そこで、Index Template内に直接記述していた設定を、役割ごとにComponent Templateへ分割します。

今回の例では以下の3つへ分割します。

  • logs_settings_component
    • シャード数やレプリカ数などのSettingsを管理
  • logs_mappings_component
    • フィールド型定義を管理
  • logs_aliases_component
    • Alias定義を管理

このように役割ごとに分離することで、将来的に複数のIndex Templateから共通利用できるようになります。

複数のComponent Templateの作成コマンド

まずSettings用Component Templateを作成します。

PUT _component_template/logs_settings_component
{
  "template": {
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 1,
      "index.refresh_interval": "30s",
      "index.codec": "best_compression"
    }
  }
}

続いてMappings用Component Templateを作成します。

PUT _component_template/logs_mappings_component
{
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "host": {
          "type": "keyword"
        },
        "client_ip": {
          "type": "ip"
        },
        "status": {
          "type": "integer"
        },
        "message": {
          "type": "text"
        }
      }
    }
  }
}

最後にAliases用Component Templateを作成します。

PUT _component_template/logs_aliases_component
{
  "template": {
    "aliases": {
      "logs": {}
    }
  }
}

Component Templateが作成されていることの確認

作成済みのComponent Templateは以下コマンドで確認できます。

GET _component_template

特定のComponent Templateのみ確認する場合は、名前を指定します。

GET _component_template/logs_settings_component

GET _component_template/logs_mappings_component

GET _component_template/logs_aliases_component

実行すると、それぞれのSettings、Mappings、Aliases定義を確認できます。

Component Templateを指定したIndex Templateの作成コマンドと、その実行

続いて、先ほど作成した3つのComponent Templateを組み合わせたIndex Templateを作成します。

PUT _index_template/my_logs_template
{
  "index_patterns": [
    "my-logs-*"
  ],
  "priority": 100,
  "composed_of": [
    "logs_settings_component",
    "logs_mappings_component",
    "logs_aliases_component"
  ]
}

このTemplate自体にはSettingsやMappingsは定義されていません。

代わりに、composed_ofで指定したComponent Templateを組み合わせて利用します。

作成後、以下コマンドで確認できます。

GET _index_template/my_logs_template

上記Templateの条件に沿ったData Ingest文の作成と実行

続いて、このTemplateが適用されるDocumentを投入します。

POST my-logs-2026.06.20/_doc
{
  "@timestamp": "2026-06-20T10:00:00Z",
  "host": "server01",
  "client_ip": "192.168.1.100",
  "status": 200,
  "message": "Application started successfully"
}

投入時点では “my-logs-2026.06.20” は存在しません。しかしIndex名が “my-logs-*” に一致するため、ElasticsearchはIndexを自動作成し、作成したIndex Templateを適用します。また、そのIndex Templateから参照されている3つのComponent Templateも合わせて適用されます。

Templateの設定が反映されたIndexが作成されていることの確認

まずIndexが作成されたことを確認します。

GET _cat/indices/my-logs-*?v

続いてMappingを確認します。

GET my-logs-2026.06.20/_mapping

実行すると、以下のようなMappingが確認できます。

{
  "properties": {
    "@timestamp": {
      "type": "date"
    },
    "host": {
      "type": "keyword"
    },
    "client_ip": {
      "type": "ip"
    },
    "status": {
      "type": "integer"
    }
  }
}

続いてSettingsを確認します。

GET my-logs-2026.06.20/_settings

実行すると、Component Templateで定義したSettingsが適用されていることを確認できます。

{
  "index": {
    "number_of_shards": "3",
    "number_of_replicas": "1",
    "refresh_interval": "30s"
  }
}

最後にAliasを確認します。

GET _alias/logs

実行すると、作成されたIndexへ “logs” Aliasが付与されていることを確認できます。

このようにComponent Templateを利用すると、Settings、Mappings、Aliasesなどの設定を部品化して管理できます。大規模環境では複数のIndex Templateで共通設定を利用するケースが多く、Component Templateによって設定の再利用性と保守性を大幅に向上させることができます。また、Index Templateのシミュレーション機能を利用すると、複数のComponent Templateを組み合わせた最終的な設定結果も事前に確認できます。

Elastic社が提供する無料のHands-onやOn-Demand Trainingで理解を深めよう

本資料では、Index Template、Component Template、Mappings、Aliases、Simulation機能などの基本的な仕組みについて解説しました。しかし、Elasticsearchの知識を定着させるためには、実際にコマンドを実行しながら動作を確認することが重要です。

Elastic社では、ElasticsearchやElastic Cloudを実際に操作しながら学習できる無償のHands-on Trainingを提供しています。これらのトレーニングでは、本資料で学習したIndex Templateだけでなく、Data Stream、ILM(Index Lifecycle Management)、Ingest Pipeline、検索機能など、Elastic Certified Engineer Examで重要となる幅広いトピックについて実践的に学ぶことができます。

また、Hands-on形式で実際に環境を操作することで、「コマンドは知っているが使ったことがない」という状態から、「自分で設定・確認・トラブルシュートできる」レベルまで理解を深めることができます。

なお、これらのHands-on Trainingを受講するためには、Elastic Cloudアカウントが必要となります。Elastic Cloudでは無料トライアルが提供されているため、まだアカウントを作成していない場合は、まずElastic Cloudアカウントを作成することをおすすめします。

本資料で学習した内容を実際にHands-on環境で試すことで、Index TemplateやComponent Templateの動作をより深く理解できるようになります。また、Elastic Certified Engineer Examの対策としても非常に効果的ですので、ぜひHands-on Trainingを活用して理解を深めてください。

Elastic Cloud アカウント作成

https://cloud.elastic.co/registration

Elastic Training

https://www.elastic.co/training

Elastic Learning Portal

https://learn.elastic.co/pages/58/home-page

試験で問われるポイントの確認

  • Index Templateを定義できること
  • Settings、Mappings、Aliasesを利用したIndex設計, Index Template設計ができること
  • Component Templateを利用した設定の共通化ができること
  • Template適用結果の検証ができること
  • 複数Templateの競合を制御できること(priorityの指定)