AWS SDK for C++
The AWS SDK for C++
Getting started
- Create a service account.
- Assign to the service account the roles required for your project, e.g,
storage.editor
. For more information about roles, see Access management with Yandex Identity and Access Management. - Create a static access key.
Note
A service account is only allowed to view a list of buckets in the folder it was created in.
A service account can perform actions with objects in buckets that are created in folders different from the service account folder. To enable this, assign the service account roles for the appropriate folder or its bucket.
Installation
To install the AWS SDK for C++, use the instructions
Setup
-
Create a directory to store the authentication data in and navigate to it:
For macOS and Linux:
mkdir ~/.aws/
For Windows:
mkdir C:\Users\<username>\.aws\
-
In the
.aws
directory, create a file namedcredentials
with credentials for Object Storage and copy the following data into it:[default] aws_access_key_id = <static_key_ID> aws_secret_access_key = <secret_key>
-
Create a file named
config
with the default region settings and copy the following information to it:[default] region = ru-central1 endpoint_url = https://storage.yandexcloud.net
Note
Some apps designed to work with Amazon S3 do not allow you to specify the region; this is why Object Storage may also accept the
us-east-1
value.
To access Object Storage, use the https://storage.yandexcloud.net
endpoint.
Code snippets
See C++ code snippets
Below is an example from a simple program that illustrates the differences in Yandex Object Storage settings.
CmakeLists
cmake_minimum_required(VERSION 3.8)
project("s3-examples")
set(CMAKE_CXX_STANDARD 20)
if(NOT BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS ON)
endif()
find_package(AWSSDK REQUIRED COMPONENTS s3 sts)
add_executable(EXAMPLE EXAMPLE_FILE_S3.cpp)
target_link_libraries(EXAMPLE ${AWSSDK_LINK_LIBRARIES}
${AWSSDK_PLATFORM_DEPS})
File EXAMPLE_FILE_S3.cpp
#include <aws/core/Aws.h>
#include <aws/core/auth/AWSCredentialsProvider.h>
#include <aws/s3/S3Client.h>
#include <aws/s3/model/Bucket.h>
#include <aws/s3/model/CreateBucketConfiguration.h>
#include <aws/s3/model/CreateBucketRequest.h>
#include <aws/s3/model/DeleteBucketRequest.h>
#include <aws/s3/model/ListObjectsRequest.h>
#include <aws/s3/model/PutObjectRequest.h>
#include <sys/stat.h>
#include <fstream>
#include <iostream>
// Finds the bucket and brings its contents to the console
bool FindTheBucket(const Aws::S3::S3Client& s3Client, const Aws::String& bucketName)
{
Aws::S3::Model::ListBucketsOutcome outcome = s3Client.ListBuckets();
Aws::S3::Model::ListObjectsRequest request;
if (outcome.IsSuccess()) {
std::cout << "Looking for a bucket named '" << bucketName << "'..." << std::endl;
Aws::Vector<Aws::S3::Model::Bucket> bucket_list = outcome.GetResult().GetBuckets();
for (Aws::S3::Model::Bucket const& bucket : bucket_list) {
if (bucket.GetName() == bucketName) {
request.WithBucket(bucketName);
std::cout << "Found the bucket." << std::endl << std::endl;
auto outcome_obj = s3Client.ListObjects(request);
std::cout << "Objects in bucket '" << bucketName << "':" << std::endl;
Aws::Vector<Aws::S3::Model::Object> objects = outcome_obj.GetResult().GetContents();
for (Aws::S3::Model::Object& object : objects) {
std::cout << object.GetKey() << std::endl;
}
return true;
}
}
std::cout << "Could not find the bucket." << std::endl << std::endl;
return true;
} else {
std::cout << "ListBuckets error: " << outcome.GetError().GetMessage() << std::endl;
}
return false;
}
int main(int argc, char* argv[])
{
Aws::SDKOptions options;
Aws::InitAPI(options);
{
// Settings section for the AWS SDK with Object Storage
Aws::Client::ClientConfiguration config;
config.region = Aws::String("ru-central1");
config.endpointOverride = Aws::String("storage.yandexcloud.net");
Aws::String bucket_name = "bucket_name";
// Initializing a connection
Aws::S3::S3Client s3_client(config);
FindTheBucket(s3_client, bucket_name);
}
Aws::ShutdownAPI(options);
return 0;
}