Note :

Utiliser l'API de compatibilité Amazon S3 du service de stockage d'objets d'OCI avec la trousse SDK AWS pour C++

Présentation

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 une mise à l'échelle et une 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 la base des charges de travail en nuage, son élasticité, son extensibilité, sa fiabilité et sa rentabilité en ont fait le stockage principal pour les données non structurées dans le nuage. En raison de sa popularité, il existe un vaste écosystème d'outils pour utiliser le service de stockage d'objets pour OCI.

Le service de stockage d'objets d'OCI 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 utiliser le service de stockage d'objets d'OCI. Les jeux de données de l'API de compatibilité Amazon S3 et du stockage d'objets d'OCI sont congruents. Si des données sont écrites dans le service de stockage d'objets d'OCI à l'aide de l'API de compatibilité Amazon S3, vous pourrez les lire au moyen de l'API native de stockage d'objets d'OCI 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++.

Note : Il s'agit d'exemples de scripts utilisant la trousse 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 réviser, les mettre à jour et les personnaliser en fonction de votre cas d'utilisation dans votre propre référentiel logiciel. Oracle ne certifie pas les trousses SDK de tierce partie ni ne les prend en charge.

Objectifs

Préalables

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

Au moment de l'écriture de ce tutoriel, l'API de compatibilité Amazon S3 du service de stockage d'objets d'OCI prend en charge les URL de style chemin. Cela signifie que le seau se trouve dans le chemin de l'URL.

Par exemple :

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

OU

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

Dans les URL de style hébergé virtuel, le nom du seau de stockage d'objets OCI est inclus dans le sous-domaine (ou au début) de l'URL.

Par exemple :

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

OU

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

Par défaut, le SDK AWS pour C++ utilise des URL de style 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 s'affiche comme dans la sortie suivante. Pour plus d'informations, voir Création, liste et suppression de seaux.

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

Comme le code utilise une URL de style hébergé virtuel, il ne référencera pas le seau de stockage d'objets OCI ni un certificat valide.

Le paramètre S3Client doit être modifié pour utiliser des URL de style 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éterminer l'espace de noms de la location et le compartiment de l'API S3

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

    Note : Toutes les commandes seront exécutées à partir de votre système Linux où vous avez installé et configuré les préalables nécessaires.

  2. Exécutez la commande de l'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 du 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>
    

    Ou, 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 naviguant jusqu'à votre profil dans le coin supérieur droit et en sélectionnant la location (your_tenancy_name) pour déterminer l'espace de noms et le compartiment de l'API S3.

    Écran de location OCI

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

Tâche 3 : Créer une clé secrète de 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é pour l'utiliser plus tard pour définir des variables d'environnement.

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

Ou

Une clé secrète peut également être générée à l'aide de la console OCI et en accédant à votre profil dans le coin supérieur droit, puis en sélectionnant votre nom d'utilisateur affiché. Cliquez sur le lien Clés secrètes de client, Générer une clé secrète et définissez un nom d'affichage. Cliquez sur copier et stockez la clé secrète dans un emplacement sécurisé, puis cliquez sur Fermer.

Accès aux clés secrètes du 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 du client, pointez 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 sur le seau pour la configuration

  1. Allez à la console OCI, naviguez jusqu'à Stockage et cliquez sur Seaux.

  2. Cliquez sur le nom du seau dans vos préalables et notez les informations suivantes.

    • Nom du seau.
    • 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, US East(Ashburn) serait représenté par us-ashburn-1.

    Collecte des informations sur les seaux et les objets 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>"

Par 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 : Créer 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 passer au répertoire contenant les exemples C++, créer un répertoire de compilation, passer à ce répertoire, puis exécuter build et make.

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

Note : Il s'agit d'exemples de scripts utilisant la trousse 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 réviser, les mettre à jour et les personnaliser en fonction de votre cas d'utilisation dans votre propre référentiel logiciel. Oracle ne certifie pas les trousses SDK de tierce partie ni ne les prend en charge.

Tâche 7 : Exécuter les exemples

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

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

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

    Par 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 
    

Note : Si vous rencontrez des problèmes, retournez à la tâche 5 et assurez-vous que vos variables d'environnement sont définies correctement.

Remerciements

Autres ressources d'apprentissage

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

Pour obtenir la documentation sur le produit, visitez Oracle Help Center.