For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/data-platform/tutorials-bucket-s3-access.md.

Accéder à vos buckets avec des outils compatibles S31

Voir en Markdown

Les buckets d'un projet parlent le protocole S3, si bien que tout client compatible S3 peut les lire et les écrire : l'AWS CLI, Rclone

Objectif

Les buckets d'un projet parlent le protocole S3, si bien que tout client compatible S3 peut les lire et les écrire : l'AWS CLI, Rclone, ainsi que les AWS SDK pour NodeJS et Python. Ce tutoriel les couvre chacun tour à tour, avec les commandes et les identifiants dont chacun a besoin.

Les Buckets Data Platform sont entièrement compatibles avec le client AWS S3. Pour interagir avec eux, vous devrez générer une clé API et une clé secrète dans votre Identity Access Manager à partir d'un compte Data Platform Directory.

Info

ℹ️ Remarque : Actuellement, tous les buckets racine sont nommés "project-projectID".
Vous pouvez trouver votre projectID en cliquant sur l'icône d'information en haut à droite de la platform.
Exemple : project-abcdef

Utiliser l'AWS CLI

Info

Dans les URL de base des extraits de code ci-dessous, vous devrez remplacer my-project par le sous-domaine de votre Projet.

  1. Installez le client AWS CLI depuis https://aws.amazon.com/cli/
  2. Configurez l'AWS CLI, il est suggéré d'utiliser un profil nommé.
aws configure --profile myproject
aws Access Key ID [None]: your_access_key
aws Secret Access Key [None]: your_secret_key
Default region name [None]: forepaas
Default output format [None]:
  1. Activez AWS Signature Version 4 pour le serveur MinIO.
aws configure set s3.signature_version s3v4 --profile myproject
  1. Quelques exemples de commandes (en remplaçant my-project par le sous-domaine de votre Projet et 'mybucket' par le nom de bucket souhaité) :
# lister vos buckets
aws --profile myproject --endpoint-url https://my-project.eu.dataplatform.ovh.net/datastore s3 ls

# lister le contenu d'un bucket
aws --profile myproject --endpoint-url https://my-project.eu.dataplatform.ovh.net/datastore s3 ls s3://mybucket

# créer un bucket
aws --profile myproject --endpoint-url https://my-project.eu.dataplatform.ovh.net/datastore s3 mb s3://mybucket

# ajouter un objet à un bucket
aws --profile myproject --endpoint-url https://my-project.eu.dataplatform.ovh.net/datastore s3 cp my-file.csv s3://mybucket

# supprimer un objet d'un bucket
aws --profile myproject --endpoint-url https://my-project.eu.dataplatform.ovh.net/datastore s3 rm s3://mybucket/my-file.csv

# supprimer un bucket
aws --profile myproject --endpoint-url https://my-project.eu.dataplatform.ovh.net/datastore s3 rb s3://mybucket
Info

Pour gérer l'URL de point d'entrée au sein d'un profil nommé, vous pouvez consulter cette page de documentation : configurer l'URL de point d'entrée par profil.

Utiliser Rclone

Info

Dans les URL de base des extraits de code ci-dessous, vous devrez remplacer my-project par le sous-domaine de votre Projet.

  1. Installez rclone depuis https://rclone.org/downloads/
  2. Configurez rclone (en remplaçant my-project par le sous-domaine de votre Projet).
rclone config create my-project s3 provider Minio region forepaas env_auth false
rclone config update my-project endpoint https://my-project.eu.dataplatform.ovh.net/datastore
rclone config update my-project access_key_id YOUR_ACCESS_KEY
rclone config update my-project secret_access_key YOUR_SECRET_KEY
  1. Vérifiez l'emplacement du fichier de configuration de rclone si nécessaire
rclone config file
  1. Vérifiez que votre configuration correspond bien à ce qui suit
