• Docs
  • Talk to an expert
Blog
Blog
BlogProduktFallstudienNachrichtenInsights
Blog

Verwendung des AWS S3-Snapshot-Repositorys für Elasticsearch

AWSCLIautomatisierungDevOps
18 August 2021
Sergii Dolgushev
Hauptentwickler
Contextual Code
Teilen
Diese Seite wurde von unseren Experten auf Englisch verfasst und mithilfe einer KI übersetzt, um einen schnellen Zugriff zu ermöglichen! Die Originalversion findest du hier.

Contextual Code ist auf Projekte auf Unternehmensebene für staatliche Behörden spezialisiert. Wir kümmern uns regelmäßig um anspruchsvolle Implementierungen, Migrationen, Integrationen, Anpassungen und den Betrieb von Web-Content-Management-Systemen. Wir wissen, was nötig ist, um ein Projekt auf den Weg zu bringen und ins Netz zu stellen.

Upsun Cloud ist unsere primäre Hosting-Plattform; sie ist unglaublich flexibel und bietet eine riesige Auswahl an Diensten, die mit minimalem Konfigurationsaufwand eingerichtet werden können.

Es gibt verschiedene mögliche Szenarien, wie zum Beispiel das Erstellen zusätzlicher backups oder die Synchronisierung von Daten mit lokalen Entwicklungsumgebungen, in denen du möglicherweise Daten aus diesen Diensten extrahieren musst. In vielen Fällen ist es einfach, diese Daten zu extrahieren, wenn du Upsun Cloud nutzt. Zum Beispiel kannst du MariaDB/MySQL über den Befehl des Upsun-CLI-Tools abrufen.

In manchen Fällen ist es jedoch komplexer, die benötigten Daten zu extrahieren; dann sind fortgeschrittenere Tools erforderlich. Einen solchen Fall haben wir in unserem Blogbeitrag „Backup von Solr auf Upsun“ behandelt. Heute befassen wir uns mit einem weiteren – nämlich der Verwendung des AWS Elasticsearch S3-Snapshot-Repositorys für Elasticsearch auf der Upsun Cloud.

Erste Schritte

Stellen wir zunächst sicher, dass wir einen Elasticsearch-Dienst in der Konfigurationsdatei „.upsun/config.yaml“ unter dem Schlüssel „services“ haben:

services:
  elasticsearch:
    type: elasticsearch:7.2

Dann fügen wir den Dienst über die Beziehung „elasticsearch“ in „.upsun/config.yaml“ in die Anwendung ein:

relationships:
  elasticsearch: 

Außerdem musst du in der AWS-Verwaltungskonsole Folgendes tun:

  • Erstelle einen neuen AWS-S3-Bucket
  • Mit AWS IAM einen neuen Benutzer mit Lese- und Schreibberechtigungen für den neu erstellten Bucket anlegen

Das Elasticsearch-S3-Snapshot-Repository registrieren

Das Elasticsearch-S3-Plugin lässt sich auf Upsun Cloud extrem einfach aktivieren. Wir müssen lediglich unter configuration.plugins unter „elasticsearch“ den Dienst „repository-s3“ hinzufügen:

elasticsearch:
  type: elasticsearch:7.2
  configuration:
    plugins:
      - repository-s3

Nachdem wir diese Änderung bereitgestellt haben, müssen wir per SSH auf den Anwendungscontainer zugreifen und ein neues Snapshot-Repository registrieren, indem wir den folgenden Befehl ausführen:

# SSH to the Upsun.com app container
upsun ssh

# Replace the value for these variables
AWS_BUCKET_NAME="<YOUR_AWS_BUCKET_NAME>"
AWS_ACCESS_KEY_ID="<YOUR_AWS_ACCESS_KEY_ID>"
AWS_SECRET_ACCESS_KEY="<YOUR_AWS_SECRET_ACCESS_KEY>"

# Extract Elasticsearch host and port from relationships
ES_HOST=$(echo "$PLATFORM_RELATIONSHIPS" | base64 --decode | jq -r '.elasticsearch[0].host')
ES_PORT=$(echo "$PLATFORM_RELATIONSHIPS" | base64 --decode | jq -r '.elasticsearch[0].port')

# Register the snapshot repository
curl -X PUT "http://${ES_HOST}:${ES_PORT}/_snapshot/aws-s3?pretty" -H 'Content-Type: application/json' -d'{
 "type": "s3",
 "settings": {
   "bucket": "'"${AWS_BUCKET_NAME}"'",
   "client": "default",
   "access_key": "'"${AWS_ACCESS_KEY_ID}"'",
   "secret_key": "'"${AWS_SECRET_ACCESS_KEY}"'"
 }
}'

