FaaSr

FaaSr: R Package for Function-as-a-Service Cloud Computing - Published in JOSS (2024)

https://github.com/faasr/faasr-package

Science Score: 95.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 4 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: joss.theoj.org
  • Committers with academic emails
    2 of 12 committers (16.7%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords from Contributors

standardization pde interpretability wavelets plasma correlation evolutionary-algorithms
Last synced: 6 months ago · JSON representation

Repository

Function-as-a-Service package for R

Basic Info
  • Host: GitHub
  • Owner: FaaSr
  • License: other
  • Language: R
  • Default Branch: main
  • Homepage: https://faasr.io
  • Size: 4.28 MB
Statistics
  • Stars: 9
  • Watchers: 2
  • Forks: 10
  • Open Issues: 18
  • Releases: 1
Created over 2 years ago · Last pushed 7 months ago
Metadata Files
Readme Changelog Contributing License Code of conduct

README.Rmd

---
output: github_document
---



```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%"
)
```

# FaaSr 


[![R-CMD-check](https://github.com/spark0510/FaaSr-package/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/spark0510/FaaSr-package/actions/workflows/R-CMD-check.yaml)
[![CRAN status](https://www.r-pkg.org/badges/version/FaaSr)](https://cran.r-project.org/package=FaaSr)
[![DOI](https://joss.theoj.org/papers/10.21105/joss.07027/status.svg)](https://doi.org/10.21105/joss.07027)


## Overview

The goal of FaaSr is to make it easy for developers to create R functions and workflows that can run in the cloud, on-demand, based on triggers - such as timers, or repository commits. It is built for Function-as-a-Service (FaaS) cloud computing, and supports both widely-used commercial (GitHub Actions, AWS Lambda, IBM Cloud) and open-source platforms (OpenWhisk). It is also built for cloud storage, and supports the S3 standard also widely used in commercial (AWS S3), open-source (Minio) and research platforms (Open Storage Network). With FaaSr, you can focus on developing the R functions, and leave dealing with the idiosyncrasies of different FaaS platforms and their APIs to the FaaSr package.

FaaSr allows you to:
* Develop one or more *functions* natively in R in your own GitHub repository
* Deploy *actions* that invoke your *functions* in Docker containers
* Compose *workflows* consisting of multiple *actions* in a pre-determined order, described by a Directed Acyclic Graph (*DAG*)
* Register your *workflows* for cloud-native execution in one of the supported FaaS providers
* Invoke your *workflows* with *events*, including scheduled timers
* Use S3-based *cloud storage* to provide file inputs and outputs to each *action* in the *workflow*

## Usage

The functions exposed by FaaSr can be broadly divided as follows:
* Server-side functions: are executed automatically in the cloud, by your functions/workflows. These deal with moving data from/to S3 storage and logging 
* Client-side functions: are executed interactively by you, in your local desktop. These deal with registering and invoking your workflows for execution in your FaaS provider of choice

### Server-side FaaSr functions
* `faasr_get_file(server_name, remote_folder, remote_file, local_folder, local_file)` downloads a file from an S3 server to be used by an *action*
* `faasr_put_file(server_name, remote_folder, remote_file, local_folder, local_file)` uploads a file from an *action* to an S3 server
* `faasr_delete_file(server_name, remote_folder, remote_file)` deletes a file from an S3 server
* `faasr_arrow_s3_bucket(server_name)` returns an arrow object for use with S3 server
* `faasr_log(message)` adds a message to the log of the running action

### Client-side FaaSr functions
* `workflow <- faasr(configuration_file, credentials_file)` returns a *workflow* list associated with a workflow configuration file (in JSON format) and file with credentials for S3 and FaaS server(s)
* `workflow$register_workflow()` registers a *workflow* with the configured FaaS provider
* `workflow$invoke_workflow()` immediately invokes a *workflow* with the configured FaaS provider
* `workflow$set_workflow_timer(cron_string)` set a timer (using the standard CRON format) to invoke a *workflow* at a given time interval with the configured FaaS provider
* `workflow$unset_workflow_timer()` unset a timer previously defined with `set_workflow_timer()`

### Workflow configuration

Workflows are configured using the JSON file format and the [FaaSr configuration schema](https://github.com/FaaSr/FaaSr-package/blob/main/schema/FaaSr.schema.json). 

You may use the [FaaSr-JSON-Builder Shiny app](https://faasr.shinyapps.io/faasr-json-builder/) to create and edit workflows using a graphical user interface (GUI) rather than a text editor. This GUI can be used to create FaaSr-compliant JSON files from scratch (or starting from an exiting configuration you can upload using the tool). The generated configuration can be downloaded to your computer.

### Cloud credential configuration

The client-side FaaSr functions expect both a JSON configuration file describing a workflow, and an environment variable file storing the credentials for your FaaS cloud platforms of choice. The example below shows a template for S3 cloud storage, GitHub Actions, OpenWhisk and AWS Lambda credentials:

`"My_GitHub_Account_TOKEN"="REPLACE_WITH_YOUR_GITHUB_TOKEN"`
`"My_Minio_Bucket_ACCESS_KEY"="REPLACE_WITH_S3_ACCESS_KEY"`
`"My_Minio_Bucket_SECRET_KEY"="REPLACE_WITH_S3_SECRET_KEY"`
`"My_OW_Account_API_KEY"="REPLACE_WITH_YOUR_OPENWHISK_ID:SECRET_KEY"`
`"My_Lambda_Account_ACCESS_KEY"="REPLACE_WITH_YOUR_AWS_LAMBDA_ACCESS_KEY"`
`"My_Lambda_Account_SECRET_KEY"="REPLACE_WITH_YOUR_AWS_LAMBDA_SECRET_KEY"`

## Installation

FaaSr can be installed from CRAN with:

``` r
install.packages("FaaSr")
```

You can install the development version of FaaSr from [GitHub](https://github.com/) with:

``` r
devtools::install_github("FaaSr/FaaSr-package")
```


## Example

Please refer to the [FaaSr tutorial](https://github.com/FaaSr/FaaSr-tutorial) for a detailed step-by-step example that you can run on your own desktop (using Rocker) or on Posit Cloud, using just a GitHub account and the free-for-testing Minio S3 Play server

Owner

  • Name: FaaSr
  • Login: FaaSr
  • Kind: organization

Function-as-a-Service package for R applications

JOSS Publication

FaaSr: R Package for Function-as-a-Service Cloud Computing
Published
November 01, 2024
Volume 9, Issue 103, Page 7027
Authors
Sungjae Park ORCID
Department of Electrical and Computer Engineering, University of Florida, FL, USA
Yun-Jung Ku
Department of Electrical and Computer Engineering, University of Florida, FL, USA
Nan Mu
Department of Electrical and Computer Engineering, University of Florida, FL, USA
Vahid Daneshmand ORCID
Department of Electrical and Computer Engineering, University of Florida, FL, USA
R. Quinn Thomas ORCID
Department of Forest Resources and Environmental Conservation and Virginia Tech Center for Ecosystem Forecasting, Virginia Tech, VA, USA
Cayelan C. Carey ORCID
Department of Biological Sciences and Virginia Tech Center for Ecosystem Forecasting, Virginia Tech, VA, USA
Renato J. Figueiredo ORCID
Department of Electrical and Computer Engineering, University of Florida, FL, USA
Editor
Daniel S. Katz ORCID
Tags
cloud computing function-as-a-service

GitHub Events

Total
  • Create event: 6
  • Issues event: 6
  • Release event: 2
  • Watch event: 6
  • Issue comment event: 6
  • Push event: 29
  • Pull request review event: 4
  • Pull request event: 29
  • Fork event: 10
Last Year
  • Create event: 6
  • Issues event: 6
  • Release event: 2
  • Watch event: 6
  • Issue comment event: 6
  • Push event: 29
  • Pull request review event: 4
  • Pull request event: 29
  • Fork event: 10

Committers

Last synced: 7 months ago

All Time
  • Total Commits: 506
  • Total Committers: 12
  • Avg Commits per committer: 42.167
  • Development Distribution Score (DDS): 0.257
Past Year
  • Commits: 35
  • Committers: 7
  • Avg Commits per committer: 5.0
  • Development Distribution Score (DDS): 0.486
Top Committers
Name Email Commits
Sungjae Park 1****0 376
Renato Figueiredo r****g@g****m 54
github-actions[bot] 4****] 35
Sungjae Park s****k@S****l 14
nan mu p****3@g****m 12
Ashish Tulso Ramrakhiani 1****i 8
Daniel S. Katz d****z@i****g 2
gokulkeshav 1****v 1
Yun-Jung r****0@g****m 1
Nolan Cutler n****1@g****m 1
George G. Vega Yon g****n@g****m 1
Cayelan Carey c****n@v****u 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 41
  • Total pull requests: 91
  • Average time to close issues: 3 months
  • Average time to close pull requests: 5 days
  • Total issue authors: 5
  • Total pull request authors: 10
  • Average comments per issue: 1.17
  • Average comments per pull request: 0.21
  • Merged pull requests: 88
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 10
  • Pull requests: 18
  • Average time to close issues: about 1 month
  • Average time to close pull requests: 13 days
  • Issue authors: 5
  • Pull request authors: 7
  • Average comments per issue: 1.6
  • Average comments per pull request: 0.06
  • Merged pull requests: 18
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • renatof (35)
  • yadudoc (2)
  • DyfanJones (1)
  • Ashish-Ramrakhiani (1)
  • gvegayon (1)
Pull Request Authors
  • spark0510 (98)
  • Ashish-Ramrakhiani (13)
  • nanmu08 (6)
  • danielskatz (4)
  • renatof (3)
  • gokulkeshav (2)
  • nolcut (2)
  • Yun-Jung (2)
  • cayelan (2)
  • gvegayon (1)
Top Labels
Issue Labels
enhancement (9) bug (1)
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • cran 256 last-month
  • Total docker downloads: 13
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 5
  • Total maintainers: 1
cran.r-project.org: FaaSr

FaaS (Function as a Service) Package

  • Versions: 5
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 256 Last month
  • Docker Downloads: 13
Rankings
Dependent packages count: 28.1%
Dependent repos count: 36.1%
Average: 49.8%
Downloads: 85.0%
Last synced: 6 months ago

Dependencies

DESCRIPTION cran
  • RCurl * imports
  • httr * imports
  • jsonlite * imports
  • jsonvalidate * imports
  • paws * imports
  • uuid * imports