雑にメモ
リポジトリ登録
こちらのリンクの公式手順通りregster-repo.pyを作成し実行する
$ python register-repo.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
host = 'https://xxxxx.ap-northeast-1.es.amazonaws.com' # include https:// and trailing /
region = 'ap-northeast-1' # e.g. us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
# Register repository
path = '_snapshot/my-snapshot-repo1' # the Elasticsearch API endpoint
url = host + path
payload = {
"type": "s3",
"settings": {
"bucket": "es-snapshot-xxxx",
# "endpoint": "s3.amazonaws.com", # for us-east-1
"region": "ap-northeast-1", # for all other regions
"role_arn": "arn:aws:iam::xxxxxxxxxxxx:role/TheSnapshotRole"
}
}
headers = {"Content-Type": "application/json"}
r = requests.put(url, auth=awsauth, json=payload, headers=headers)
print(r.status_code)
print(r.text)
これだけだと、以下のエラーが出る
$ python register-repo.py
403
{"error":{"root_cause":[{"type":"security_exception","reason":"no permissions for [cluster:admin/repository/put] and User [name=arn:aws:iam::xxxxxxxxxxxx:user/uehara, backend_roles=[], requestedTenant=null]"}],"type":"security_exception","reason":"no permissions for [cluster:admin/repository/put] and User [name=arn:aws:iam::xxxxxxxxxxxx:user/uehara, backend_roles=[], requestedTenant=null]"},"status":403}
一部「manage_snapshots ロールを、TheSnapshotRole を引き受ける iam:PassRole アクセス許可を持つ IAM ロールにマッピングする必要があります。」の作業が必要で、以下のようにKibanaのRoleのmanage_snapshotにUserとBackend rolesをマッピングする
これでackがtrueで返ってきた
$ python register-repo.py
200
{"acknowledged":true}
リポジトリの確認
GET /_cat/repositories?v
GET /_snapshot/
リポジトリを削除したい時。取得済スナップショットがあれば事前にスナップショットの削除が必要
DELETE /_snapshot/my-snapshot
スナップショット(バックアップ)
###スナップショットリポジトリ情報
GET _snapshot/
###スナップショット実行中のステータス。スナップショットが終われば何も返ってこない
GET /_snapshot/_status
###全インデックスのスナップショット
PUT /_snapshot/my-snapshot-repo1/snapshot-test1
###取得した任意のスナップショットの情報表示(インデックス情報とか)
GET /_snapshot/my-snapshot-repo1/<snapshot-name>
###取得した全てのスナップショットの情報表示(インデックス情報とか)
GET /_snapshot/my-snapshot-repo1/_all
リストア
###インデックス削除(必要なら)
DELETE /log-aws-cloudtrail-2020-08-16
##全体リストアは失敗する
##Kibana ときめ細かなアクセス制御インデックスに対する特別なアクセス許可により、特に自動スナップショットから復元しようとする場合は、すべてのインデックスを復元しようとすると失敗することがあります。
POST /_snapshot/my-snapshot-repo1/snapshot-test1/_restore
POST /_snapshot/my-snapshot-repo1/snapshot-test1/_restore
{"indices": "log-aws-cloudtrail-2020-08-16"}
インデックス指定でスナップショット(バックアップ)
PUT /_snapshot/my-snapshot-repo1/snapshot-log-aws-cloudtrail-2020-08-31?wait_for_completion=true
{
"indices": "log-aws-cloudtrail-2020-08-31",
"ignore_unavailable": true,
"include_global_state": false
}
レスポンス
{
"snapshot" : {
"snapshot" : "snapshot-log-aws-cloudtrail-2020-08-31",
"uuid" : "ZPbqk1rgQdOPunKObWktJA",
"version_id" : 7070099,
"version" : "7.7.0",
"indices" : [ "log-aws-cloudtrail-2020-08-31" ],
"include_global_state" : false,
"state" : "SUCCESS",
"start_time" : "2020-09-03T08:32:43.666Z",
"start_time_in_millis" : 1599121963666,
"end_time" : "2020-09-03T08:32:50.869Z",
"end_time_in_millis" : 1599121970869,
"duration_in_millis" : 7203,
"failures" : [ ],
"shards" : {
"total" : 3,
"failed" : 0,
"successful" : 3
}
}
}
インデックス指定でリストア
POST /_snapshot/my-snapshot-repo1/snapshot-test1/_restore
{"indices": "log-aws-cloudtrail-2020-08-16"}
スナップショットの削除
###取得スナップショットの中身のインデックス情報
GET /_snapshot/my-snapshot-repo1/_all
###スナップショットを指定して削除
DELETE /_snapshot/my-snapshot-repo1/snapshot-log-aws-cloudtrail-2020-08-31
参考
Elastic社のAPIドキュメント
https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore-apis.html