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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>