Note:

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

Requisitos

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

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

  2. 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"
      }
    }
    
  3. 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.

    Pantalla de arrendamiento de OCI

    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.

  1. 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"
    }
    
  2. 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.

Navegación a "Claves secretas de cliente" desde el perfil

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.

Copia de la clave de acceso

Tarea 4: Recopilación de información de bloque para la configuración

  1. Vaya a la consola de OCI, vaya a Storage y haga clic en Buckets.

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

    Recopilación de información de objetos y cubos para la configuración

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++

  1. 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
    
  2. 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

  1. 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 
    
  2. 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.

Agradecimientos

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.