Remarques :

Utiliser l'API de compatibilité Amazon S3 OCI Object Storage avec le kit SDK AWS pour C++

Introduction

Oracle Cloud Infrastructure (OCI) Object Storage permet aux clients de stocker en toute sécurité tout type de données dans son format natif. Avec la redondance intégrée, OCI Object Storage est idéal pour créer des applications modernes qui nécessitent évolutivité et flexibilité, car il peut être utilisé pour consolider plusieurs sources de données à des fins d'analyse, de sauvegarde ou d'archivage.

OCI Object Storage est fondamental pour les workloads cloud. Son élasticité, son évolutivité, sa fiabilité et sa rentabilité en ont fait le stockage principal pour les données non structurées dans le cloud. En raison de sa popularité, il existe un vaste écosystème d'outils permettant d'utiliser OCI Object Storage.

OCI Object Storage fournit une API de compatibilité Amazon S3. Les clients peuvent continuer à utiliser leurs outils Amazon S3 existants et apporter des modifications minimales à leurs applications pour qu'elles fonctionnent avec OCI Object Storage. Les ensembles de données de l'API de compatibilité Amazon S3 et d'OCI Object Storage sont compatibles. Si les données sont écrites dans OCI Object Storage avec l'API de compatibilité Amazon S3, vous pouvez les lire avec l'API native OCI Object Storage et inversement. Les clients qui utilisent le SDK AWS pour C++ peuvent trouver l'aspect d'authentification difficile lors de l'utilisation de l'API de compatibilité Amazon S3, ce tutoriel vise à fournir deux exemples simples pour commencer à utiliser le SDK AWS pour C++.

Remarque : il s'agit d'exemples de scripts utilisant le kit SDK AWS pour C++, qui ne sont pas des applications Oracle officielles et qui ne sont pas gérés ou pris en charge par Oracle. Comme il s'agit d'exemples, vous pouvez les examiner, les mettre à jour et les personnaliser en fonction de votre cas d'emploi dans votre propre référentiel de logiciels. Oracle ne certifie ni ne prend en charge les kits SDK tiers.

Objectifs

Prérequis

Tâche 1 : comprendre les URL de chemin et de style hébergé virtuel

Au moment d'écrire ce tutoriel, l'API de compatibilité Amazon S3 OCI Object Storage prend en charge les URL de type chemin. Cela signifie que le bucket se trouve dans le chemin d'URL.

Exemple :

https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyBucketName

OR (OU)

https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyBucketName/MyObjectName

Dans les URL de type hébergé virtuel, le nom du bucket OCI Object Storage est inclus dans le sous-domaine (ou au début) de l'URL.

Exemple :

https://MyBucketName.MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com

OR (OU)

https://MyBucketName.MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyObjectName

Par défaut, le SDK AWS pour C++ utilise des URL de type hébergé virtuel. Lorsque vous suivez les exemples de code produits par AWS et que vous remplacez des valeurs de votre location OCI, une erreur semblable à la sortie suivante s'affiche. Pour plus d'informations, reportez-vous à Création, création de listes et suppression de buckets.

curlCode: 60, SSL peer certificate or SSH remote key was not OK 

Etant donné que le code utilise une URL de type hébergé virtuel, il ne fait pas référence au bucket OCI Object Storage ni à un certificat valide.

Le paramètre S3Client doit être modifié pour utiliser des URL de type chemin. La configuration doit être définie à l'aide de la commande suivante.

Aws::Client::ClientConfiguration config; 

S3Client s3Client(config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false); 

Tâche 2 : détermination de l'espace de noms de location et du compartiment d'API S3

  1. Connectez-vous à votre système Linux.

    Remarque : toutes les commandes seront exécutées à partir de votre système Linux sur lequel vous avez installé et configuré les prérequis nécessaires.

  2. Exécutez la commande d'interface de ligne de commande OCI oci os ns get-metadata.

    $ oci os ns get-metadata
    {
      "data": {
        "default-s3-compartment-id": "ocid1.tenancy.oc1..bbbbcccdabcc0x0aaaaaa00aaaaaaaaaaa0b0b00ccccccccbbbbbbbb00aa",
        "default-swift-compartment-id": "ocid1.tenancy.oc1..bbbbcccdabcc0x0aaaaaa00aaaaaaaaaaa0b0b00ccccccccbbbbbbbb00aa",
        "namespace": "MyNamespace"
      }
    }
    
  3. Si l'OCID de compartiment S3 contient le mot tenancy, il s'agit du compartiment racine. Obtenez le nom à l'aide de la commande suivante.

    $ oci iam compartment get --compartment-id <compartment_ocid>
    

    Sinon, pour le compartiment racine de la location, exécutez la commande suivante.

    $ oci iam tenancy get --tenancy-id <tenancy_ocid>
    

    Vous pouvez également utiliser la console OCI en accédant à votre profil dans l'angle supérieur droit et en sélectionnant la location (your_tenancy_name) pour déterminer l'espace de noms et le compartiment d'API S3.

    Ecran Location OCI

    Le compartiment S3 sera à nouveau utilisé dans la tâche 4.

Tâche 3 : création d'une clé secrète client pour accéder à l'API compatible S3

