Engineering

Migration von AWS Elasticsearch zum Elasticsearch Service auf Elastic Cloud

Zugriff auf den kompletten Funktionsumfang des Elastic Stack

Als Solutions Architect werde ich oft gefragt, wie die Migration einer Elastic-Bereitstellung vom Amazon Elasticsearch Service (AWS ES) zum Elasticsearch Service funktioniert.  Dies liegt hauptsächlich daran, dass die Benutzer sämtliche Funktionen sowie die Betriebserfahrung und den Support von Elastic in Anspruch nehmen möchten, was bei Amazon nicht unbedingt möglich ist. Diese praktische Anleitung begleitet Sie beim sprichwörtlichen „Lift-and-Shift“ zum Elasticsearch Service von Elastic.

Für Ihre ersten Schritte mit dem Elasticsearch Service können Sie eine Bereitstellung mit unserer 14-tägigen Testversion erstellen. Wählen Sie AWS oder GCP als Cloudanbieter aus und legen Sie fest, in welcher Region Elastic Ihre Bereitstellung ausführen soll.  AWS-Benutzer können den Elasticsearch Service direkt im AWS Marketplace hinzufügen, der in Ihre AWS-Abrechnung integriert ist.

Der Elasticsearch Service auf Elastic Cloud bietet verschiedene zusätzliche Funktionen gegenüber der Open Source-Distribution, zum Beispiel Canvas, APM, unbeaufsichtigtes Machine Learning, eingefrorene Indizes, SQL, Sicherheit (mehr als nur auf den Perimeter beschränkte IAM-Richtlinien) und Deployment-Vorlagen, die nur im Elasticsearch Service in der Elastic Cloud verfügbar sind. Wir fügen fortlaufend neue einzigartige Funktionen hinzu. Falls Sie Informationen zum Vergleich mit der AWS ES-Lösung brauchen, schauen Sie gelegentlich auf unserer AWS Elasticsearch-Vergleichsseite vorbei.

Migration von AWS Elasticsearch zum Elasticsearch Service auf Elastic Cloud

Diese Anleitung für die Migration von AWS ES zum Elasticsearch Service auf Elastic Cloud ist recht technisch und setzt einige Programmiererfahrung voraus. AWS ES-Cluster werden häufig auf einem VPC bereitgestellt, können sich jedoch auch auf einem öffentlich zugänglichen Endpunkt befinden. In dieser Anleitung verwenden wir das Python AWS SDK, um beide Szenarien zu unterstützen. Sie können eine beliebige Sprache mit AWS SDK verwenden (Java, Ruby, Go usw.), aber in dieser Anleitung zeigen wir nur Beispiele für Python.

Diese Anleitung besteht aus zwei Teilen:

Hinweis: Falls Sie bereits manuell einen Snapshot Ihres AWS ES-Clusters nach S3 erstellt haben, können Sie direkt zum zweiten Teil springen.

Zunächst ist es wichtig, dass Sie einige der hier beschriebenen IAM-Sicherheitsschritte verstehen. Um einen Snapshot eines AWS ES-Clusters nach S3 zu erstellen, braucht Ihr AWS ES-Cluster Schreibberechtigungen für einen privaten S3-Bucket. Dafür ist eine IAM-Rolle und eine Richtlinie mit den notwendigen Berechtigungen erforderlich. Außerdem müssen wir eine IAM-Richtlinie mit einem IAM-Benutzer verknüpfen, den wir ebenfalls bei Bedarf erstellen. Unser Skript verwendet den IAM-Benutzer, um mit Ihrem AWS ES-Cluster zu kommunizieren, und Ihre von Elastic verwaltete Bereitstellung verwendet den Benutzer, um den Snapshot aus Ihrem S3-Bucket zu lesen.

Erster Teil – Snapshot nach S3

Im ersten Teil dieser Anleitung richten Sie eine Rolle, eine Richtlinie und einen Benutzer in IAM ein, um einen Snapshot Ihres AWS ES-Clusters nach S3 zu erstellen. Sie finden die AWS-Dokumentation für diesen Prozess hier: Arbeiten mit Index-Snapshots in Amazon Elasticsearch Service. Diese Referenz ist hilfreich, falls Sie Schwierigkeiten haben.

