Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
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
-
Evite problemas de autenticação e certificado SSL ao usar o AWS SDK para C++ com o OCI Object Storage.
-
Execute o código C++ de amostra para ListBuckets e ListObjectsV2 no serviço OCI Object Storage.
Pré-requisitos
-
Uma conta do OCI.
-
Permissão do usuário para ler buckets e objetos no OCI Object Storage. Para obter mais informações, consulte Permitir que os usuários façam download de objetos de buckets do Object Storage.
-
Acesso a um bucket existente com objetos existentes aninhados em um prefixo/diretório. O nome do bucket será necessário para o tutorial. Para obter mais informações, consulte o tutorial Colocar dados no armazenamento de objetos.
-
Familiarizado com o uso de uma interface de terminal ou shell em macOS, Linux, Berkeley Software Distribution (BSD) e no Windows PowerShell, prompt de comando ou bash.
-
Acesso a um sistema Linux.
-
Capacidade ou permissões para instalar software em um sistema Linux.
-
Instale a CLI do OCI (Interface de Linha de Comando) do Oracle Cloud Infrastructure e configure no seu sistema Linux. Para obter mais informações, consulte Instalando a CLI.
-
Instale o AWS SDK for C++ com as bibliotecas compartilhadas em
LD_LIBRARY_PATH
no seu sistema Linux. Para obter mais informações, consulte Criar o AWS SDK para C++ no Linux/macOS. -
Instale o Git no seu sistema Linux. Para obter mais informações, consulte Conceitos Básicos - Instalando o Git.
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
-
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.
-
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" } }
-
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.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.
-
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" }
-
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.
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.
Tarefa 4: Coletar Informações do Período para Configuração
-
Vá para a Console do OCI, navegue até Storage e clique em Buckets.
-
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.
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++
-
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
-
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
-
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
-
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.
Links Relacionados
Confirmações
-
Autors - Kenneth Heung (Arquiteto Principal de Nuvem), Tony Markel (Arquiteto de Nuvem Principal)
-
Colaboradora - Melinda Centeno (gerente sênior de produtos)
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.
Use OCI Object Storage Amazon S3 Compatibility API with AWS SDK for C++
G28126-01
Copyright ©2025, Oracle and/or its affiliates.