Trabalhando com S3 e armazenamentos em nuvem em C++: biblioteca AWS SDK para C++

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com S3 e armazenamentos em nuvem em C++ com AWS SDK para C++



No desenvolvimento moderno de aplicações, a integração com armazenamentos em nuvem é cada vez mais necessária. O Amazon S3 (Simple Storage Service) é o padrão de facto para armazenamento de objetos na nuvem. Para a linguagem C++, a solução mais poderosa e suportada é a biblioteca oficial AWS SDK para C++ (aws-sdk-cpp). Ela fornece um conjunto completo de ferramentas para trabalhar não apenas com S3, mas também com MinIO, DigitalOcean Spaces, Yandex Object Storage e qualquer outro armazenamento compatível com S3.



Características e vantagens

  • API completa — a biblioteca cobre todas as operações do S3: criação/exclusão de buckets, upload/download de objetos, gerenciamento de versões, upload multithread de arquivos grandes.
  • Multiplataforma — funciona em Linux, macOS, Windows, bem como em plataformas móveis (iOS, Android).
  • Assincronicidade — suporte nativo a async/await via futures, permitindo escrever código não bloqueante eficiente.
  • Compatibilidade com alternativas ao S3 — basta alterar o endpoint e as credenciais para mudar do AWS S3 para MinIO ou Yandex Object Storage.
  • Suporte a streams — upload/download de dados diretamente via std::iostream sem armazenar todo o arquivo na memória.


Instalação e configuração

A biblioteca é distribuída via vcpkg, Conan ou compilada a partir do código-fonte. A forma recomendada é através do vcpkg:

# Instalação do vcpkg (se ainda não estiver instalado)git clone https://github.com/Microsoft/vcpkg.gitcd vcpkg./bootstrap-vcpkg.sh  # ou bootstrap-vcpkg.bat para Windows

# Instalação do SDK para S3./vcpkg install aws-sdk-cpp[s3]


No CMakeLists.txt, basta adicionar:

find_package(AWSSDK REQUIRED COMPONENTS s3)target_link_libraries(seu_alvo PRIVATE ${AWSSDK_LINK_LIBRARIES})


Exemplo básico: upload de objeto para S3

Antes de começar, é necessário configurar as credenciais. A forma mais segura é usar o arquivo ~/.aws/credentials ou as variáveis de ambiente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY.

#include <aws/core/Aws.h>#include <aws/s3/S3Client.h>#include <aws/s3/model/PutObjectRequest.h>#include <fstream>

int main() { Aws::SDKOptions options; Aws::InitAPI(options); { Aws::S3::S3Client s3_client;

const Aws::String bucket_name = "my-bucket"; const Aws::String object_key = "example.txt";

// Preparação da requisição Aws::S3::Model::PutObjectRequest request; request.SetBucket(bucket_name); request.SetKey(object_key);

// Leitura do arquivo auto input_data = Aws::MakeShared<Aws::FStream>("tag", "local_file.txt", std::ios::in | std::ios::binary); request.SetBody(input_data);

// Execução da requisição auto outcome = s3_client.PutObject(request); if (outcome.IsSuccess()) { std::cout << "Arquivo enviado com sucesso!" << std::endl; } else { std::cerr << "Erro: " << outcome.GetError().GetMessage() << std::endl; return 1; } } Aws::ShutdownAPI(options); return 0;}


Trabalhando com MinIO (armazenamento S3 local)

Para desenvolvimento e testes, é conveniente usar o MinIO. Para que o SDK funcione com o MinIO, é necessário alterar o endpoint e desabilitar a verificação SSL (se HTTPS não estiver configurado):

#include <aws/core/Aws.h>#include <aws/s3/S3Client.h>

int main() { Aws::SDKOptions options; Aws::InitAPI(options); { // Configuração do cliente para MinIO Aws::Client::ClientConfigura

Recommendations