Générez une clé secrète à l'aide des commandes de l'interface de ligne de commande OCI.

  1. Exécutez la commande oci iam customer-secret-key create.

    oci iam customer-secret-key create --display-name display-name --user-id ocid1.user.oc1..aaaaaaaa-user-ocid-sdd6ahdouq
    {
    "data": {
         "display-name": "display-name",
         "id": "7aaaa3462aa34271a276002015f30674a5325aaa",
         "inactive-status": null,
         "key": "1aaa577aaaa/aa3aa92aa7aa7aaaaaaAa0aaaAa8AAa=",
         "lifecycle-state": "ACTIVE",
         "time-created": "2024-07-19T19:58:03.794000+00:00",
         "time-expires": null,
         "user-id": "ocid1.user.oc1..aaaaaaaa-user-ocid-sdd6ahdouq"
    },
    "etag": "e63038c73fc24fa087a2a4c3339ef709"
    }
    
  2. Copiez l'ID (AWS_ACCESS_KEY_ID) et la clé (AWS_SECRET_ACCESS_KEY) dans un emplacement sécurisé à utiliser ultérieurement pour définir les variables d'environnement.

    Remarque : l'OCID utilisateur se trouve dans le fichier de configuration de l'interface de ligne de commande OCI, généralement stocké dans $HOME/.oci/config.

Ou

Vous pouvez également générer une clé secrète à l'aide de la console OCI et accéder à votre profil dans l'angle supérieur droit, puis sélectionner le nom utilisateur affiché. Cliquez sur le lien Clés secrètes client, Générer une clé secrète et définissez un nom d'affichage. Cliquez sur copier, stockez la clé secrète dans un emplacement sécurisé, puis cliquez sur Fermer.

Accès aux "clés secrètes client" à partir du profil

Après avoir fermé la fenêtre Générer une clé secrète, recherchez le nom d'affichage dans la liste des clés secrètes client, placez le curseur de la souris sur la clé d'accès et copiez la clé d'accès.

Copie de la clé d'accès

Tâche 4 : Collecter les informations de regroupement pour la configuration

  1. Accédez à la console OCI, accédez à Stockage et cliquez sur Buckets.

  2. Cliquez sur le nom du bucket dans les prérequis et notez les informations suivantes.

    • Nom du bucket.
    • Emplacement des objets. Il s'agit du préfixe.
    • Nom de la région. Obtenez le code de région ici : Régions et domaines de disponibilité. Par exemple, l'est des Etats-Unis (Ashburn) serait représenté par us-ashburn-1.

    Collecte des informations de bucket et d'objet pour la configuration

Tâche 5 : définir des variables d'environnement

Définissez les variables d'environnement en fonction des informations des tâches précédentes à l'aide de la commande suivante.

export AWS_ACCESS_KEY_ID="<your access key ID from Task 3>"
export AWS_SECRET_ACCESS_KEY="<your secret key ID from Task 3>"
export OCI_REGION="bukcet region from Task 4>"
export OCI_NAMESPACE="<namespace name from Task 1>"
export OCI_BUCKET="<your bucket name from Task 4>"
export OCI_PREFIX="<object prefix name from Task 4>"

Exemple :

export AWS_ACCESS_KEY_ID="da34baaa4ab029f51c34c1cee83d40f0dEXAMPLE" 
export AWS_SECRET_ACCESS_KEY="7w3uMS6kYiYkUpziSlLFcBimBsYDJfojwCWKEXAMPLE=" 
export OCI_REGION="us-ashburn-1" 
export OCI_NAMESPACE="MyNamespace"
export OCI_BUCKET="Images" 
export OCI_PREFIX="2024/12/18/Camera" 

Tâche 6 : Construire les exemples C++

  1. Exécutez la commande suivante pour cloner l'exemple de référentiel dans git.

    $ git clone https://github.com/tonymarkel/OCI_AWS_CPP_SDK_S3_Examples.git
    
  2. Exécutez les commandes suivantes pour accéder au répertoire contenant les exemples C++, créez un répertoire de build, accédez à ce répertoire, puis exécutez build et make.

    $ OCI_AWS_CPP_SDK_S3_Examples 
    $ mkdir build 
    $ cd build 
    $ cmake .. 
    $ make 
    

Remarque : il s'agit d'exemples de scripts utilisant le kit SDK AWS pour C++, qui ne sont pas des applications Oracle officielles et qui ne sont pas gérés ou pris en charge par Oracle. Comme il s'agit d'exemples, vous pouvez les examiner, les mettre à jour et les personnaliser en fonction de votre cas d'emploi dans votre propre référentiel de logiciels. Oracle ne certifie ni ne prend en charge les kits SDK tiers.

Tâche 7 : exécuter les exemples

  1. Exécutez la commande suivante pour obtenir la liste des buckets.

    $ ./listBuckets $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY 
    

    Exemple :

    $ ./listBuckets $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY 
    S3 Endpoint is: https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/ 
    Found 3 buckets 
    Demo 
    Images 
    Logs 
    
  2. Exécutez la commande suivante pour obtenir la liste des objets.

    Exemple :

    $ ./listObjects $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY $OCI_BUCKET $OCI_PREFIX 
    S3 Object Path is: https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com 
    Bucket is: Images 
    Prefix is: 2024/12/18/Camera 
    LISTING OBJECTS 
    Found 3 objects 
    2024/12/18/Camera/Image1.jpeg 
    2024/12/18/Camera/Image2.jpeg 
    2024/12/18/Camera/DefinitelyNotACat.jpeg 
    

Remarque : en cas de problème, revenez à la tâche 5 et assurez-vous que vos variables d'environnement sont définies correctement.

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir la documentation produit, consultez le site Oracle Help Center.