Search code examples
elasticsearchkibanaaws-elasticsearch

AWS elasticsearch disable replication of all indices


I am using a single node AWS ES cluster. Currently, its health status is showing yellow which is obvious because there is no other node to which Amazon ES can assign a replica. I want to set the replication of all my current and upcoming indices to 0. I have indices created in this pattern:

app-one-2021.02.10
app-two-2021.01.11
so on...

These indices are currently having number_of_replicas set to 1. To disable replication for all indices I am throwing a PUT request in index pattern:

PUT /app-one-*/_settings
{
 "index" : {
  "number_of_replicas":0
 }
}

Since I am using a wildcard here so it should set number_of_replicas to 0 in all the matching indices, which it is doing successfuly.

But if any new index is created in the future let's say app-one-2021.03.10. Then the number_of_replicas is again set to 1 in this index.

Every time I have to run a PUT request to set number_of_replicas to 0 which is tedious. Why new indices are not automatically taking number_of_replicas to 0 even if I am using a wildcard (*) in my PUT request.

Is there any way to completely set replication (number_of_replicas to 0) to 0, and doesn't matter if it's a new index or an old index. How can I achieve this?


Solution

  • Yes, the way is to define index templates.

    Before Elasticsearch v7.8, you could only use the _template API (see docs). E.g., in your case, you can create a template matching all the app-* indices:

    PUT _template/app_settings
    {
      "index_patterns": ["app-*"],
      "settings": {
        "number_of_replicas": 0
      }
    }
    

    Since Elasticsearch v7.8, the old API is still supported but deprecated, and you can use the _index_template API instead (see docs).

    PUT _index_template/app_settings
    {
      "index_patterns": ["app-*"],
      "template": {
        "settings": {
          "number_of_replicas": 0
        }
      }
    }
    

    Update: add code snippets for both _template and _index_template API.