Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion docs/reference/registries/s3.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,14 @@ online_store: null
offline_store:
type: dask
```
{% endcode %}
{% endcode %}

## S3-compatible object stores

The `FEAST_S3_ENDPOINT_URL` environment variable overrides the endpoint the registry store connects to. Leave it unset to use Amazon S3, or set it to point the registry at an S3-compatible object store such as Backblaze B2, Cloudflare R2, or MinIO:

```bash
export FEAST_S3_ENDPOINT_URL=https://s3.example-region.example.com
```

`registry.path` keeps its `s3://` form. Credentials are resolved by boto3 as usual, so `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` hold the credentials for that store and `AWS_DEFAULT_REGION` its region.
7 changes: 5 additions & 2 deletions sdk/python/feast/infra/registry/s3.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@
from feast.infra.registry.registry_store import RegistryStore
from feast.protos.feast.core.Registry_pb2 import Registry as RegistryProto
from feast.repo_config import RegistryConfig
from feast.utils import _utc_now
from feast.utils import _utc_now, get_user_agent

try:
import boto3
from botocore.config import Config
except ImportError as e:
from feast.errors import FeastExtrasDependencyImportError

Expand All @@ -29,7 +30,9 @@ def __init__(self, registry_config: RegistryConfig, repo_path: Path):
self._boto_extra_args = registry_config.s3_additional_kwargs or {}

self.s3_client = boto3.resource(
"s3", endpoint_url=os.environ.get("FEAST_S3_ENDPOINT_URL")
"s3",
endpoint_url=os.environ.get("FEAST_S3_ENDPOINT_URL"),
config=Config(user_agent_extra=get_user_agent()),
)

def get_registry_proto(self):
Expand Down