Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Example d'utilisation avec un stockage S3 #31

Open
sylvainbeo opened this issue Apr 12, 2023 · 8 comments
Open

Example d'utilisation avec un stockage S3 #31

sylvainbeo opened this issue Apr 12, 2023 · 8 comments
Labels
question Further information is requested

Comments

@sylvainbeo
Copy link

Bonjour,

J'utilise la librairie ROK4 dans le cadre d'un projet IGN.
Jusqu'à présent, les tests ont été fait avec un mode FILE pour accéder aux pyramides ROK4.

Dans le code je définis le TMS

os.environ["ROK4_TMS_DIRECTORY"] = settings.ROK4_TMS_DIRECTORY

et j'initialise le descripteur :

pyramid_descriptor = Pyramid.from_descriptor(settings.ROK4_PYRAMID_DESCRIPTOR)

Aucun soucis, ça marche parfaitement (vu avec @Dolite ).

Je souhaite tester le même code mais avec un pyramide stockée dans un S3.
Je me suis créé en local une configuration Minio à partir de https://hub.docker.com/r/rok4/dataset.

docker run -p 9000:9000 -p 9001:9001 rok4/dataset:minio

J'ai généré une key et une secretkey.

Comment dois-je adapter mon code pour aller chercher les infos dans ce stockage ? Est-ce que je dois continuer d'utiliser la fonction from_descriptor ?

J'ai cru voir qu'il fallait éventuellement préciser (?) :

os.environ["GPF_S3_URL"] = xxxx
os.environ["GPF_S3_KEY"] = xxx
os.environ["GPF_S3_SECRETKEY"] = xxxxx

Merci

@XavDmz
Copy link
Contributor

XavDmz commented Apr 12, 2023

Bonjour sylvainbeo,

En effet, les informations sur le stockages s3 sont fournies à la librairie à l'aide de variables d'environnement.
Les variables sont les suivantes:

  • ROK4_S3_URL
  • ROK4_S3_KEY
  • ROK4_S3_SECRETKEY

La fonction from_descriptor est compatible avec ce type de type de stockage.
Le chemin du descripteur stocké sur un bucket s3 sera alors de la forme s3://<bucket_name>/<object_name>.

En attendant que la documentation générale de la librairie soit améliorée, la documentation développeur de la classe rok4.Storage fournit des informations supplémentaires sur les différentes formats de stockage supportés.

C'est cette classe Storage seule qui se charge de gérer ces formats, à la demande des autres classes qui n'ont aucune visibilité sur cette information. Le but est bien de minimiser mles adaptations de code en cas de changement de type de stockage.

@XavDmz XavDmz added the question Further information is requested label Apr 12, 2023
@sylvainbeo
Copy link
Author

@XavDmz Merci pour ces infos.

J'ai paramétré les 3 variables ROK4_S3_URL, ROK4_S3_KEY, ROK4_S3_SECRETKEY.

Quand je fais appel à :

pyramid_descriptor = Pyramid.from_descriptor('s3://pyramids@172.17.0.2:9000/ALTI.json')

# ou bien 

pyramid_descriptor = Pyramid.from_descriptor('s3://pyramids/ALTI.json')

J'ai l'erreur :

rok4.Exceptions.StorageError: Issue occured using a S3 storage : An error occurred (NoSuchBucket) when calling the GetObject operation: The specified bucket does not exist

Comme cité plus haut, j'utilise le docker contenant un minio et des pyramides déjà créées.

image

Le bucket pyramids est bien présent.

(A priori l'accès au S3 se fait bien, car avec des KEY et SECRET_KEY invalides, j'ai le bon message d'erreur).

Je ne suis pas très familier avec le stockage S3. Je suis preneur de toute infos.

Merci

@sylvainbeo
Copy link
Author

@XavDmz Re, J'ai l'impression qu'il y a un petit bug dans la classe Storage.py

Le code ne devrait-il pas être :

data = s3_client.get_object(
                    Bucket=tray_name,
                    Key=base_name,
                )['Body'].read()

@sylvainbeo
Copy link
Author

Ah mais en fait, je vois que dans la 1.6.0 il n'y a plus ce bug...comment se fait-il que le master l'ait toujours ?

@XavDmz
Copy link
Contributor

XavDmz commented Apr 12, 2023

Je ne suis pas non plus très familier du stockage s3. Pas encore. Du coup je suis aps sûr que j'aurais pu fournir des informations si l'erreur venait de ce dernier. (Pas rapidement en tout cas.)

Au sujet du bug de la classe Storage, visiblement la branche master est toujours sur la version 1.0.1.
Je ne sais plus pourquoi les versions plus récentes ne sont disponibles que sur la branche develop.

@sylvainbeo
Copy link
Author

Ok. Merci pour les précisions. Je testais avec la version 14.4. Je suis passé à la version 1.6.0, et ça résoud le bug.

A priori, la connexion se fait bien. J'ai aucune tuile retournée pour le moment, mais je pense que c'est parce que je n'interroge pas encore les bonnes données.

@sylvainbeo
Copy link
Author

@XavDmz Je suis arrivé au bout de mon expérimentation avec succès.

A partir du RGEALTI, j'ai pu recréer un pyramide ROK4 sur un serveur S3, et utiliser la lib Python pour l'interroger.

Je pourrais en faire un tutoriel. Est-ce qu'une contribution de ma part serait souhaitable ? Si oui, à quel endroit ?

Merci

@XavDmz
Copy link
Contributor

XavDmz commented Apr 17, 2023

Désolé pour le délai, j'étais absent.

@XavDmz Je suis arrivé au bout de mon expérimentation avec succès.

A partir du RGEALTI, j'ai pu recréer un pyramide ROK4 sur un serveur S3, et utiliser la lib Python pour l'interroger.

C'est une bonne nouvelle.

Je pourrais en faire un tutoriel. Est-ce qu'une contribution de ma part serait souhaitable ?

Je pense que les contributions sont bienvenue, et que le projet est ouvert dans cet esprit.

Si oui, à quel endroit ?

D'après les infos que j'ai eu en interne, ce serait au format markdown au sein du projet rok4/rok4.github.io. Il faudrait y ajouter une section dédiée pour les tutoriels et exemples de bout en bout.
J'en déduit qu'il faudrait au moins une page docs/tutorials.md, elle même référencée dans docs/index.md
Par contre je suis pas sûr qu'une telle page dédiée. Peut-être ajouter un dossier dépendant docs/tutorials/ avec un fichier markdown par tutoriel ou lot de tutoriels serait plus lisible à long terme ?

@rok4/rok4-ign-team Comment voyez vous le format ?
Je pourrais créer la structure une fois qu'elle sera définie.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants