Watch a demoFree trial
Blog

AWS S3-Snapshot-Repository für Elasticsearch verwenden

AWSCLIAutomatisierungDevOps
18 August 2021
Teilen Sie
Dieser Beitrag ist auch auf Englische.

Contextual Code hat sich auf Projekte auf Unternehmensebene für staatliche Regierungsbehörden spezialisiert. Wir nehmen routinemäßig schwierige Web-Content-Management-Implementierungen, Migrationen, Integrationen, Anpassungen und Operationen in Angriff. Wir wissen, was nötig ist, um ein Projekt auf die Beine zu stellen und ins Internet zu bringen.

Upsun ist unsere primäre Hosting-Plattform; sie ist unglaublich flexibel und bietet eine umfangreiche Liste von Diensten, die mit minimaler Konfiguration eingerichtet werden können.

Es gibt mehrere mögliche Szenarien, z. B. die Erstellung zusätzlicher Backups oder die Synchronisierung von Daten mit lokalen Entwicklungsumgebungen, wenn Sie Daten aus diesen Diensten extrahieren müssen. In vielen Fällen ist es einfach, diese Daten zu extrahieren, wenn Sie Upsun verwenden. Zum Beispiel können Sie MariaDB/MySQL über das Upsun CLI-Tool abrufen .

In einigen Fällen ist es jedoch komplizierter, die benötigten Daten zu extrahieren; dann sind fortgeschrittenere Tools erforderlich. Wir haben einen solchen Fall in unserem BlogbeitragBackup Solr on Upsun behandelt . Heute werden wir einen weiteren Fall behandeln, die Verwendung des AWS Elasticsearch S3 Snapshot Repository für Elasticsearch auf Upsun.

Erste Schritte

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

services:
  elasticsearch:
    type: elasticsearch:7.2

Dann injizieren wir den Dienst in die Anwendung über die elasticsearch relationships in .upsun/config.yaml:

relationships:
  elasticsearch: 

Außerdem müssen wirin der AWS Management Console Folgendes tun

  • Ein neues AWS S3 Bucket erstellen
  • AWS IAM verwenden , um einen neuen Benutzer mit Lese- und Schreibrechten für den neu erstellten Bucket zu erstellen

Registrierung des Elasticsearch S3 Snapshot Repository

Das Elasticsearch S3-Plugin lässt sich auf Upsun sehr einfach aktivieren. Wir müssen nur repository-s3 in configuration.plugins für den elasticsearch service in .upsun/services.yaml hinzufügen:

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

Nachdem wir diese Änderung implementiert 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 dies 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 ausgeführt werden muss --make-elasticsearch-snapshot.sh im Stammverzeichnis Ihres Projekts:

# 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ügen Sie dieses Skript als elasticsearch_snapshot zu den Cron-Jobs in Ihrer Anwendung in .upsun/config.yaml hinzu:

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


Und verteilen Sie es:

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 zum Upsun.com-App-Container upsun ssh # Ausführen des neu bereitgestellten Skripts bash make-elasticsearch-snapshot.sh

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

Verwendung von Elasticsearch-Snapshots

Wir können eine Liste der verfügbaren Snapshots erhalten, 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 unser lokales Elasticsearch registrieren
  • Auswahl des Snapshots, den wir auf unserer lokalen Installation wiederherstellen wollen
  • Stellen Sie den Snapshot auf unserem lokalen Elasticsearch wieder her:
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 sind Sie dran

Ich hoffe, Sie haben diesen Beitrag interessant und nützlich gefunden. Hoffentlich zeigt er, wie flexibel und erweiterbar das Upsun-Framework ist. Feedback und Kommentare sind erwünscht. Viel Spaß beim Snapshotten!

(Nachdruck mit Genehmigung.)

Ihr größtes Werk
steht vor der Tür

Kostenloser Test
Discord
© 2025 Platform.sh. All rights reserved.