这是一个用于读写通用负载到Amazon S3的API服务,支持通过UUID标识对数据进行PUT、GET和DELETE操作。该服务可配置从Kafka读取负载并存储到S3,适用于需要将通用格式数据持久化到S3或从Kafka消费数据并存储的场景。
| 环境变量 | 描述 | 默认值 | 是否必填 |
|---|---|---|---|
PORT | 服务监听端口 | 无 | 是 |
BUCKET_NAME | S3存储桶名称 | 无 | 是 |
AWS_REGION | AWS区域(如eu-west-1) | 无 | 是 |
AWS_ACCESS_KEY_ID | AWS访问密钥ID(或通过~/.aws/credentials文件配置) | 无 | 是 |
AWS_SECRET_ACCESS_KEY | AWS密钥(或通过~/.aws/credentials文件配置) | 无 | 是 |
BUCKET_PREFIX | S3对象前缀路径(添加到所有上传项的文件夹路径) | 空 | 否 |
WORKERS | 并发下载数量(下载所有项时的并发数) | 10 | 否 |
SRC_CONCURRENT_PROCESSING | 是否启用Kafka消息并发处理 | false | 否 |
RESOURCE_PATH | 资源路径(如"concepts",用于自定义API路径) | 空 | 否 |
bashdocker run -d \ -p 8080:8080 \ -e PORT=8080 \ -e BUCKET_NAME="my-s3-bucket" \ -e AWS_REGION="eu-west-1" \ -e AWS_ACCESS_KEY_ID="AKID***" \ -e AWS_SECRET_ACCESS_KEY="MY-SECRET-KEY" \ coco/generic-rw-s3
bashdocker run -d \ -p 8080:8080 \ -e PORT=8080 \ -e BUCKET_NAME="my-s3-bucket" \ -e AWS_REGION="eu-west-1" \ -e AWS_ACCESS_KEY_ID="AKID***" \ -e AWS_SECRET_ACCESS_KEY="MY-SECRET-KEY" \ -e BUCKET_PREFIX="kafka-data" \ coco/generic-rw-s3 --source-addresses="kafka-broker:9092" --source-group="consumer-group-1" --source-topic="data-topic"
bash# 安装dep curl [***] | sh # 获取源码 go get github.com/Financial-Times/generic-rw-s3 cd $GOPATH/src/github.com/Financial-Times/generic-rw-s3 # 安装依赖 dep ensure -v -vendor-only # 编译 go install
bash# 设置必填环境变量 export PORT=8080 export BUCKET_NAME="my-s3-bucket" export AWS_REGION="eu-west-1" # 配置AWS凭证(或通过~/.aws/credentials文件) export AWS_ACCESS_KEY_ID="AKID***" export AWS_SECRET_ACCESS_KEY="MY-SECRET-KEY" # 可选配置 export BUCKET_PREFIX="data-prefix" export WORKERS=20 export SRC_CONCURRENT_PROCESSING=true # 启动服务 $GOPATH/bin/generic-rw-s3
bash$GOPATH/bin/generic-rw-s3 --port=8080 --bucketName="my-s3-bucket" --source-addresses="kafka-broker:9092" --source-group="consumer-group" --source-topic="data-topic"
通过UUID写入负载到S3,请求头需指定Content-Type(将作为S3对象的Content-Type存储)。
示例:
bashcurl -H "Content-Type: application/json" -X PUT -d '{"key":"value"}' http://localhost:8080/bcac6326-dd23-4b6a-9dfa-c2fbeb9737d9
S3对象路径格式:<bucket_prefix>/<uuid前8位>/<uuid中间4位>/<uuid中间4位>/<uuid中间4位>/<uuid后12位>(如prefix/123e4567/e89b/12d3/a456/426655440000)
读取指定UUID对应的S3对象,返回存储的负载数据。若不存在返回404。
示例:
bashcurl http://localhost:8080/bcac6326-dd23-4b6a-9dfa-c2fbeb9737d9
删除指定UUID对应的S3对象,成功返回204。
示例:
bashcurl -X DELETE http://localhost:8080/bcac6326-dd23-4b6a-9dfa-c2fbeb9737d9
流式返回存储桶中所有负载数据。
流式返回存储桶中所有UUID列表,每行一个JSON对象。
示例响应:
json{"ID":"dcfa65d6-3849-445e-ac6a-15bc5a17e954"} {"ID":"2136f8ad-e94e-45cb-b616-336f38533214"}
http://localhost:8080/__healthhttp://localhost:8080/__build-info 或 http://localhost:8080/build-infohttp://localhost:8080/__gtg服务会在S3对象元数据中存储负载的哈希值。当ONLY_UPDATES_ENABLED环境变量设为true时,会对比新负载与存储哈希:
X-Ignore-Hash: true绕过哈希检查,强制写入。需确保AWS凭证对目标S3存储桶有读写权限,推荐策略配置:
json{ "Version": "2012-10-17", "Id": "PolicyForS3RW", "Statement": [ { "Sid": "AllowFullAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<AWS账户ID>:user/<IAM用户名>" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::<BUCKET_NAME>", "arn:aws:s3:::<BUCKET_NAME>/*" ] } ] }
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429