Sie werden sich verschiedene Variablen für den weiteren Verlauf notieren. Kopieren Sie die folgende Tabelle in eine Textdatei, um die Daten für den Rest der Anleitung griffbereit zu haben. Auf diese Weise können Sie die exakten Werte für Ihre Migration mühelos ausfüllen.

BeschreibungVariableWert
ARM der AWS ES-Domäne DOMAIN_ARN
URL des AWS ES-Endpunkts ES_ENDPOINT
AWS ES-Region ES_REGION
AWS S3-Bucketname S3_BUCKET_NAME
AWS S3-Region S3_REGION_NAME
ARN der AWS IAM-Rolle ROLE_ARN
ID des AWS IAM-Zugriffsschlüssels ACCESS_KEY
Geheimer AWS IAM-Zugriffsschlüssel SECRET_KEY
AWS ES-Snapshot-Repository SNAPSHOT_REPO mein-Snapshot-Repo
AWS ES-Snapshotname SNAPSHOT_NAME mein-Snapshot

Sie können die Werte für SNAPSHOT_REPO und SNAPSHOT_NAME anpassen oder die gezeigten Beispiele verwenden („mein-Snapshot-Repo“ und „mein-Snapshot“).

Schritt 1 - Erfassen Ihrer AWS ES-Daten

Wir brauchen einige grundlegende Informationen zu Ihrem AWS ES-Cluster, um einen Snapshot in S3 zu erstellen.

  1. Öffnen Sie den Elasticsearch Service in Ihrer AWS-Konsole.
  2. Wählen Sie die Domäne des Clusters aus, dessen Snapshot Sie erstellen möchten.
  3. Kopieren Sie den Wert unter „Domain ARN“ in Ihre Textdatei (DOMAIN_ARN).
  4. Kopieren Sie den URL-Wert unter „Endpoint“ in Ihre Textdatei (ES_ENDPOINT).
  5. Notieren Sie sich die AWS-Region (z. B. us-east-1) Ihres AWS ES-Clusters (ES_REGION).

Sie benötigen diese Information bei der Erstellung der IAM-Richtlinie und zum Senden von Befehlen an den Cluster.

Schritt 2 - Erstellen eines AWS S3-Buckets

Wir müssen einen S3-Bucket erstellen, um Ihren Snapshot zu speichern.

Wichtig: Ihr S3-Bucket muss sich in derselben Region befinden wie Ihr AWS ES-Cluster. Von dort aus können Sie den Snapshot in einer von Elastic verwalteten Bereitstellung in einer beliebigen Region oder bei einem beliebigen Cloudanbieter (AWS oder GCP) wiederherstellen.

  1. Öffnen Sie den S3-Dienst in Ihrer AWS-Konsole.
  2. Erstellen Sie einen privaten S3-Bucket.
    Hinweis: Wenn Sie die Standardwerte beibehalten, wird Ihr Bucket privat und geschützt erstellt.
  3. Kopieren Sie den Namen des Buckets in Ihre Textdatei (S3_BUCKET_NAME).
  4. Kopieren Sie die Region des Buckets in Ihre Textdatei (S3_REGION_NAME).

Sie benötigen diese Informationen, um ein Snapshot-Repository bei Elasticsearch zu registrieren.

Schritt 3 - Erstellen einer IAM-Rolle

