FrostFS S3 Protocol Gateway
 
 
 
Go to file
Denis Kirillov 43e336e155 [#118] go.mod: Update min go version to 1.19
Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
2023-05-23 17:32:05 +03:00
.docker Rename package name 2023-03-07 17:38:08 +03:00
.github [#66] Add Issue Template 2023-03-23 12:25:16 +03:00
api [#104] app: Reload copies numbers on SIGHUP 2023-05-23 13:19:58 +03:00
authmate [#81] Use impersonate bearer token 2023-05-03 17:22:52 +03:00
cmd [#104] app: Reload copies numbers on SIGHUP 2023-05-23 13:19:58 +03:00
config [#70] Add arrays of copies numbers for location constraints 2023-05-03 13:48:26 +03:00
creds [#68] Fix pre-commit issues 2023-03-24 16:22:06 +03:00
debian [#68] Fix pre-commit issues 2023-03-24 16:22:06 +03:00
docs [#81] Use impersonate bearer token 2023-05-03 17:22:52 +03:00
internal [#114] tree: Fix retry tests 2023-05-23 11:35:44 +03:00
metrics [#80] metrics: Use map for constant labels 2023-04-20 11:14:52 +03:00
pkg/service/tree [#74] service/tree: Add logger 2023-04-26 16:39:57 +03:00
.dockerignore
.gitignore [#68] Fix pre-commit issues 2023-03-24 16:22:06 +03:00
.gitlint [#65] Enable pre-commit 2023-03-24 07:28:04 +00:00
.golangci.yml
.pre-commit-config.yaml [#65] Enable pre-commit 2023-03-24 07:28:04 +00:00
CHANGELOG.md [#118] go.mod: Update min go version to 1.19 2023-05-23 17:32:05 +03:00
CONTRIBUTING.md
CREDITS.md [#68] Fix pre-commit issues 2023-03-24 16:22:06 +03:00
LICENSE
Makefile Makefile: Add syncTree folder clean up to 'make clean' 2023-04-21 17:09:53 +03:00
README.md [#68] Fix pre-commit issues 2023-03-24 16:22:06 +03:00
VERSION
go.mod [#118] go.mod: Update min go version to 1.19 2023-05-23 17:32:05 +03:00
go.sum [#94] Update prometheus to v1.15.0 2023-05-18 17:36:32 +03:00
help.mk
syncTree.sh syncTree: Update file filter to 'frostfs' 2023-04-21 17:08:37 +03:00
updateTestsResult.sh [#68] Fix pre-commit issues 2023-03-24 16:22:06 +03:00

README.md

FrostFS logo

FrostFS is a decentralized distributed object storage integrated with the NEO Blockchain.


Report

FrostFS S3 Gateway

FrostFS S3 gateway provides API compatible with Amazon S3 cloud storage service.

Installation

go get -u git.frostfs.info/TrueCloudLab/frostfs-s3-gw

Or you can call make to build it from the cloned repository (the binary will end up in bin/frostfs-s3-gw with authmate helper in bin/frostfs-s3-authmate). To build binaries in clean docker environment, call make docker/all.

Other notable make targets:

dep          Check and ensure dependencies
image        Build clean docker image
dirty-image  Build dirty docker image with host-built binaries
format       Run all code formatters
lint         Run linters
version      Show current version

Or you can also use a Docker image provided for released (and occasionally unreleased) versions of gateway (:latest points to the latest stable release).

Execution

Minimalistic S3 gateway setup needs:

  • FrostFS node(s) address (S3 gateway itself is not a FrostFS node) Passed via -p parameter or via S3_GW_PEERS_<N>_ADDRESS and S3_GW_PEERS_<N>_WEIGHT environment variables (gateway supports multiple FrostFS nodes with weighted load balancing).
  • a wallet used to fetch key and communicate with FrostFS nodes Passed via --wallet parameter or S3_GW_WALLET_PATH environment variable.

These two commands are functionally equivalent, they run the gate with one backend node, some keys and otherwise default settings:

$ frostfs-s3-gw -p 192.168.130.72:8080 --wallet wallet.json

$ S3_GW_PEERS_0_ADDRESS=192.168.130.72:8080 \
  S3_GW_WALLET=wallet.json \
  frostfs-s3-gw

It's also possible to specify uri scheme (grpc or grpcs) when using -p or environment variables:

$ frostfs-s3-gw -p grpc://192.168.130.72:8080 --wallet wallet.json

$ S3_GW_PEERS_0_ADDRESS=grpcs://192.168.130.72:8080 \
  S3_GW_WALLET=wallet.json \
  frostfs-s3-gw

Domains

By default, s3-gw enable only path-style access. To be able to use both: virtual-hosted-style and path-style access you must configure listen_domains:

$ frostfs-s3-gw -p 192.168.130.72:8080 --wallet wallet.json --listen_domains your.first.domain --listen_domains your.second.domain

So now you can use (e.g. HeadBucket. Make sure DNS is properly configured):

$ curl --head http://bucket-name.your.first.domain:8080
HTTP/1.1 200 OK
...

or

$ curl --head http://your.second.domain:8080/bucket-name
HTTP/1.1 200 OK
...

Also, you can configure domains using .env variables or yaml file.

Documentation

Credits

Please see CREDITS for details.