Observação:

Use a API de Compatibilidade com Amazon S3 do OCI Object Storage com o AWS SDK para C++

Introdução

O Oracle Cloud Infrastructure (OCI) Object Storage permite que os clientes armazenem com segurança qualquer tipo de dados em seu formato nativo. Com redundância integrada, o OCI Object Storage é ideal para criar aplicativos modernos que exigem escala e flexibilidade, pois pode ser usado para consolidar várias fontes de dados para fins de análise, backup ou arquivamento.

O OCI Object Storage é fundamental para cargas de trabalho na nuvem, sua elasticidade, escalabilidade, confiabilidade e eficiência de custos o tornaram o armazenamento principal para dados não estruturados na nuvem. Como resultado de sua popularidade, há um vasto ecossistema de ferramentas para trabalhar com o OCI Object Storage.

O OCI Object Storage fornece uma API de compatibilidade com o Amazon S3. Os clientes podem continuar usando suas ferramentas existentes do Amazon S3 e fazer alterações mínimas em seus aplicativos para trabalhar com o OCI Object Storage. Os conjuntos de dados da API de Compatibilidade com Amazon S3 e do OCI Object Storage são congruentes. Se dados forem gravados no OCI Object Storage usando a API de compatibilidade com Amazon S3, eles poderão ser lidos depois usando a API nativa do OCI Object Storage e vice-versa. Os clientes que usam o AWS SDK para C++ podem achar o aspecto de autenticação desafiador ao usar a API de Compatibilidade com Amazon S3. Este tutorial tem como objetivo fornecer dois exemplos simples para começar a usar o AWS SDK para C++.

Observação: Esses são exemplos de scripts que usam o AWS SDK para C++, não são aplicativos Oracle oficiais e não são mantidos ou suportados pela Oracle. Como são exemplos, talvez você queira revisá-los, atualizá-los e personalizá-los para seu caso de uso em seu próprio repositório de software. A Oracle não certifica nem oferece suporte a SDKs de terceiros.

Objetivos

Pré-requisitos

Tarefa 1: Compreender URLs de Caminho e Estilo Hospedado Virtual

No momento da gravação deste tutorial, a API de Compatibilidade com Amazon S3 do OCI Object Storage suporta URLs no estilo de caminho. Isso significa que o bucket estará no caminho do URL.

Por exemplo:

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

OR

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

Em URLs de estilo hospedado virtual, o nome do bucket do OCI Object Storage é incluído no subdomínio (ou no início) do URL.

Por exemplo:

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

OR

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

Por padrão, o AWS SDK for C++ usa URLs de estilo hospedado virtual. Ao seguir os exemplos de código produzidos pela AWS e substituir valores da sua tenancy do OCI, um erro será exibido semelhante à saída a seguir. Para obter mais informações, consulte Criando, listando e excluindo buckets.

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

Como o código está usando um URL de estilo hospedado virtual, o código não fará referência ao bucket do OCI Object Storage nem a um certificado válido.

A definição S3Client precisará ser alterada para usar URLs no estilo de caminho. A configuração deve ser definida usando o comando a seguir.

Aws::Client::ClientConfiguration config; 

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

Tarefa 2: Determinar o Namespace da Tenancy e o Compartimento da API S3

  1. Faça login no seu sistema Linux.

    Observação: Todos os comandos serão executados no sistema Linux, no qual você tem os pré-requisitos necessários instalados e configurados.

  2. Execute o comando da CLI do 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. Se o OCID do compartimento S3 contiver a palavra tenancy, ele será o compartimento raiz. Obtenha o nome usando o comando a seguir.

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

    Ou, para o compartimento raiz da tenancy, execute o comando a seguir.

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

    Como alternativa, você pode usar a Console do OCI navegando até seu perfil no canto superior direito e selecionando a tenancy (your_tenancy_name) para determinar o namespace e o compartimento da API S3.

    Tela Tenancy do OCI

    O compartimento S3 será usado novamente na Tarefa 4.

Tarefa 3: Criar uma Chave Secreta do Cliente para Acessar a API Compatível com S3

Gere a chave secreta usando comandos da CLI do OCI.

  1. Execute o 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 o ID (AWS_ACCESS_KEY_ID) e a chave (AWS_SECRET_ACCESS_KEY) para um local seguro para ser usado posteriormente para definir variáveis de ambiente.

    Observação: O OCID do usuário pode ser encontrado no arquivo de configuração da CLI do OCI, geralmente armazenado em $HOME/.oci/config.

Ou

Uma chave secreta também pode ser gerada usando a Console do OCI e navegando até seu perfil no canto superior direito e selecionando seu nome de usuário exibido. Clique no link Chaves secretas do cliente, Gerar chave secreta e defina um nome para exibição. Clique em copiar, armazene a chave secreta em um local seguro e clique em Fechar.

Navegando para "Chaves secretas do cliente" do perfil

Depois de fechar a janela Gerar chave secreta, procure o nome para exibição na lista de Chaves secretas do cliente, passe o mouse sobre a Chave de acesso e copie a chave de acesso.

Copiando a chave de acesso

Tarefa 4: Coletar Informações do Período para Configuração

  1. Vá para a Console do OCI, navegue até Storage e clique em Buckets.

  2. Clique no nome do bucket nos pré-requisitos e anote as informações a seguir.

    • O Nome do bucket.
    • A Localização dos objetos, este será o prefixo.
    • O nome da Região. Obtenha o código da região aqui: Regiões e Domínios de Disponibilidade. Por exemplo, Leste dos EUA (Ashburn) seria representado por us-ashburn-1.

    Coletando informações de bucket e objeto para configuração

Tarefa 5: Definir Variáveis de Ambiente

Defina as variáveis de ambiente com base nas informações das tarefas anteriores usando o comando a seguir.

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 exemplo:

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" 

Tarefa 6: Criar os Exemplos de C++

  1. Execute o comando a seguir para clonar o repositório de exemplo no git.

    $ git clone https://github.com/tonymarkel/OCI_AWS_CPP_SDK_S3_Examples.git
    
  2. Execute os comandos a seguir para alterar para o diretório que contém os exemplos de C++, crie um diretório de build, altere para esse diretório e execute build e make.

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

Observação: Esses são exemplos de scripts que usam o AWS SDK para C++, não são aplicativos Oracle oficiais e não são mantidos ou suportados pela Oracle. Como são exemplos, talvez você queira revisá-los, atualizá-los e personalizá-los para seu caso de uso em seu próprio repositório de software. A Oracle não certifica nem oferece suporte a SDKs de terceiros.

Tarefa 7: Executar os Exemplos

  1. Execute o comando a seguir para obter a lista de buckets.

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

    Por exemplo:

    $ ./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. Execute o comando a seguir para obter a lista de objetos.

    Por exemplo:

    $ ./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 
    

Observação: Se você tiver problemas, volte à Tarefa 5 e certifique-se de que suas variáveis de ambiente estejam definidas corretamente.

Confirmações

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.