Watch a demoFree trial
Blog

Utilisation du dépôt d'instantanés AWS S3 pour Elasticsearch

AWSCLIl'automatisationDevOps
18 août 2021
Partager
Cet article est également disponible en allemand et en anglais.

Contextual Code est spécialisé dans les projets d'entreprise pour les agences gouvernementales. Nous nous attaquons régulièrement à des projets difficiles de gestion de contenu web, de migration, d'intégration, de personnalisation et d'exploitation. Nous savons ce qu'il faut faire pour lancer un projet et le mettre en ligne.

Upsun est notre principale plateforme d'hébergement ; elle est incroyablement flexible et fournit une vaste liste de services qui peuvent être mis en place avec une configuration minimale.

Il existe plusieurs scénarios possibles, tels que la création de sauvegardes supplémentaires ou la synchronisation des données avec les environnements de développement locaux, dans lesquels vous pouvez avoir besoin d'extraire des données de ces services. Dans de nombreux cas, il est facile d'extraire ces données lorsque vous utilisez Upsun. Par exemple, vous pouvez obtenir MariaDB/MySQL via la commande de l'outil CLI d'Upsun.

Mais dans certains cas, il est plus complexe d'extraire les données dont vous avez besoin ; des outils plus avancés sont nécessaires. Nous avons abordé l'un de ces cas dans notre article de blog Backup Solr on Upsun. Aujourd'hui, nous allons en aborder un autre : comment utiliser le référentiel d'instantanés S3 d'AWS Elasticsearch pour Elasticsearch sur Upsun.

Pour commencer

Tout d'abord, assurons-nous que nous avons un service Elasticsearch dans le fichier de configuration .upsun/config.yaml, sous la clé services:

services:
  elasticsearch:
    type: elasticsearch:7.2

Injectons ensuite le service dans l'application via la relation elasticsearch dans le fichier .upsun/config.yaml:

relationships:
  elasticsearch: 

De plus, dans la console de gestion AWS, nous devons :

  • Créer un nouveau seau AWS S3
  • Utiliser AWS IAM pour créer un nouvel utilisateur avec des permissions de lecture et d'écriture pour le bucket nouvellement créé.

Enregistrer le référentiel d'instantanés S3 d'Elasticsearch

Le plugin Elasticsearch S3 est extrêmement facile à activer sur Upsun. Il suffit d'ajouter repository-s3 dans configuration.plugins pour le service elasticsearch dans .upsun/services.yaml:

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

Après avoir déployé ce changement, nous devons nous connecter en SSH au conteneur d'application et enregistrer un nouveau dépôt d'instantanés en exécutant la commande suivante :

# SSH vers le conteneur Upsun.com app container upsun ssh

# Remplacer la valeur de ces 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>"

# Extraire l'hôte et le port Elasticsearch des relations
ES_HOST=$(echo "$PLATFORM_RELATIONSHIPS" | base64 --decode | jq -r '.elasticsearch[0].host')
ES_PORT=$(echo "$PLATFORM_RELATIONSHIPS" | base64 --decode | jq -r '.elasticsearch[0].port')

#  Enregistrer le dépôt d'instantanés
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}"'"
 }
}'

Une fois cette opération effectuée, tous les nouveaux instantanés Elasticsearch seront stockés dans le seau AWS S3.

Création des nouveaux instantanés Elasticsearch

Nous allons utiliser un simple script bash qui devra être exécuté dans le conteneur d'application --make-elasticsearch-snapshot.sh à la racine de votre projet :

#  Extraire les paramètres de l'instantané
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")

# Extraire l'hôte et le port Elasticsearch des relations
ES_HOST=$(echo "$PLATFORM_RELATIONSHIPS" | base64 --decode | jq -r '.elasticsearch[0].host')
ES_PORT=$(echo "$PLATFORM_RELATIONSHIPS" | base64 --decode | jq -r '.elasticsearch[0].port')

# Créer un nouveau 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"
 }
}

Ajoutez ce script en tant qu'elasticsearch_snapshot aux tâches cron de votre application dans .upsun/config.yaml:

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


Et déployez-le :

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

Après le déploiement, nous pouvons exécuter le script dans le conteneur d'application :

# SSH au conteneur d'application Upsun.com 
upsun ssh

# Exécuter le script nouvellement déployé 
bash make-elasticsearch-snapshot.sh

Le nouveau snapshot sera créé et stocké dans notre bucket AWS S3.

Utilisation des instantanés Elasticsearch

Nous pouvons obtenir une liste des snapshots disponibles en exécutant les commandes suivantes :

# 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"

Nos prochaines étapes seraient les suivantes :

  • Enregistrer le même dépôt d'instantanés s3 pour notre Elasticsearch local.
  • Choisir le snapshot que nous voulons restaurer sur notre installation locale
  • Restaurer l'instantané sur notre Elasticsearch local :
curl -X POST "http://%LOCAL_ELASTICSEARCH%/_snapshot/aws-s3/%SNAPSHOT_NAME%/_restore"

Une fois ces étapes terminées, nous exportons les données de Upsun Elasticsearch vers notre installation locale. Nous pouvons répéter ces étapes à chaque fois que nous en avons besoin.

Maintenant, c'est à vous de jouer

J'espère que vous avez trouvé cet article intéressant et utile. J'espère qu'il illustre la flexibilité et l'extensibilité du framework Upsun. Vos réactions et commentaires sont les bienvenus. Joyeux instantanés !

(Reproduit avec l'autorisation de l'auteur)

Votre meilleur travail
est à l'horizon

Essai gratuit
Discord
© 2025 Platform.sh. All rights reserved.