Als Nächstes werden wir eine Rolle erstellen, um dem Amazon Elasticsearch Service die Berechtigung zum Erstellen eines Snapshots in S3 zu delegieren.

  1. Öffnen Sie den IAM-Dienst in Ihrer AWS-Konsole.
  2. Wählen Sie „Roles“ aus.
  3. Wählen Sie „Create Role“ aus.
  4. Wählen Sie „EC2“ als Dienst aus, der diese neue Rolle verwendet (wir werden diese Einstellung später ändern).
  5. Wählen Sie „Next: Permissions“ aus.
  6. Lassen Sie die Richtlinien in der Rolle fürs Erste leer.
  7. Wählen Sie „Next: Tags“ aus.
  8. Wählen Sie „Next: Review“ aus.
  9. Benennen Sie die Rolle: TheSnapshotRole
  10. Wählen Sie „Create Role“ aus.
  11. Wählen Sie die neu erstellte Rolle in der Liste der Rollen aus: TheSnapshotRole
  12. Wählen Sie „Trust relationships“ aus.
  13. Wählen Sie „Edit trust relationship“ aus.
  14. Kopieren Sie den folgenden Code und fügen Sie ihn in die Vertrauensbeziehung ein (ersetzen Sie den vorhandenen Code):

    {
     "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Principal": {
          "Service": "es.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }]
    }
    
  15. Wählen Sie „Update Trust Policy“ aus.
  16. Wählen Sie „Permissions“ aus.
  17. Wählen Sie „Add inline policy“ aus.
  18. Wählen Sie die Registerkarte „JSON“ aus.
  19. Kopieren Sie den folgenden JSON-Code und fügen Sie ihn ein (ersetzen Sie den vorhandenen Code).
  20. Ersetzen Sie beide Vorkommnisse von „S3_BUCKET_NAME“ durch den korrekten Wert.

    {
      "Version": "2012-10-17",
      "Statement": [{
          "Action": [
            "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME"
          ]
        },
        {
          "Action": [
            "s3:GetObject",
            "s3:PutObject",
            "s3:DeleteObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME/*"
          ]
        }
      ]
    }   
  21. Wählen Sie „Review policy“ aus.
  22. Benennen Sie die Richtlinie: TheSnapshotS3Policy
  23. Wählen Sie „Create policy“ aus.
  24. Kopieren Sie den Wert unter „Role ARN“ in Ihre Textdatei (ROLE_ARN).

Damit haben Sie eine IAM-Rolle mit einer Inline-Richtlinie erstellt, die Lese- und Schreibberechtigungen für Ihren S3-Bucket hat.

Schritt 4 - Erstellen einer IAM-Richtlinie

Wir müssen eine neue IAM-Richtlinie mit der Berechtigung erstellen, die oben beschriebene Rolle zu übernehmen, um das Snapshot-Repository zu registrieren.

  1. Öffnen Sie den IAM-Dienst in Ihrer AWS-Konsole.
  2. Wählen Sie „Policies“ aus.
  3. Wählen Sie „Create policy“ aus.
  4. Wählen Sie die Registerkarte „JSON“ aus.
  5. Kopieren Sie den folgenden JSON-Code und fügen Sie ihn ein (ersetzen Sie den vorhandenen Code).
  6. Ersetzen Sie „ROLE_ARN“ durch den korrekten Wert.
  7. Ersetzen Sie „DOMAIN_ARN“ durch den korrekten Wert.
  8. Ersetzen Sie beide Vorkommnisse von „S3_BUCKET_NAME“ durch den korrekten Wert.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "iam:PassRole",
          "Resource": "ROLE_ARN"
        },
        {
          "Effect": "Allow",
          "Action": "es:ESHttpPut",
          "Resource": "DOMAIN_ARN/*"
        }
      ]
    }
    
  9. Wählen Sie „Review policy“ aus.
  10. Benennen Sie die Richtlinie: TheSnapshotPolicy
  11. Wählen Sie „Create policy“ aus.

Damit haben Sie eine IAM-Richtlinie erstellt, um Ihrer IAM-Rolle die Kommunikation mit Ihrer AWS ES-Domäne zu ermöglichen.

Schritt 5 - Erstellen eines IAM-Benutzers

