AWS s3开发环境搭建
工程中需要用到s3对象存储接口向ceph存储中存储视频对象,对s3开发环境搭建及测试过程做下记录。
centos7安装s3cmd
yum install s3cmd
安装s3cmd的作用是测试使用命令行测试s3向ceph存储对象的可行性,需要ceph集群开启radosgw,查看该服务端口的命令netstat -ntlp|grep radosgw,默认端口是7480,访问测试:
[root@bogon test]# curl http://192.168.231.211:7480
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
radosgw用户管理
在ceph服务端创建用户
sudo radosgw-admin user create --subuser="cephtester:subtester" --uid="cephtester" --display-name="cephtester" --key-type=swift --secret="654321" --access=full
uid 为主用户, subuser为子用户信息, secret指定密钥, 不指定则随机生成, access拥有权限设定。
radosgw-admin user create --secret="123" --uid="s3" --display-name="s3 user"
查看用户信息:
radosgw-admin user info --uid=s3
s3cmd配置用户信息
配置s3cmd客户端域名解析
[root@bogon StorageMedia]# vi /etc/hosts 添加
192.168.231.211 s3.rgw.com
在客户端s3cmd --configure
关键点:access_key = TQIGT5OE2TTQO55YXQWZ(参照rgw创建的用户信息的access_key)
secret_key = 123(参照rgw创建的用户信息的secret_key)
host_base = s3.rgw.com:7480 (客户顿添加的域名解析+对象网关监听端口)
host_bucket = s3.rgw.com:7480/%(bucket)
验证连接,显示如下信息标识连接成功:
Test access with supplied credentials? [Y/n] y
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine 🙂
S3配置文件路径 /root/.s3cfg
连接测试:[root@bogon test]# s3cmd ls
2022-09-05 08:17 s3://bucket-test
2022-09-01 06:17 s3://tm-storage
安装s3开发环境
wget https://github.com/aws/aws-sdk-cpp/archive/1.0.1.tar.gz
tar -zxvf 1.0.1.tar.gz
cd aws-sdk-cpp-1.0.1/
mkdir build && mkdir install && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_ONLY="s3" ../
make && make install DESTDIR=../install
测试代码:
#include <iostream>
#include <aws/s3/S3Client.h>
#include <aws/s3/model/CreateBucketRequest.h>
#include <aws/core/Aws.h>
#include <aws/core/auth/AWSCredentialsProvider.h>
using namespace Aws::S3;
using namespace Aws::S3::Model;
using namespace std;
int main(int argc, char* argv[]) {
// 初始化API
Aws::SDKOptions options;
options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Trace;
Aws::InitAPI(options);
Aws::Client::ClientConfiguration cfg;
cfg.endpointOverride = "s3.rgw.com:7480"; // S3服务器地址和端口
cfg.scheme = Aws::Http::Scheme::HTTP;
cfg.verifySSL = false;
Aws::Auth::AWSCredentials cred("TQIGT5OE2TTQO55YXQWZ", "123"); // ak,sk
S3Client client(cred, cfg, false);
auto response = client.ListBuckets();
if (response.IsSuccess()) {
auto buckets = response.GetResult().GetBuckets();
for (auto iter = buckets.begin(); iter != buckets.end(); ++iter) {
cout << iter->GetName() << "t" << iter->GetCreationDate().ToLocalTimeString(Aws::Utils::DateFormat::ISO_8601) << endl;
}
} else {
cout << "Error while ListBuckets " << response.GetError().GetExceptionName()
<< " " << response.GetError().GetMessage() << endl;
}
Aws::ShutdownAPI(options);
return 0;
}
export LD_LIBRARY_PATH=/root/install-aws-1.0.1/usr/local/lib
编译命令:
g++ -std=c++11 -o s3_list_ceph_bucket -I/root/install-aws-1.0.1/usr/local/include -L/root/install-aws-1.0.1/usr/local/lib -laws-cpp-sdk-core -laws-cpp-sdk-s3 s3_list_ceph_bucket.cpp
运行:[root@bogon test]# ./s3_list_ceph_bucket
bucket-test 2022-09-05T16:17:31Z
tm-storage 2022-09-01T14:17:09Z