diff --git a/docs/assets/cloudflare-r2-bucket-info.png b/docs/assets/cloudflare-r2-bucket-info.png new file mode 100644 index 00000000..a5b9678d Binary files /dev/null and b/docs/assets/cloudflare-r2-bucket-info.png differ diff --git a/docs/assets/cloudflare-r2-credentials.jpg b/docs/assets/cloudflare-r2-credentials.jpg new file mode 100644 index 00000000..e6ef9f57 Binary files /dev/null and b/docs/assets/cloudflare-r2-credentials.jpg differ diff --git a/docs/examples/r2.md b/docs/examples/r2.md new file mode 100644 index 00000000..ecbb8150 --- /dev/null +++ b/docs/examples/r2.md @@ -0,0 +1,48 @@ +# Cloudflare R2 + +[Cloudflare R2](https://www.cloudflare.com/developer-platform/products/r2/) is Cloudflare's object storage solution, designed to be compatible with the S3 API. Some developers may choose to use Cloudflare R2 because it has no egress fees. + +It's easy to read and write data to and from Cloudflare R2 with obstore's [`S3Store`][obstore.store.S3Store] with three steps: + +1. [Create an API token](https://dash.cloudflare.com/?to=/:account/r2/api-tokens) with read or read/write access to one or more buckets. + + Copy the `Access Key ID` and `Secret Access Key` to use in your code. + + ![](../assets/cloudflare-r2-credentials.jpg) + +2. On the general settings of a bucket, take note of the `S3 API` URL. In my case it's `https://f0b62eebfbdde1133378bfe3958325f6.r2.cloudflarestorage.com/kylebarron-public`. + + ![](../assets/cloudflare-r2-bucket-info.png) + +3. Pass this information to [`S3Store.from_url`][obstore.store.S3Store.from_url]: + + ```py + from obstore.store import S3Store + + access_key_id = "..." + secret_access_key = "..." + store = S3Store.from_url( + "https://f0b62eebfbdde1133378bfe3958325f6.r2.cloudflarestorage.com/ kylebarron-public", + access_key_id=access_key_id, + secret_access_key=secret_access_key, + ) + store.list_with_delimiter() + ``` + + Or you can construct a store manually with the `endpoint` and `bucket` parameters: + + ```py + from obstore.store import S3Store + + access_key_id = "..." + secret_access_key = "..." + bucket = "kylebarron-public" + endpoint = "https://f0b62eebfbdde1133378bfe3958325f6.r2.cloudflarestorage. com" + store = S3Store( + bucket, + access_key_id=access_key_id, + secret_access_key=secret_access_key, + endpoint=endpoint, + ) + store.list_with_delimiter() + ``` diff --git a/mkdocs.yml b/mkdocs.yml index 6cf1d5be..b46294f8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -40,6 +40,7 @@ nav: - examples/fastapi.md - examples/minio.md - examples/pyarrow.md + - examples/r2.md - examples/stream-zip.md - examples/tqdm.md - examples/zarr.md