Falls Sie noch keinen IAM-Benutzer haben, müssen Sie einen Benutzer erstellen und ihm den Zugriff auf Ihren privaten S3-Bucket erlauben. Falls Sie bereits einen IAM-Benutzer haben, können Sie ihm einfach die folgende IAM-Richtlinie anfügen.

  1. Öffnen Sie den IAM-Dienst in Ihrer AWS-Konsole.
  2. Wählen Sie „Users“ aus.
  3. Wählen Sie „Add user“ aus.
  4. Benennen Sie den Benutzer: TheSnapshotUser
  5. Aktivieren Sie das Feld „Programmatic access“.
  6. Wählen Sie „Next: Permissions“ aus.
  7. Wählen Sie das Feld „Attach existing policies directly“ aus.
  8. Geben Sie „TheSnapshot“ ein, um die Richtlinien zu filtern.
  9. Aktivieren Sie das Kontrollkästchen neben der Richtlinie „TheSnapshotPolicy“.
  10. Wählen Sie „Next: Tags“ aus.
  11. Wählen Sie „Next: Review“ aus.
  12. Wählen Sie „Create User“ aus.
  13. Kopieren Sie den Wert unter „Access key ID“ in Ihre Textdatei (ACCESS_KEY).
  14. Wählen Sie „Show“ unter „Secret access key“ aus.
  15. Kopieren Sie den Wert unter „Secret access key“ in Ihre Textdatei (SECRET_KEY).
  16. Wählen Sie „Close“ aus.
  17. Wählen Sie den neu erstellten Benutzer in der Liste der Benutzer aus: TheSnapshotUser
  18. Wählen Sie „Add inline policy“ aus.
  19. Wählen Sie die Registerkarte „JSON“ aus.
  20. Kopieren Sie den folgenden JSON-Code und fügen Sie ihn ein (ersetzen Sie den vorhandenen Code).
  21. Ersetzen Sie beide Vorkommnisse von „S3_BUCKET_NAME“ durch den korrekten Wert.

    {
      "Version": "2012-10-17",
      "Statement": [{
          "Action": [
            "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME"
          ]
        },
        {
          "Action": [
            "s3:GetObject",
            "s3:PutObject",
            "s3:DeleteObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME/*"
          ]
        }
      ]
    }
    
  22. Wählen Sie „Review policy“ aus.
  23. Benennen Sie die Richtlinie: TheSnapshotUserS3Policy
  24. Wählen Sie „Create policy“ aus.

Damit haben Sie einen IAM-Benutzer erstellt, der einen manuellen Snapshot erstellen und aus dem Snapshot lesen kann.

Schritt 6 - Konfigurieren des Python AWS SDK

Bevor wir einen manuellen Snapshot ausführen, müssen wir ein Snapshot-Repository bei Ihrer Bereitstellung registrieren. Dazu müssen Sie eine signierte Anfrage an Ihren AWS ES-Cluster senden. Eine der einfachsten Möglichkeiten, eine solche Anfrage zu senden, ist das Python AWS SDK. Sie können auch andere AWS SDKs verwenden (Java, Ruby, Go usw.), aber das folgende Beispiel verwendet das Python AWS SDK.

Wir verwenden das Paketinstallationsprogramm von Python (PIP, pip3), um das Python AWS SDK zu installieren. Dieses Programm benötigt Python v3. Falls Sie Python v3 nicht installiert haben, genügt es, pip3 zu installieren. Python v3 ist eine Abhängigkeit von pip3 und wird daher vom Paketmanager Ihres Betriebssystems automatisch installiert. Falls dabei Schwierigkeiten auftreten, finden Sie Hinweise in den Python-Installationsdokumenten.

Installieren von pip3

Um pip3 unter Red Hat und Derivaten zu installieren, verwenden Sie yum:

$ sudo yum -y install python3-pip

In manchen Fedora-Distributionen hat das pip3-Paket eine andere Bezeichnung:

$ sudo yum -y install python36-pip

Falls keiner der gezeigten Paketnamen funktioniert, können Sie danach suchen:

$ yum search pip

Auf Debian-Derivaten wie etwa Ubuntu verwenden Sie apt-get:

$ sudo apt-get -y install python3-pip

Installieren des Python AWS SDK

Nachdem Sie pip3 installiert haben, können Sie das Python AWS SDK mit dem Namen boto3 installieren:

