7  Connexion à des données distantes

ImportantNE JAMAIS METTRE SES IDENTIFIANTS D’ACCES DIRECTEMENT DANS LE CODE, SURTOUT SUR LA FORGE

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

  1. Création d’un espace

    Attention à sélectionner la bonne région dans la bare de menu tout en haut. Dans les exemples ci-dessous c’est inra-tls.

  2. 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.

  3. 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
aws.s3::bucketlist()

# Lister le contenu d'un bucket dans un data.frame
tt <- aws.s3::get_bucket_df("MyBucket")

# 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`
myData <- 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

# envoyer un objet de son environnement R dans son espace S3 (au format rds).
aws.s3::s3saveRDS(myData, "MyNewObject.rds", bucket="MyBucket")
aws.s3::s3saveRDS(myData, "mysubDir/MyNewObject.rds", bucket="MyBucket") # Pour mettre l'objet dans un sous répertoire

# 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`
myData <- aws.s3::s3read_using(FUN = read.csv, object="MyData.csv", bucket="MyBucket")

# écrire un objet de son environnement R dans son espace S3 (au format csv par exemple).
aws.s3::s3write_using(myData, FUN = write.csv, object="MyNewData.rds", bucket="MyBucket")

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

  1. Bases de données gérées par la DSI
  2. Bases sur machine virtuelle

7.0.4 Configuration requise

  1. Ouverture des ports
  2. 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
  3. Connexion depuis R
    • Utiliser le package DBI et le driver approprié pour votre SGBD

    • Exemple avec PostgreSQL :

      library(DBI)
      library(RPostgres)
      
      con <- dbConnect(
        Postgres(),
        host = "xxx",
        port = 5432,
        dbname = "ma_base",
        user = Sys.getenv("DB_USER"),
        password = Sys.getenv("DB_PASSWORD")
      )

7.0.5 Configuration requise

  1. Côté serveur local
  2. Configuration de l’application
    • Utiliser les packages appropriés pour la connexion
    • Gérer les identifiants de manière sécurisée

7.1 Ressources additionnelles