Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse para obtener una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por otros específicos de su entorno en la nube.
Uso de la API de compatibilidad de OCI Object Storage Amazon S3 con el SDK de AWS para C++
Introducción
Oracle Cloud Infrastructure (OCI) Object Storage permite a los clientes almacenar de forma segura cualquier tipo de datos en su formato nativo. Con redundancia incorporada, OCI Object Storage es ideal para crear aplicaciones modernas que requieren escalabilidad y flexibilidad, ya que se puede utilizar para consolidar varios orígenes de datos con fines de análisis, copia de seguridad o archivo.
OCI Object Storage es fundamental para las cargas de trabajo en la nube, su elasticidad, escalabilidad, fiabilidad y rentabilidad lo han convertido en el almacenamiento principal para datos no estructurados en la nube. Como resultado de su popularidad, hay un vasto ecosistema de herramientas para trabajar con OCI Object Storage.
OCI Object Storage proporciona una API de compatibilidad de Amazon S3, los clientes pueden seguir utilizando sus herramientas de Amazon S3 existentes y realizar cambios mínimos en sus aplicaciones para trabajar con OCI Object Storage. Los conjuntos de datos de la API de compatibilidad de Amazon S3 y de OCI Object Storage son congruentes. Si se escriben datos en OCI Object Storage con la API de compatibilidad de Amazon S3, se pueden volver a leer con la API nativa de OCI Object Storage y, a la inversa. Los clientes que usan el SDK de AWS para C++ pueden encontrar difícil el aspecto de autenticación al usar la API de compatibilidad de Amazon S3, este tutorial tiene como objetivo proporcionar dos ejemplos simples para comenzar a usar el SDK de AWS para C++.
Nota: Estos son scripts de ejemplo que utilizan el SDK de AWS para C++, no son aplicaciones oficiales de Oracle y no son mantenidos ni soportados por Oracle. Como son ejemplos, puede que desee revisarlos, actualizarlos y personalizarlos para su caso de uso en su propio repositorio de software. Oracle no certifica ni soporta los SDK de terceros.
Objetivos
-
Evite los problemas de autenticación y certificado SSL al utilizar el SDK de AWS para C++ con OCI Object Storage.
-
Ejecute el código C++ de ejemplo para ListBuckets y ListObjectsV2 en el servicio OCI Object Storage.
Requisitos
-
Una cuenta de OCI.
-
Permiso de usuario para leer cubos y objetos en OCI Object Storage. Para obtener más información, consulte Permitir que los usuarios descarguen objetos de los cubos del Almacenamiento de objetos.
-
Acceso a un cubo existente con objetos existentes anidados en un prefijo/directorio. Se necesitará el nombre del cubo para el tutorial. Para obtener más información, consulte el tutorial sobre colocación de datos en Object Storage.
-
Familiarizado con el uso de una interfaz de terminal o shell en macOS, Linux, Berkeley Software Distribution (BSD) y en Windows PowerShell, símbolo del sistema o bash.
-
Acceso a un sistema Linux.
-
Capacidad o permisos para instalar software en un sistema Linux.
-
Instale la interfaz de línea de comandos (CLI de OCI) de Oracle Cloud Infrastructure y configúrela en el sistema Linux. Para obtener más información, consulte Installing the CLI.
-
Instale AWS SDK para C++ con las bibliotecas compartidas en
LD_LIBRARY_PATH
en su sistema Linux. Para obtener más información, consulte Creación del SDK de AWS para C++ en Linux/macOS. -
Instale Git en su sistema Linux. Para obtener más información, consulte Getting Started - Installing Git.
Tarea 1: Descripción de las URL de Ruta de Acceso y de Estilo Alojado Virtual
En el momento de escribir este tutorial, la API de compatibilidad de OCI Object Storage Amazon S3 admite URL de tipo ruta. Esto significa que el cubo estará en la ruta de acceso de URL.
Por ejemplo:
https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyBucketName
O BIEN
https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyBucketName/MyObjectName
En las URL de estilo alojadas virtualmente, el nombre del cubo de OCI Object Storage se incluye en el subdominio (o al principio) de la URL.
Por ejemplo:
https://MyBucketName.MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com
O BIEN
https://MyBucketName.MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyObjectName
Por defecto, el SDK de AWS para C++ utiliza URL de estilo alojado virtualmente. Al seguir los ejemplos de código producidos por AWS y sustituir valores de su arrendamiento de OCI, se mostrará un error similar a la siguiente salida. Para obtener más información, consulte Creación, enumeración y supresión de cubos.
curlCode: 60, SSL peer certificate or SSH remote key was not OK
Debido a que el código utiliza una URL de estilo alojada virtualmente, el código no hará referencia al cubo de OCI Object Storage ni a un certificado válido.
Se deberá cambiar la configuración de S3Client para utilizar URL de estilo de ruta. La configuración se debe definir con el siguiente comando.
Aws::Client::ClientConfiguration config;
S3Client s3Client(config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false);
Tarea 2: Determinación del espacio de nombres de arrendamiento y el compartimento de API S3
-
Inicie sesión en el sistema Linux.
Nota: Todos los comandos se ejecutarán desde el sistema Linux en el que tenga instalados y configurados los requisitos necesarios.
-
Ejecute el comando de la CLI de 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 el OCID del compartimento S3 contiene la palabra
tenancy
, es el compartimento raíz. Obtenga el nombre con el siguiente comando.$ oci iam compartment get --compartment-id <compartment_ocid>
O bien, para el compartimento raíz del arrendamiento, ejecute el siguiente comando.
$ oci iam tenancy get --tenancy-id <tenancy_ocid>
También puede utilizar la consola de OCI navegando a su perfil en la esquina superior derecha y seleccionando el arrendamiento (
your_tenancy_name
) para determinar el espacio de nombres y el compartimento de API S3.El compartimento S3 se volverá a utilizar en la tarea 4.
Tarea 3: Creación de una clave secreta de cliente para acceder a la API compatible con S3
Generar clave secreta mediante comandos de la CLI de OCI.
-
Ejecute el comando
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" }
-
Copie el ID (
AWS_ACCESS_KEY_ID
) y la clave (AWS_SECRET_ACCESS_KEY
) en algún lugar seguro que se utilizará más tarde para definir variables de entorno.Nota: El OCID de usuario se puede encontrar en el archivo de configuración de la CLI de OCI, normalmente almacenado en
$HOME/.oci/config
.
O bien:
También se puede generar una clave secreta mediante la consola de OCI y navegar a su perfil en la esquina superior derecha y, a continuación, seleccionar el nombre de usuario mostrado. Haga clic en el enlace Claves secretas de cliente, Generar clave secreta y defina un nombre mostrado. Haga clic en copiar, almacene la clave secreta en una ubicación segura y haga clic en Cerrar.
Después de cerrar la ventana Generar clave secreta, busque el nombre mostrado en la lista de claves secretas de cliente, pase el mouse sobre la clave de acceso y copie la clave de acceso.
Tarea 4: Recopilación de información de bloque para la configuración
-
Vaya a la consola de OCI, vaya a Storage y haga clic en Buckets.
-
Haga clic en el nombre del cubo de sus requisitos y anote la siguiente información.
- Nombre del cubo.
- Ubicación de los objetos; este será el prefijo.
- Nombre de la región. Obtenga el código de región de aquí: Regiones y dominios de disponibilidad. Por ejemplo, este de EE. UU. (Ashburn) estaría representado por us-ashburn-1.
Tarea 5: Definición de variables de entorno
Defina las variables de entorno en función de la información de las tareas anteriores mediante el siguiente comando.
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>"
Por ejemplo:
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"
Tarea 6: Creación de ejemplos de C++
-
Ejecute el siguiente comando para clonar el repositorio de ejemplo en git.
$ git clone https://github.com/tonymarkel/OCI_AWS_CPP_SDK_S3_Examples.git
-
Ejecute los siguientes comandos para cambiar al directorio que contiene los ejemplos de C++, crear un directorio de compilación, cambiar a ese directorio y, a continuación, ejecutar compilación y crear.
$ OCI_AWS_CPP_SDK_S3_Examples $ mkdir build $ cd build $ cmake .. $ make
Nota: Estos son scripts de ejemplo que utilizan el SDK de AWS para C++, no son aplicaciones oficiales de Oracle y no son mantenidos ni soportados por Oracle. Como son ejemplos, puede que desee revisarlos, actualizarlos y personalizarlos para su caso de uso en su propio repositorio de software. Oracle no certifica ni soporta los SDK de terceros.
Tarea 7: Ejecución de los ejemplos
-
Ejecute el siguiente comando para obtener la lista de cubos.
$ ./listBuckets $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY
Por ejemplo:
$ ./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
-
Ejecute el siguiente comando para obtener la lista de objetos.
Por ejemplo:
$ ./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
Nota: Si tiene problemas, vuelva a la tarea 5 y asegúrese de que las variables de entorno están definidas correctamente.
Enlaces relacionados
Agradecimientos
-
Autores: Kenneth Heung (arquitecto principal maestro de nube), Tony Markel (arquitecto principal de nube)
-
Colaboradora - Melinda Centeno (directora principal sénior de productos)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Use OCI Object Storage Amazon S3 Compatibility API with AWS SDK for C++
G28120-01
Copyright ©2025, Oracle and/or its affiliates.