rclone config show my-project
[my-project]
type = s3
provider = Minio
region = forepaas
env_auth = false
endpoint = https://my-project.eu.dataplatform.ovh.net/datastore
access_key_id = YOUR_ACCESS_KEY
secret_access_key = YOUR_SECRET_KEY
  1. Quelques commandes simples (veuillez consulter la documentation de rclone pour plus de détails) :
# lister les buckets
rclone lsd my-project:

# créer un bucket
rclone mkdir my-project:test-rclone

# générer une doc locale à des fins de test
rclone gendocs docs

# copier ./docs/ vers test-rclone
rclone copy docs my-project:test-rclone/docs
# quelle est la taille d'un bucket ou d'un chemin ?
rclone size my-project:test-rclone
Total objects: 69
Total size: 239.570 kBytes (245320 Bytes)

# affiche une arborescence
rclone tree my-project:test-rclone
# déplacer des fichiers dans le bucket
rclone move my-project:test-rclone/docs/commands my-project:test-rclone/commands

# synchroniser la source vers la destination
rclone sync --dry-run docs my-project:test-rclone/docs

# lister les fichiers de façon lisible
rclone lsl my-project:test-rclone
# lister les fichiers avec des options de format
rclone lsf  --format "tsp" --recursive my-project:test-rclone

# supprimer les fichiers de plus de 1 ko
rclone --min-size 1k lsl my-project:test-rclone/commands
rclone --dry-run --min-size 1k delete my-project:test-rclone/commands
rclone --min-size 1k delete my-project:test-rclone/commands
# copier des fichiers dans ./commands
rclone copy my-project:test-rclone/commands commands
# supprimer un chemin entier
rclone delete my-project:test-rclone/commands/

Utiliser NodeJS

Info

Dans les URL de base des extraits de code ci-dessous, vous devrez remplacer [PROJECT_NAME] par le sous-domaine de votre Projet.

Info

ℹ️ Remarque : Actuellement, tous les buckets racine sont nommés "project-projectID".
Vous pouvez trouver votre projectID en cliquant sur l'icône d'information en haut à droite de la platform.
Exemple : project-abcdef

# Ajoutez aws-sdk à votre application avec la commande suivante
yarn add aws-sdk
# Ou
npm i -s aws-sdk
const AWS = require('aws-sdk')
const fs = require('fs')

// Modifiez ces valeurs pour votre environnement
let accessKey = '[ACCESS_KEY]'
let secretKey = '[SECRET_KEY]'
let endpoint = 'https://[PROJECT_NAME].eu.dataplatform.ovh.net'
let bucket = '[BUCKET_NAME]'
let region = 'forepaas'

// Construit un objet service. Cet objet possède une méthode pour chaque opération API.
const dataStoreClient = new AWS.S3({
  accessKeyId: accessKey,
  secretAccessKey: secretKey,
  endpoint: `${endpoint}/datastore`,
  region: region,
  signatureVersion: 'v4',
  s3ForcePathStyle: true
})

////////////////////////////////
// Ajoute un objet à un bucket //
////////////////////////////////
let uploadStream = fs.createReadStream('./file.csv')
dataStoreClient.putObject({
  Bucket: bucket,
  Key: 'file.csv',
  Body: uploadStream
}, (err) => {
  if (err) console.error(err)
  else console.info('File uploaded')
})

/////////////////////////////////////
// Récupère des objets depuis un bucket //
/////////////////////////////////////
let downloadStream = fs.createWriteStream('./file_downloaded.csv')
dataStoreClient.getObject({
    Bucket: bucket,
    Key: 'file.csv'
  })
  .createReadStream()
  .on('error', (err) => {
    console.error(err)
  })
  .pipe(downloadStream)
  .on('close', () => {
    console.info('File downloaded')
  })

/////////////////////////////////////
// Retourne tout ou partie (jusqu'à 1000) des objets d'un bucket.
/////////////////////////////////////
dataStoreClient.listObjects({
  Bucket: bucket
}, (err, data) => {
  if (data && data.Contents) {
    data.Contents.forEach(file => {
      console.info(`${file.Key} (${file.Size} bytes)`)
    })
  }
})