$ pip3 install --user boto3 requests_aws4auth
Collecting boto3
...
Successfully installed boto3-1.9.106 requests-aws4auth-0.9 ...

Hinweis: Wenn Sie das Flag --user angeben, ist kein root-Zugriff erforderlich.

Wir müssen ein ~/.aws-Verzeichnis erstellen, um unsere AWS-Anmeldeinformationen zu speichern. Führen Sie den folgenden Befehl aus, um das Verzeichnis zu erstellen:

$ mkdir ~/.aws

Erstellen Sie die Datei credentials mit einem Editor Ihrer Wahl. Wir verwenden der Einfachheit halber nano:

$ nano ~/.aws/credentials

Kopieren Sie den folgenden Text und fügen Sie ihn in die Datei ein. Ersetzen Sie dabei die beiden Variablen in Großbuchstaben.

[default]
aws_access_key_id = ACCESS_KEY
aws_secret_access_key = SECRET_KEY

Drücken Sie Strg+x, um nano zu beenden, und folgen Sie den Anweisungen, um die Datei zu speichern.

Anschließend werden wir einige Python-Skripts für die benötigten Aufgaben schreiben.

Schritt 7 - Manueller Snapshot von AWS ES

Wir werden als Test ein Python-Skript ausführen, um die Indizes in unserem AWS ES-Cluster aufzulisten. Damit stellen wir sicher, dass unsere AWS-Anmeldeinformationen korrekt sind und wir mit dem Cluster kommunizieren können.

Erstellen Sie die Datei indices.py mit einem Editor Ihrer Wahl. Wir verwenden der Einfachheit halber nano:

$ nano indices.py

Kopieren Sie den folgenden Text und fügen Sie ihn in die Datei ein. Ersetzen Sie dabei die beiden Variablen in Großbuchstaben durch Ihre Werte:

import boto3, requests
from requests_aws4auth import AWS4Auth
host = 'ES_ENDPOINT'
region = 'ES_REGION'
creds = boto3.Session().get_credentials()
auth = AWS4Auth(creds.access_key, creds.secret_key, region, 'es', session_token=creds.token)
print("Liste der Indizes aus AWS ES ...")
req = requests.get(host + '/_cat/indices?v', auth=auth)
print("HTTP-Antwortcode: " + str(req.status_code) + '\n' + req.text)

Drücken Sie Strg+x, um nano zu beenden, und folgen Sie den Anweisungen, um die Datei zu speichern.

Führen Sie das Python-Skript aus.

$ python3 indices.py

Ihre Ausgabe sollte in etwa wie folgt aussehen:

Liste der Indizes aus AWS ES ...
HTTP-Antwortcode: 200
health status index     uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   testindex yME2BphgR3Gt1ln6n03nHQ   5   1          1            0      4.4kb          4.4kb

Erstellen Sie anschließend die Datei register.py mit einem Editor Ihrer Wahl.

$ nano register.py

Kopieren Sie den folgenden Text und fügen Sie ihn in die Datei ein. Ersetzen Sie dabei die sieben Variablen in Großbuchstaben durch Ihre Werte:

import boto3, requests
from requests_aws4auth import AWS4Auth
host = 'ES_ENDPOINT'
region = 'ES_REGION'
repo_name = 'SNAPSHOT_REPO'
snapshot_name = 'SNAPSHOT_NAME'
s3_region_name = 'S3_REGION_NAME'
s3_bucket_name = 'S3_BUCKET_NAME'
role_arn = 'ROLE_ARN'
creds = boto3.Session().get_credentials()
auth = AWS4Auth(creds.access_key, creds.secret_key, region, 'es', session_token=creds.token)
headers = {"Content-Type": "application/json"}
payload = {
        "type": "s3",
        "settings": {
                "region": s3_region_name,
                "bucket": s3_bucket_name,
                "role_arn": role_arn
        }
}
print("Registriere Snapshot bei AWS ES ...")
url = host + '/_snapshot/' + repo_name
req = requests.put(url, auth=auth, json=payload, headers=headers)
print("HTTP-Antwortcode: " + str(req.status_code) + '\n' + req.text)

