
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.
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.2Dann 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:
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-s3Nachdem 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.
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.
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:
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.
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.)