• Docs
  • Talk to an expert
Blog
Blog
BlogProduitÉtudes de casNouvellesPerspectives
Blog

Utilisation du référentiel de snapshots AWS S3 pour Elasticsearch

AWSCLIautomatisationDevOps
18 août 2021
Sergii Dolgushev
Développeur principal
Contextual Code
Partager
Cette page a été rédigée en anglais par nos experts, puis traduite par une IA pour vous y donner accès rapidement! Pour la version originale, c’est par ici.

Contextual Code est spécialisé dans les projets d'envergure pour les administrations publiques régionales. On gère régulièrement des mises en œuvre complexes de gestion de contenu web, des migrations, des intégrations, des personnalisations et des opérations. On sait ce qu'il faut pour lancer un projet et le mettre en ligne.

Upsun Cloud est notre principale plateforme d’hébergement ; elle est incroyablement flexible et propose une vaste gamme de services pouvant être mis en place avec un minimum de configuration.

Il existe plusieurs cas de figure, comme la création de sauvegardes supplémentaires ou la synchronisation de données vers des environnements de développement locaux, où tu peux avoir besoin d’extraire des données de ces services. Dans de nombreux cas, c’est simple d’extraire ces données quand tu utilises Upsun Cloud. Par exemple, tu peux récupérer MariaDB/MySQL via la commande de l’outil CLI d’Upsun.

Mais dans certains cas, l’extraction des données dont tu as besoin s’avère plus complexe ; des outils plus avancés sont alors nécessaires. On a abordé l’un de ces cas dans notre article de blog « Sauvegarder Solr sur Upsun ». Aujourd’hui, on va en aborder un autre : comment utiliser le référentiel de snapshots S3 d’AWS Elasticsearch pour Elasticsearch sur Upsun Cloud.

Pour commencer

Tout d’abord, vérifions qu’un service Elasticsearch est bien présent dans le fichier de configuration `.upsun/config.yaml`, sous la clé `services` :

services:
  elasticsearch:
    type: elasticsearch:7.2

Ensuite, on injecte le service dans l’application via la relation « elasticsearch » dans « .upsun/config.yaml » :

relationships:
  elasticsearch: 

De plus, dans la console de gestion AWS, il faut :

  • Créer un nouveau compartiment AWS S3
  • Utiliser AWS IAM pour créer un nouvel utilisateur disposant de droits de lecture et d’écriture sur le compartiment nouvellement créé

Enregistrer le référentiel de snapshots Elasticsearch S3

Le plugin Elasticsearch S3 est super facile à activer sur Upsun Cloud. 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

Une fois cette modification déployée, il faut se connecter via SSH au conteneur de l’application et enregistrer un nouveau référentiel de snapshots en exécutant la commande suivante :

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

Une fois ça fait, tous les nouveaux instantanés Elasticsearch seront stockés dans le compartiment AWS S3.

Création des nouveaux snapshots Elasticsearch

On va utiliser un script bash tout simple qu’il faudra exécuter dans le conteneur de l’application --make-elasticsearch-snapshot.sh à la racine de ton projet :

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

Ajoute ce script elasticsearch_snapshot aux tâches cron de ton application dans  .upsun/config.yaml:

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


Et déploie-le :

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

Une fois le déploiement terminé, on peut exécuter le script dans le conteneur de l'application :

# SSH to the Upsun.com app container
upsun ssh

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

Le nouvel instantané sera créé et stocké dans notre compartiment AWS S3.

Utilisation des snapshots Elasticsearch

On peut obtenir la 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 seront les suivantes :

  • Enregistrer le même référentiel de snapshots S3 pour notre Elasticsearch local
  • Choisir le snapshot qu’on veut restaurer sur notre installation locale
  • Restaurer le snapshot sur notre Elasticsearch local :
curl -X POST "http://%LOCAL_ELASTICSEARCH%/_snapshot/aws-s3/%SNAPSHOT_NAME%/_restore"

Une fois ces étapes terminées, on exporte les données d’Upsun Elasticsearch vers notre installation locale. Et on peut répéter ces étapes quand on en a besoin.

À toi de jouer

J'espère que cet article t'a paru intéressant et utile. J'espère qu'il illustre bien la flexibilité et l'évolutivité du framework Upsun Cloud. N'hésite pas à nous faire part de tes retours et commentaires. Bonne création de snapshots !

(Reproduit avec autorisation.)

Restez informé

Abonnez-vous à notre newsletter mensuelle pour les dernières mises à jour et nouvelles.

Déployez en toute liberté.
Essayez Upsun gratuitement.

Développez avec DispatchDéployez avec Cloud