Drücken Sie Strg+x, um nano zu beenden, und folgen Sie den Anweisungen, um die Datei zu speichern.

Führen Sie das Python-Skript aus.

$ python3 register.py

Ihre Ausgabe sollte in etwa wie folgt aussehen:

Registriere Snapshot bei AWS ES ...
HTTP-Antwortcode: 200
{"acknowledged":true}

Erstellen Sie anschließend die Datei snapshot.py mit einem Editor Ihrer Wahl.

$ nano snapshot.py

Kopieren Sie den folgenden Text und fügen Sie ihn in die Datei ein. Ersetzen Sie dabei die vier Variablen in Großbuchstaben durch Ihre Werte:

import boto3, requests
from requests_aws4auth import AWS4Auth
host = 'ES_ENDPOINT'
region = 'ES_REGION'
repo_name = 'SNAPSHOT_REPO'
snapshot_name = 'SNAPSHOT_NAME'
creds = boto3.Session().get_credentials()
auth = AWS4Auth(creds.access_key, creds.secret_key, region, 'es', session_token=creds.token)
print("Erstelle AWS ES-Snapshot ...")
url = host + '/_snapshot/' + repo_name + '/' + snapshot_name
req = requests.put(url, auth=auth)
print("HTTP-Antwortcode: " + str(req.status_code) + '\n' + req.text)

Drücken Sie Strg+x, um nano zu beenden, und folgen Sie den Anweisungen, um die Datei zu speichern.

Führen Sie das Python-Skript aus.

$ python3 snapshot.py

Ihre Ausgabe sollte in etwa wie folgt aussehen:

Erstelle AWS ES-Snapshot ...
HTTP-Antwortcode: 200
{"accepted":true}

Hinweis: Die Erstellungsdauer von Snapshots hängt von der Größe der AWS ES-Domäne ab. Laut der AWS-Dokumentation wird bei besonders langen Snapshot-Vorgängen manchmal die Meldung „504 GATEWAY_TIMEOUT“ angezeigt. Laut der Dokumentation können Sie diesen Fehler ignorieren und auf die erfolgreiche Fertigstellung des Snapshots warten.

Zum Abschluss werden wir den Status unseres Snapshots überprüfen. Erstellen Sie die Datei status.py.

$ nano status.py

Kopieren Sie den folgenden Text und fügen Sie ihn in die Datei ein. Ersetzen Sie dabei die vier Variablen in Großbuchstaben durch Ihre Werte:

import boto3, requests
from requests_aws4auth import AWS4Auth
host = 'ES_ENDPOINT'
region = 'ES_REGION'
repo_name = 'SNAPSHOT_REPO'
snapshot_name = 'SNAPSHOT_NAME'
creds = boto3.Session().get_credentials()
auth = AWS4Auth(creds.access_key, creds.secret_key, region, 'es', session_token=creds.token)
print("Rufe Status des Snapshots in AWS ES ab ...")
url = host + '/_snapshot/' + repo_name + '/' + snapshot_name + '?pretty'
req = requests.get(url, auth=auth)
print("HTTP-Antwortcode: " + str(req.status_code) + '\n' + req.text)

Drücken Sie Strg+x, um nano zu beenden, und folgen Sie den Anweisungen, um die Datei zu speichern.

Führen Sie das Python-Skript aus.

$ python3 status.py

Ihre Ausgabe sollte in etwa wie folgt aussehen:

Rufe Status des Snapshots in AWS ES ab ...
HTTP-Antwortcode: 200
{
  "snapshots" : [ {
    "snapshot" : "my-snapshot",
    "uuid" : "ClYKt5g8QFO6r3kTCEzjqw",
    "version_id" : 6040299,
    "version" : "6.4.2",
    "indices" : [ "testindex" ],
    "include_global_state" : true,
    "state" : "SUCCESS",
    "start_time" : "2019-03-03T14:46:04.094Z",
    "start_time_in_millis" : 1551624364094,
    "end_time" : "2019-03-03T14:46:04.847Z",
    "end_time_in_millis" : 1551624364847,
    "duration_in_millis" : 753,
    "failures" : [ ],
    "shards" : {
      "total" : 5,
      "failed" : 0,
      "successful" : 5
    }
  } ]
}