Sobald das erledigt ist, werden alle neuen Elasticsearch-Snapshots im AWS-S3-Bucket gespeichert.

Erstellen der neuen Elasticsearch-Snapshots

Wir verwenden ein einfaches Bash-Skript, das im App-Container unter --make-elasticsearch-snapshot.sh im Stammverzeichnis deines Projekts ausgeführt werden muss:

# Extract snapshot parameters
SNAPSHOT_ID=$(date +"%Y%m%d-%H%M%S")
SNAPSHOT_NAME=$(echo "${PLATFORM_PROJECT}-${PLATFORM_BRANCH}-${SNAPSHOT_ID}")
SNAPSHOT_DATE=$(date +"%Y-%m-%d %H:%M:%S")

# Extract Elasticsearch host and port from relationships
ES_HOST=$(echo "$PLATFORM_RELATIONSHIPS" | base64 --decode | jq -r '.elasticsearch[0].host')
ES_PORT=$(echo "$PLATFORM_RELATIONSHIPS" | base64 --decode | jq -r '.elasticsearch[0].port')

# Create a new snapshot
curl -X PUT "http://${ES_HOST}:${ES_PORT}/_snapshot/aws-s3/${SNAPSHOT_NAME}?wait_for_completion=true&pretty" -H 'Content-Type: application/json' -d'{
 "ignore_unavailable": true,
 "include_global_state": false,
 "metadata": {
   "taken_by": "Upsun.com cron",
   "taken_on": "'"${SNAPSHOT_DATE}"'",
   "taken_because": "Daily backup"
 }
}

Füge dieses Skript als elasticsearch_snapshot zu den Cron-Jobs in deiner Anwendung in  .upsun/config.yaml:

crons:
  ....
  elasticsearch_snapshot:
    spec: '15 23 * * *'
      commands:
        start: bash make-elasticsearch-snapshot.sh 


Und stelle es bereit:

git add .upsun/config.yaml make-elasticsearch-snapshot.sh
git commit -m "Added Elasticsearch snapshot cron job"
git push

Nachdem dies bereitgestellt wurde, können wir das Skript im App-Container ausführen:

# SSH to the Upsun.com app container
upsun ssh

# Run the newly deployed script
bash make-elasticsearch-snapshot.sh

Der neue Snapshot wird erstellt und in unserem AWS-S3-Bucket gespeichert.

Elasticsearch-Snapshots verwenden

Wir können eine Liste der verfügbaren Snapshots abrufen, indem wir die folgenden Befehle ausführen:

# SSH to the Upsun.com app container
upsun ssh

# Extract Elasticsearch host and port from relationships
ES_HOST=$(echo "$PLATFORM_RELATIONSHIPS" | base64 --decode | jq -r '.elasticsearch[0].host')
ES_PORT=$(echo "$PLATFORM_RELATIONSHIPS" | base64 --decode | jq -r '.elasticsearch[0].port')

# Get the list of available snapshots
curl -X GET "http://${ES_HOST}:${ES_PORT}/_cat/snapshots/aws-s3?v"

Unsere nächsten Schritte wären:

  • Das gleiche S3-Snapshot-Repository für unsere lokale Elasticsearch-Installation registrieren
  • Den Snapshot auswählen, den wir auf unserer lokalen Installation wiederherstellen möchten
  • Den Snapshot in unserer lokalen Elasticsearch-Instanz wiederherstellen:
curl -X POST "http://%LOCAL_ELASTICSEARCH%/_snapshot/aws-s3/%SNAPSHOT_NAME%/_restore"

Sobald diese Schritte abgeschlossen sind, exportieren wir die Daten aus Upsun Elasticsearch in unsere lokale Installation. Und wir können diese Schritte jederzeit wiederholen, wenn wir sie brauchen.

Jetzt seid ihr dran

Ich hoffe, du fandest diesen Beitrag interessant und nützlich. Hoffentlich verdeutlicht er, wie flexibel und erweiterbar das Upsun-Cloud-Framework ist. Feedback und Kommentare sind willkommen. Viel Spaß beim Erstellen von Snapshots!

(Mit freundlicher Genehmigung abgedruckt.)

Bleiben Sie auf dem Laufenden

Abonnieren Sie unseren monatlichen Newsletter.

Deployments leicht gemacht.
Testen Sie Upsun kostenlos.

Entwickeln Sie mit DispatchDeployen Sie mit Cloud