Utiliser Python

Info

Dans les URL de base des extraits de code ci-dessous, vous devrez remplacer [PROJECT_NAME] par le sous-domaine de votre Projet.

Info

ℹ️ Remarque : Actuellement, tous les buckets racine sont nommés "project-projectID".
Vous pouvez trouver votre projectID en cliquant sur l'icône d'information en haut à droite de la platform.
Exemple : project-abcdef

# Installez boto3 avec la commande suivante :
pip install boto3
import boto3
from botocore.client import Config
import os

def customfunc(event):
    # Modifiez ces valeurs pour votre environnement
    project_url = 'https://[PROJECT_NAME].eu.dataplatform.ovh.net'
    access_key = '[ACCESS_KEY]'
    secret_key = '[SECRET_KEY]'
    bucket = '[BUCKET_NAME]'
    region = 'forepaas'
    
    try:
        # Crée le client S3 (nommé datastore)
        datastore = boto3.client(
            's3',
            endpoint_url=f'{project_url}/datastore',
            aws_access_key_id=access_key,
            aws_secret_access_key=secret_key,
            config=Config(signature_version='s3v4',request_checksum_calculation='when_required'),
            region_name=region
        )

        # Liste tous les buckets disponibles
        buckets_response = datastore.list_buckets()
        print("Available buckets:")
        if 'Buckets' in buckets_response:
            for b in buckets_response['Buckets']:
                print(b['Name'])
        else:
            print("No buckets found.")

        # Teste la connexion en listant les objets du bucket spécifié
        response = datastore.list_objects(Bucket=bucket)
        print("Connection successful!")
        if response and 'Contents' in response:
            print("Bucket contents:")
            for obj in response['Contents']:
                print(f"{obj['Key']} ({obj['Size']} bytes)")
        else:
            print("Bucket is empty or no objects returned.")

        # S'assure que le fichier local existe
        local_filename = './file.csv'
        if not os.path.exists(local_filename):
            print(f"Local file {local_filename} not found.")
            return

        # Téléverse un fichier avec une clé qui le place dans un sous-dossier autorisé.
        upload_key = 'dwh/uploads/file.csv'
        datastore.upload_file(
            Bucket=bucket,
            Filename=local_filename,
            Key=upload_key
        )
        print(f"Uploaded local file '{local_filename}' to bucket '{bucket}' with key '{upload_key}'")

        # Télécharge un fichier depuis le bucket.
        # En utilisant une clé de fichier issue de vos logs :
        download_key = 'dwh/uploads/clean_cafe_sales.csv'
        local_download_filename = './clean_cafe_sales_downloaded.csv'
        datastore.download_file(
            Bucket=bucket,
            Filename=local_download_filename,
            Key=download_key
        )
        print(f"Downloaded '{download_key}' from bucket '{bucket}' to local file '{local_download_filename}'")

        #Nous avons ici utilisé un fichier avec un répertoire très spécifique via la clé de téléchargement, cela peut être fait manuellement ou en utilisant l'étape ci-dessus pour lister tous les fichiers et choisir parmi eux
        #pour référence, le dossier dpe existe ici à la racine du bucket.

    except Exception as e:
        print("Connection failed:", e)

# Exemple d'utilisation :
if __name__ == "__main__":
    customfunc(event={})

Aller plus loin

Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.

Posez vos questions, faites-nous part de vos commentaires et interagissez directement avec l’équipe qui développe la Data Platform sur le canal Discord dédié.

Si vous avez besoin d'une assistance concernant vos services OVHcloud, créez une demande depuis notre centre d'aide.

Rejoignez notre communauté d'utilisateurs.

1 : S3 est une marque déposée appartenant à Amazon Technologies, Inc. Les services de OVHcloud ne sont pas sponsorisés, approuvés, ou affiliés de quelque manière que ce soit.

Cette page vous a-t-elle aidé ?