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.
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
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.
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.
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:
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, 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.)