AWS OpenSearch Dashboard REST API

# OpenSearchのドキュメントが足りない!!

~~盗人猛々しいのかもしれない~~AWSのOpenSearchのダッシュボード周りのAPIが見つからなくて困って探したので、その結果を共有します。
WebGUIを手で操作とか死ねます。

Use the Source, Luke.

# 凡例

* `$ENDPOINT` エンドポイントのホスト名
e.g. `search-hogehoge-fugafuga.ap-west-5.es.amazonaws.com`
* `$USER` ユーザ名
* `$PASS` パスワード

```terraform:
resource "aws_elasticsearch_domain" "hogehoge" {
  elasticsearch_version = "OpenSearch_1.3"
  advanced_security_options {
    enabled = true
    internal_user_database_enabled = true
    master_user_options {
      master_user_name = local.opensearch_user
      master_user_password = local.opensearch_pass
    }
  }
  #中略
}

output "opensearch_endpoint" {
  value = aws_elasticsearch_domain.hogehoge.endpoint
}
```

# APIの認証情報をゲットだぜ

クッキーをもらいます。

```sh:
curl --cookie-jar auth.txt \
  -H "osd-xsrf: true" \
  -H "content-type: application/json" \
  -d "{\"username\":\"$USER\", \"password\":\"$PASS\"}" \
  -X POST \
  https://$ENDPOINT/_dashboards/auth/login \
  | jq
```

`auth.txt`に入ったクッキーをこれから使います。

# オブジェクトタイプの一覧

```sh:
curl --cookie auth.txt \
  -H "osd-xsrf: true" \
  -H "content-type: application/json" \
  -X GET \
  https://$ENDPOINT/_dashboards/api/opensearch-dashboards/management/saved_objects/_allowed_types \
   | jq
```

OpenSearch1.3の場合

```json:
{
  "types": [
    "config",
    "url",
    "index-pattern",
    "query",
    "dashboard",
    "visualization",
    "search"
  ]
}
```

以下`dashboard`でやりますが他も同じです。

# ダッシュボードの一覧

以下グローバルテナントの場合。

```sh:
curl --cookie auth.txt \
  -H "osd-xsrf: true" \
  -H "content-type: application/json" \
  -H "securitytenant: global" \
  -X GET \
  https://$ENDPOINT/_dashboards/api/opensearch-dashboards/management/saved_objects/_find?type=dashboard \
  | jq
```

以下操作対象のダッシュボードのUUIDを`$ID`とします。

# non legacy

## ダッシュボードのエクスポート

```sh:
curl --cookie auth.txt \
  -H "osd-xsrf: true" \
  -H "content-type: application/json" \
  -H "securitytenant: global" \
  -X GET \
  https://$ENDPOINT/_dashboards/api/opensearch-dashboards/management/saved_objects/dashboard/$ID \
  -o dashboard.json
```

## ダッシュボードのインポート

ないっぽい？

# legacy

なぜlegacyかというと、ソースのpathにlegacyが含まれるから。

## ダッシュボードのエクスポート

```sh:
curl --cookie auth.txt \
  -H "osd-xsrf: true" \
  -H "content-type: application/json" \
  -H "securitytenant: global" \
  -X GET \
  https://$ENDPOINT/_dashboards/api/opensearch-dashboards/dashboards/export?dashboard=$ID \
  -o dashboard.json
```

## ダッシュボードのインポート

```sh:
curl --cookie auth.txt \
  -H "osd-xsrf: true" \
  -H "content-type: application/json" \
  -H "securitytenant: global" \
  -X POST \
  https://$ENDPOINT/_dashboards/api/opensearch-dashboards/dashboards/import \
  -d dashboard.json
```

# ドキュメント

どれもそこそこ参考になります。そこそこ。

awsの資料
* [Supported operations - Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/supported-operations.html#version_opensearch_1.3)
* [Set advanced settings with the Amazon OpenSearch Service Dashboards API | AWS Big Data Blog](https://aws.amazon.com/blogs/big-data/set-advanced-settings-with-the-amazon-opensearch-service-dashboards-api/)

github issue:open
* [Saved Objects API as production feature · Issue #987 · opensearch-project/OpenSearch-Dashboards](https://github.com/opensearch-project/OpenSearch-Dashboards/issues/987)
* [Confusing opensearch dashboard import API · Issue #1723 · opensearch-project/OpenSearch-Dashboards](https://github.com/opensearch-project/OpenSearch-Dashboards/issues/1723)

# ソースからAPIのpathを探す方法

```sh:
grep "path:" OpenSearch-Dashboards-1.3.4/src/plugins/*/server/routes/*
```