7 Connexion à des données distantes
Quelque soit le mode d’accès à vos données distantes, les identifiants d’accès (clés API, mots de passe, etc.) ne doivent jamais être écrits en clair dans le code.
Pour une gestion sécurisée de vos identifiants :
- Consultez la section sur la gestion des variables secrètes
- Utilisez des variables d’environnement
- Dans SK8, utilisez les variables CI/CD sécurisées pour récupérer les valeurs de ces variables d’environnements
Nous présentons ici le stockage S3 offert par la DSI d’INRAE. Le principe est globalement le même pour d’autres espaces de stockages S3.
Le stockage S3 est une solution de stockage objet, similaire à celle utilisée par Nextcloud. Cette option est idéale pour le stockage de fichiers et documents pérènnes pour vos applications.
7.0.1 Mise en place
Création d’un espace
- Faites une demande de création d’espace S3 INRAE
- Accédez à votre espace via https://cloud.inrae.fr/
Attention à sélectionner la bonne région dans la bare de menu tout en haut. Dans les exemples ci-dessous c’est
inra-tls
.Création d’un bucket
- quand vous avez accès à cloud.inrae.fr, vous pouvez créer un bucket dans Stockage d’objets > Conteneurs > “+”.
Un bucket (conteneur) est l’équivalent d’un sous dossier pour vos fichiers. Vous pouvez ensuite organiser vos fichiers comme vous le souhaitez dans votre bucket (en sous dossiers, …).
Vous pourrez également créer vos buckets à distance depuis R.
Récupération de vos identifiants S3
Vous devez récupérer vos identifiants de connexion au S3 dans “Accès API” > “Voir les paramètres du compte”.
Ici nous aurons besoin de la clés d’accès EC2 et de la clé secrète EC2.
7.0.2 Intéragir avec son espace S3 depuis R
Utilisez le package aws.s3
dans R pour interagir avec votre bucket :
library("aws.s3")
# Configuration des variables d'environnement
Sys.setenv(
"AWS_ACCESS_KEY_ID" = "<VOTRE_ID_KEY>",
"AWS_SECRET_ACCESS_KEY" = "<VOTRE_SECRET_KEY>",
"AWS_DEFAULT_REGION" = "s3-tls", # Voir note ci-dessous
"AWS_S3_ENDPOINT" = "stockage.inrae.fr"
)
# Liste des buckets disponibles
::bucketlist()
aws.s3
# Lister le contenu d'un bucket dans un data.frame
<- aws.s3::get_bucket_df("MyBucket")
tt
# Charger un objet R (rds) directement dans son environnement, depuis un fichier S3.
# Le nom de l'objet correspond au champ "key" du la commande `get_bucket_df`
<- aws.s3::s3readRDS("MyObject.rds", bucket="MyBucket")
myData <- aws.s3::s3readRDS("mysubDir/MyObject.rds", bucket="MyBucket") # Si l'objet est dans un sous répertoire
myData
# envoyer un objet de son environnement R dans son espace S3 (au format rds).
::s3saveRDS(myData, "MyNewObject.rds", bucket="MyBucket")
aws.s3::s3saveRDS(myData, "mysubDir/MyNewObject.rds", bucket="MyBucket") # Pour mettre l'objet dans un sous répertoire
aws.s3
# Lire un objet non R (par ex. csv) directement dans son environnement, depuis un fichier S3.
# Le nom de l'objet correspond au champ "key" du la commande `get_bucket_df`
<- aws.s3::s3read_using(FUN = read.csv, object="MyData.csv", bucket="MyBucket")
myData
# écrire un objet de son environnement R dans son espace S3 (au format csv par exemple).
::s3write_using(myData, FUN = write.csv, object="MyNewData.rds", bucket="MyBucket") aws.s3
Note importante : La région (AWS_DEFAULT_REGION
) doit correspondre au début de l’adresse S3 visible dans le menu “Accès API” de votre projet sur cloud.inrae.fr.
7.0.3 Options disponibles
- Bases de données gérées par la DSI
- Demande de création via Ariane
- Supports : PostgreSQL, MySQL, etc.
- Bases sur machine virtuelle
- Demande de VM via Ariane
- Installation et gestion de votre propre serveur de bases de données
7.0.4 Configuration requise
- Ouverture des ports
- Faire une demande d’ouverture de ports pour le datacenter/VM
- Configuration des règles de pare-feu nécessaires
- Autorisation d’accès
- Ajouter l’IP SK8 dans les règles d’accès de la base de données
- Contacter l’équipe SK8 pour obtenir l’IP
- Connexion depuis R
Utiliser le package
DBI
et le driver approprié pour votre SGBDExemple avec PostgreSQL :
library(DBI) library(RPostgres) <- dbConnect( con Postgres(), host = "xxx", port = 5432, dbname = "ma_base", user = Sys.getenv("DB_USER"), password = Sys.getenv("DB_PASSWORD") )
7.0.5 Configuration requise
- Côté serveur local
- Demander l’ouverture des ports nécessaires
- Configurer le pare-feu pour autoriser l’accès depuis l’IP SK8
- Configuration de l’application
- Utiliser les packages appropriés pour la connexion
- Gérer les identifiants de manière sécurisée