Als ich einen Schnappschuss von Amazon Elasticsearch Service (im Folgenden als es bezeichnet) gemacht habe, bin ich bei der Behörde hängen geblieben, daher werde ich ihn zusammenfassen. Die Nutzungsumgebung ist Mac.
――Wie können Sie manuell einen Schnappschuss von es machen? ――Die Behörde scheint etwas kompliziert zu sein, also lasst es uns einmal anfassen ――Messen wir, wie lange es dauern wird, bis das Gerät abgerufen und wiederhergestellt ist
Ich begann meine Hände mit einem solchen Gefühl der Herausforderung zu bewegen.
Ich habe es durch ein solches Verfahren möglich gemacht! !! !!
Um einen Schnappschuss manuell zu erstellen, sind folgende Maßnahmen erforderlich.
--Erstellen eines Eimers für s3
Das diesmal geschriebene Skript ist in Python geschrieben, kann aber auch in Java, Ruby, Node, Go geschrieben werden. Weitere Informationen finden Sie in diesem offiziellen Dokument.
Dann möchte ich in der Reihenfolge erklären.
Erstellen Sie manuell einen Bucket zum Speichern von Schnappschüssen. Dieses Mal habe ich `` `arn: aws: s3 ::: test-es-snapshot``` in der S3-Konsole erstellt. Dies ist an den folgenden beiden Stellen erforderlich
Es gibt drei Orte, an denen Sie diese Zeit überprüfen können
Bearbeiten Sie die Vertrauensstellung wie folgt Der Auftraggeber gibt an, "wer diese Rolle übernehmen wird". Der folgende Service gibt es an, was bedeutet, dass "die erstellte Servicerolle es übernimmt" (glaube ich).
Beschrieben in der Vertrauensbeziehung der Servicerolle
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "es.amazonaws.com"
},
"Action": "sts:AssumeRole"
}]
}
Erstellen Sie eine Verwaltungsrichtlinie mit dem Namen create-es-backup-policy mit den folgenden Inhalten und hängen Sie sie an die oben erstellte Servicerolle an.
create-es-backup-policy(An die erstellte Servicerolle anhängen)
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::test-es-snapshot"
]
},
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::test-es-snapshot/*"
]
}
]
}
Wählen Sie in Kibana ** Sicherheit **, ** Rollenzuordnungen **, ** Hinzufügen *. Wählen Sie für ** Rolle ** ** manage_snapshots ** aus. Geben Sie dann im entsprechenden Feld die ARN des IAM-Benutzers oder der IAM-Rolle an. Geben Sie die ARN des Benutzers in den Abschnitt ** [Benutzer] ** ein. Geben Sie die ARN der Rolle in den Abschnitt ** [Backend-Rollen] ** ein. ( Dies gibt Berechtigungen für Rolleninformationen zur Verwendung von Snapshots.) Dieses Mal habe ich die ARN-Informationen der erstellten Servicerolle an der Stelle mit dem Namen "Backend-Rollen" auf der Seite "Rollenzuordnungen von Kibana" eingegeben. (Ich sollte in der Lage sein, die Anmeldeinformationen durch Ausführen der IAM-Richtlinie festzulegen, aber ich habe einen Fehler festgestellt, sodass ich ihn mit dieser Methode vermieden habe.)
Dies ist das Ende der Organisation rund um die IAM-Rolle.
Führen Sie das folgende Python-Skript aus (im Referenzmaterial wurde die Authentifizierung mit dem Zugriffsschlüssel durchgeführt, derzeit wird jedoch offiziell keine Authentifizierung mit dem Zugriffsschlüssel empfohlen).
register-repositry.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Regionsname' # 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)
host = 'es Domain-Endpunkt/' # /Vergiss nicht
# Register repository
path = '_snapshot/test-es-snapshot' # the Elasticsearch API endpoint
url = host + path
payload = {
"type": "s3",
"settings": {
"bucket": "Eimername",
"region": "Regionsname",
"role_arn": "Name der Servicerolle erstellt"
}
}
headers = {"Content-Type": "application/json"}
r = requests.put(url, auth=awsauth, json=payload, headers=headers)
print(r.status_code)
print(r.text)
Bestätigen Sie, dass die Antwort wie folgt lautet
200
{"acknowledged":true}
snapshot.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Regionsname' # 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)
host = 'es Domain-Endpunkt/' # /Vergiss nicht
path = '_snapshot/test-es-snapshot/my-snapshot-1' # the Elasticsearch API endpoint
url = host + path
r = requests.put(url, auth=awsauth)
print(r.text)
Ausführungsbeispiel
-> % python snapshot.py
Enter MFA code for :
{"accepted":true}
check_repository.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Regionsname' # 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)
host = 'es Domain-Endpunkt/' # /Vergiss nicht
path = '_snapshot/?pretty'
url = host + path
r = requests.get(url, auth=awsauth)
print(r.text)
Ausführungsbeispiel
-> % python check_repository.py
Enter MFA code for :
{
"cs-automated-enc" : {
"type" : "s3"
},
"test-es-snapshot" : {
"type" : "s3",
"settings" : {
"bucket" : "test-es-snapshot",
"region" : "Regionsname",
"role_arn" : "Name der Servicerolle erstellt"
}
}
}
check_snapshot.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Regionsname' # 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)
host = 'es Domain-Endpunkt/' # /Vergiss nicht
path = '_snapshot/test-es-snapshot/_all?pretty'
url = host + path
r = requests.get(url, auth=awsauth)
print(r.text)
Ausführungsbeispiel
-> % python check_snapshot.py
Enter MFA code for :
{
"snapshots" : [ {
"snapshot" : "my-snapshot-1",
"uuid" : "*************",
"version_id" : ******,
"version" : "7.8.0",
"indices" : [ "Indexname ①", "Indexname ②",・ ・ ・ ・ ・ ・],
"include_global_state" : true,
"state" : "SUCCESS",
"start_time" : "2020-11-17T07:20:17.265Z",
"start_time_in_millis" : 1605597617265,
"end_time" : "2020-11-17T07:21:21.901Z",
"end_time_in_millis" : 1605597681901,
"duration_in_millis" : 64636,
"failures" : [ ],
"shards" : {
"total" : 38,
"failed" : 0,
"successful" : 38
}
} ]
}
Wenn zum Zeitpunkt der Wiederherstellung ein Index mit demselben Namen vorhanden ist, kann dieser nicht wiederhergestellt werden. Sie müssen daher den Index, den Sie wiederherstellen möchten, einmal löschen. Das Verfahren zum einmaligen Löschen und Wiederherstellen des angegebenen Index ist unten dargestellt.
delete_index.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Regionsname' # 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)
host = 'es Domain-Endpunkt/' # /Vergiss nicht
# DELETE INDEX
path = 'Indexname'
url = host + path
r = requests.delete(url, auth=awsauth)
print(r.text)
Ausführungsbeispiel
-> % python delete_index.py
Enter MFA code for :
{"acknowledged":true}
Wählen Sie in der es-Konsole die Domäne aus und wechseln Sie zur Registerkarte Index, um festzustellen, ob der Index gelöscht wurde. Sie können auch im Dashboard sehen, dass weniger Dokumente durchsucht werden können.
restore_one.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Regionsname' # 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)
host = 'es Domain-Endpunkt/' # /Vergiss nicht
path = '_snapshot/test-es-snapshot/my-snapshot-1/_restore'
url = host + path
payload = {"indices": "Indexname"}
headers = {"Content-Type": "application/json"}
r = requests.post(url, auth=awsauth, json=payload, headers=headers)
print(r.text)
Ausführungsbeispiel
-> % python restore_one.py
Enter MFA code for :
{"accepted":true}
Das Referenzmaterial war sehr nützlich, um Schnappschüsse abzurufen und wiederherzustellen. (Fast das gleiche.) Ich hatte große Probleme, IAM-Rollen und -Richtlinien zu organisieren. .. .. Es war schwierig, wenn ich nicht herausfinden konnte, welche Politik mit welcher Rolle verbunden war. ..
Ich hoffe, es wird jedem helfen. ..
Recommended Posts