Falls "state":"SUCCESS" ausgegeben wird, haben Sie Ihren Snapshot in S3 erfolgreich erstellt und können mit dem zweiten Teil fortfahren!

Zweiter Teil – Wiederherstellen aus S3

Im zweiten Teil dieser Anleitung stellen Sie eine von Elastic verwaltete Bereitstellung aus einem manuellen Snapshot in S3 wieder her.

Für diesen Teil können Sie eine von Elastic verwaltete Bereitstellung in AWS oder GCP verwenden.

Schritt 1 - Größe Ihrer Bereitstellung bestimmen

Die im Elasticsearch Service auf Elastic Cloud erstellte Bereitstellung sollte dieselbe Menge an Ressourcen haben wie Ihr AWS ES-Cluster. Verwenden Sie die Schieberegler und passen Sie die Anzahl der Knoten an die Größe Ihres Clusters in AWS ES an. Speichern Sie Ihre Änderungen, bevor Sie fortfahren.

Schritt 2 - Hinzufügen eines benutzerdefinierten Repository

Öffnen Sie Kibana in Ihrer von Elastic verwalteten Bereitstellung (nicht in Ihrem AWS-Cluster) und wechseln Sie zu „Dev-Tools“.

Kopieren Sie den folgenden API-Aufruf nach Dev-Tools und ersetzen Sie die fünf Variablen:

PUT /_snapshot/SNAPSHOT_REPO
{
  "type": "s3",
  "settings": {
    "bucket": "S3_BUCKET_NAME",
    "region": "S3_REGION_NAME",
    "access_key": "ACCESS_KEY",
    "secret_key": "SECRET_KEY",
    "compress": true
  }
}

Führen Sie die Anfrage aus.

Daraufhin sollten Sie die folgende Antwort erhalten:

{
  "acknowledged": "true"
}

Sie haben es beinahe geschafft.

Schritt 3 - Wiederherstellen aus S3

Zum Abschluss werden wir den Snapshot aus dem Repository wiederherstellen, das wir soeben registriert haben.

Kopieren Sie den folgenden API-Aufruf nach Dev-Tools und ersetzen Sie die zwei Variablen:

POST /_snapshot/SNAPSHOT_REPO/SNAPSHOT_NAME/_restore

Daraufhin sollten Sie die folgende Antwort erhalten:

{
  "accepted": "true"
}

Mit dem folgenden Befehl können Sie den Fortschritt Ihrer Wiederherstellung überprüfen:

GET /_snapshot/SNAPSHOT_REPO/SNAPSHOT_NAME/_status

Falls "state":"SUCCESS" angezeigt wird, wurde Ihre Wiederherstellung erfolgreich abgeschlossen:

{
  "snapshots": [
    {
      "snapshot": "my-snapshot",
      "repository": "my-snapshot-repo",
      "state": "SUCCESS",
      ...
    }
  ]
}

Glückwunsch! Sie haben Ihre „Lift-and-Shift“-Migration von AWS ES zum Elasticsearch Service erfolgreich abgeschlossen.

Fazit

Sie befinden sich jetzt im Elasticsearch Service auf Elastic Cloud und können nicht nur Funktionen verwenden, die in AWS ES nicht verfügbar sind, sondern können sich auch darauf verlassen, dass Ihre Bereitstellung von den Experten verwaltet wird, die den Elastic Stack entwickelt haben. Und falls auf dem Weg irgendwelche Schwierigkeiten auftreten sollten, helfen Ihnen die Experten beim Elastic Support jederzeit gerne.  Falls Sie noch nicht mit dem Elasticsearch Service auf Elastic Cloud arbeiten, können Sie jederzeit unsere 14-tägige, kostenlose Testversion ausprobieren, und falls Sie Fragen haben, können Sie uns jederzeit kontaktieren.