Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction à Oracle Cloud Infrastructure Free Tier.
- Il utilise des exemples de valeurs pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. Lorsque vous terminez votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
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
-
Evitez les problèmes de certificat SSL et d'authentification lors de l'utilisation du kit SDK AWS pour C++ avec OCI Object Storage.
-
Exécutez l'exemple de code C++ pour ListBuckets et ListObjectsV2 dans le service OCI Object Storage.
Prérequis
-
Un compte OCI.
-
Droits d'accès utilisateur permettant de lire des buckets et des objets dans OCI Object Storage. Pour plus d'informations, reportez-vous à Autoriser les utilisateurs à télécharger des objets à partir de buckets Object Storage.
-
Accès à un bucket existant avec des objets existants imbriqués dans un préfixe/répertoire. Le nom du bucket sera nécessaire pour le tutoriel. Pour plus d'informations, reportez-vous au tutoriel Mise des données dans le stockage d'objets.
-
Connaissance de l'utilisation d'une interface de terminal ou de shell sur macOS, Linux, Berkeley Software Distribution (BSD) et sous Windows PowerShell, invite de commande ou bash.
-
Accès à un système Linux.
-
Possibilité ou autorisations d'installer un logiciel sur un système Linux.
-
Installez l'interface de ligne de commande Oracle Cloud Infrastructure (interface de ligne de commande OCI) et configurez-la sur votre système Linux. Pour plus d'informations, reportez-vous à la section Installing the CLI.
-
Installez AWS SDK for C++ avec les bibliothèques partagées dans
LD_LIBRARY_PATH
sur votre système Linux. Pour plus d'informations, reportez-vous à Création du kit SDK AWS pour C++ sur Linux/macOS. -
Installez Git sur votre système Linux. Pour plus d'informations, reportez-vous à Introduction - Installation de Git.
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
-
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.
-
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" } }
-
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.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.
-
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" }
-
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.
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.
Tâche 4 : Collecter les informations de regroupement pour la configuration
-
Accédez à la console OCI, accédez à Stockage et cliquez sur Buckets.
-
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.
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++
-
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
-
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
-
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
-
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.
Liens connexes
Remerciements
-
Auteurs - Kenneth Heung (architecte cloud principal), Tony Markel (architecte cloud principal)
-
Contributeur - Melinda Centeno (chef de produit principal senior)
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.
Use OCI Object Storage Amazon S3 Compatibility API with AWS SDK for C++
G28122-01
Copyright ©2025, Oracle and/or its affiliates.