Amazon Elasticsearch Service × Kibanaでindex復元エラー：cannot restore index [.kibana] because it's  open

# 概要

Amazon Elasticsearch Service × Kibana　で構築されたシステムで、
_restore apiでindexを復元するときに、
「cannot restore index [.kibana] because it's  open」
というエラーについてメモします。

# 要因
Elasticsearch バージョン 5.1 以降では、Amazon ES が .kibana インデックスをモニタリングし、削除されている場合は再作成します。この動作により、復元が失敗します。 

# 前提知識まとめ

・aws関連
・Elasticsearch関連（https://www.elastic.co/guide/jp/index.html）
・Kibana関連（https://www.elastic.co/products/kibana）

# 要件

esに登録されたデータやindexに対して、バックアップを取った時点に復元すること。

# 先に結論
index.kibana(Kibana自身の仕組み用)は復元できなくて、その以外のindexは指定して復元できる。
↓↓↓　AWSサポートセンターに確認した結果：
index.kibana(Kibana自身の仕組み用)は復元もできる。

# 通常の流れ

①　_snapshot apiでsnapshotを作成
②　_restore apiでindexを復元

公式参考：https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html#modules-snapshots

# 実際にやりながら問題点を説明
※Kibana consoleで操作、検証


### 初期状態


```
GET /_cat/indices/*?v
```
↓
.kibanaのindexはデフォルトとして存在する。

```
health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   .kibana abcdefghijklmnopqrstu   1   1          1            0      3.6kb          3.6kb
```

### データやindexを投入後（投入操作は省略）

```
GET /_cat/indices/*?v
```

投入されたindexのtest-index-1、test-index-2が存在する。
↓

```
health status index                   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   .kibana                 abcdefghijklmnopqrstu   1   1          1            0      3.6kb          3.6kb
yellow open   test-index-1            klmnopqrstuabcdefghij   5   1          1            0      9.3kb          9.3kb
yellow open   test-index-2            pqrstuabcdefghijklmno   5   1          5            0      9.4kb          9.4kb
```

### 現時点（index三つある）のsnapshotを作成（snapshot repositoryの作成は省略）

```
PUT _snapshot/es-backup-repo/my-snapshot
```

### 作成されたsnapshotの様子を見る

```
GET /_snapshot/es-backup-repo/_all
```
↓
snapshotは全indexが入ってる

```
...省略...
"indices": [
        ".kibana",
        "test-index-1",
        "test-index-2"
      ],
...省略...
```

### 現在すべてのindexを削除して復元する

```
DELETE *
```
↓
削除後

```
health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   .kibana jklmnopqrstuabcdefghi   1   1          1            0      3.6kb          3.6kb
```
えええええーーーー
初期に存在する.kibanaは削除されていない

そのまま復元なら

```
POST /_snapshot/es-backup-repo/my-snapshot/_restore
```
↓
.kibanaが存在するので、復元ができない。

```
{
  "error": {
    "root_cause": [
      {
        "type": "snapshot_restore_exception",
        "reason": "[es-backup-repo:my-snapshot/CAAUJ6GJSPCtkOuwSiGDnw] cannot restore index [.kibana] because it's open"
      }
    ],
    "type": "snapshot_restore_exception",
    "reason": "[es-backup-repo:my-snapshot/CAAUJ6GJSPCtkOuwSiGDnw] cannot restore index [.kibana] because it's open"
  },
  "status": 500
}
```

# 解決案

## .kibana以外のindexを復元することなら

indesを指定すればよい

```
POST /_snapshot/es-backup-repo/my-snapshot/_restore
{
  "indices": "test-index-*"
}
```

確認

```
GET /_cat/indices/*?v
```
復元できた
↓

```
health status index                   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   .kibana                 jklmnopqrstuabcdefghi   1   1          1            0      3.6kb          3.6kb
yellow open   test-index-1            fghijklmnopqrstuabcde   5   1          1            0      9.3kb          9.3kb
yellow open   test-index-2            mnopqrstuabcdefghijkl   5   1          5            0      9.4kb          9.4kb
```

## .kibanaを復元しようにはどうする？？？

aws公式案：https://aws.amazon.com/jp/premiumsupport/knowledge-center/elasticsearch-kibana-error/

上記の超最近（公開日: 2018 年 08 月 31 日）の案は、やってみて、残念でだめだった。
原因は、既存のindex[.kibana]がrenameしても、reindexしても、削除できないこと。
（削除された一瞬にまた自動的.kibanaを作り直すこと。）

# 追記：
AWSサポートセンターへ問い合わせて、下記のような結果でした。
【２には、reindex API は dest の index が open の状態で存在していたとしても source のドキュメントを dest のドキュメントに移行可能であること、この操作によりスナップショットからリストアされた restored_.kibana インデックスの内容を .kibana インデックスに復元できるもの】って、
renameされたものindexは外見（uid）から見れば何も変わってないですが、中身もちゃんと復旧されたということですよね。