{"id":26059728,"url":"https://github.com/orange-cloudfoundry/s3-volume-release","last_synced_at":"2025-07-23T00:02:35.261Z","repository":{"id":78301612,"uuid":"199183724","full_name":"orange-cloudfoundry/s3-volume-release","owner":"orange-cloudfoundry","description":"A boshrelease to deploy s3-volume-service on cloud foundry","archived":false,"fork":false,"pushed_at":"2019-07-27T17:25:54.000Z","size":56,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-06-25T07:03:47.424Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/orange-cloudfoundry.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-07-27T15:41:53.000Z","updated_at":"2019-10-05T14:56:58.000Z","dependencies_parsed_at":"2023-07-27T04:17:14.967Z","dependency_job_id":null,"html_url":"https://github.com/orange-cloudfoundry/s3-volume-release","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/orange-cloudfoundry/s3-volume-release","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orange-cloudfoundry%2Fs3-volume-release","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orange-cloudfoundry%2Fs3-volume-release/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orange-cloudfoundry%2Fs3-volume-release/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orange-cloudfoundry%2Fs3-volume-release/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/orange-cloudfoundry","download_url":"https://codeload.github.com/orange-cloudfoundry/s3-volume-release/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orange-cloudfoundry%2Fs3-volume-release/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266592119,"owners_count":23953105,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-08T13:28:12.453Z","updated_at":"2025-07-23T00:02:35.231Z","avatar_url":"https://github.com/orange-cloudfoundry.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# s3-volume-release\n\nA bosh release to create and mount a s3 bucket based filesystem on cloud foundry applications.\n\n## Installation\n\nAdd to your cloud foundry deployment the ops file [add-s3-volume-service.yml](/operations/cf/add-s3-volume-service.yml)\n\n## Usage\n\nYou will need a service broker which give [volume_mount](https://github.com/openservicebrokerapi/servicebroker/blob/v2.15/spec.md#volume-mount-object) \nparameter.\n\nIt must be in this form:\n\n```json\n{\n  \"volume_mounts\": [{\n  \"driver\": \"s3driver\",\n  \"container_dir\": \"/home/vcap/datas3\",\n  \"mode\": \"rw\",\n  \"device_type\": \"shared\",\n  \"device\": {\n    \"volume_id\": \"bc2c1eab-05b9-482d-b0cf-750ee07de311\",\n    \"mount_config\": {\n      \"endpoint\": \"https://my-s3-server.com\",\n      \"access_key_id\": \"KEYID\",\n      \"secret_access_key\": \"ACCESSKEY\",\n      \"bucket\": \"my-bucket\",\n      \"region\": \"no-region\",\n      \"mount_options\": {}\n    }\n  }\n  }]\n}\n```\n\nYou can pass more config in `mount_config`:\n\n- `endpoint` (*Optional*, string, Default: aws s3): Your s3 endpoint\n- `access_key_id` (**Required**, string): S3 access key id\n- `secret_access_key` (**Required**, string): S3 access secret\n- `bucket` (**Required**, string): The bucket to mount\n- `region` (**Required**, string): Region when use aws s3 or supporting s3, you can set any value if your s3 doesn't support it.\n- `acl` (*Optional*, string): Acl to use on an s3 compatible\n- `subdomain` (*Optional*, bool): Set to true to use domain style for bucket instead of path style.\n- `mount_options` (*Optional*, map): Pass mount options to fuse (see manual: http://man7.org/linux/man-pages/man8/mount.fuse.8.html#OPTIONS)\n- `storage_class` (*Optional*, string): Storage class to use on an s3 compatible\n- `use_content_type` (*Optional*): Set to true to use content type to fetch data\n- `use_sse` (*Optional*, boolean): Set to true to use sse (only works on aws s3)\n- `use_kms` (*Optional*, boolean): Set to true to use kms (only works on aws s3)\n- `kms_key_id` (*Optional*, string): Kms key id (only works on aws s3)\n- `region_set` (*Optional*, boolean): set to true for using region set\n\n## Limitation\n\nUnder the hood [s3-volume-driver](https://github.com/orange-cloudfoundry/s3-volume-driver) use [goofys](https://github.com/kahing/goofys) \nwhich as some limitation when using this filesystem:\n\ngoofys has been tested under Linux and macOS.\n\nList of non-POSIX behaviors/limitations:\n  * only sequential writes supported\n  * does not store file mode/owner/group\n    * use `--(dir|file)-mode` or `--(uid|gid)` options\n  * does not support symlink or hardlink\n  * `ctime`, `atime` is always the same as `mtime`\n  * cannot `rename` directories with more than 1000 children\n  * `unlink` returns success even if file is not present\n  * `fsync` is ignored, files are only flushed on `close`\n\nIn addition to the items above, the following are supportable but not yet implemented:\n  * creating files larger than 1TB\n\n## How it works ?\n\n### Components\n\nthere is 6 components engaged:\n- `s3driver`: Compliant docker volume driver api 1.12.0 (see: https://docs.docker.com/v17.09/engine/extend/plugins_volume/ )\nwhich can only be called by diego. Cloud foundry diego team make order call different than docker and we use [lib provided by \ncloud foundry persistent](https://github.com/cloudfoundry/volumedriver) team which is giving response content not attended by docker.\n- `s3mounter`: Small component which mount volume and be the fuse server compliant for each volume mount by using `your s3 server`.\n- `your s3 server`: Your external s3 server\n- `Fuse`: to mount filesystem using `s3mounter`\n- `diego`: Which made call to `s3driver` for calling mount on local filesystem and give access to this previous volume on app instance.\n\n### Architecture\n\n![architecture](/docs/archi.png)\n\n### Sequence when mounting\n\n![architecture](/docs/sequence.png)\n\n## Why this project ?\n\n1. We wanted our users use s3 instead of filesystem on their app but some of them can't make the change rapidly.\n2. We don't wanted to operate something complicated as a storage server and use nfs-volume-service provided by community.\n3. We had an s3 server fully operated externally\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forange-cloudfoundry%2Fs3-volume-release","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Forange-cloudfoundry%2Fs3-volume-release","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forange-cloudfoundry%2Fs3-volume-release/lists"}