Skip to content
Tim Donohue edited this page Nov 7, 2017 · 11 revisions

Lambdora Overview

Lambdora is a serverless implementation of the Fedora Repository API, based on AWS tools (specifically API Gateway, Lambda and DynamoDB). Its name is derived via a combination of Lambda and Fedora.

This project is in active development. It is not yet production-ready, as not all features of the Fedora Repository API have been implemented.

Purpose

The purpose of the Lambdora project was to attempt a serverless implementation of Fedora that could be used by Hyku and/or hosted Hyku solutions (like HykuDirect). Therefore, currently, it concentrates on implementation of Fedora API features that are actively used by the Samvera software platform (on which Hyku is based).

If this implementation is found to be of interest to others, it may be plausible to extend it to support all features of the Fedora Repository API specification.

Architecture

Code build/deployment

The code is written in Java, and the build/compilation process is managed by Gradle. See our build.gradle file for more info.

The deployment process is entirely managed by the Serverless.com toolkit. See our serverless.yml configuration file for more info. More information on using the Serverless Toolkit + AWS can be found at https://serverless.com/framework/docs/providers/aws/guide/quick-start/

AWS Architecture

Everything is spun up by the Serverless.com toolkit. See our serverless.yml configuration file.

  • API Gateway provides the RESTful API interface
  • It sends requests to Lambda functions (written in Java)
  • Data sent to Fedora is stored in DynamoDB. Our DynamoDB schema is defined in the serverless.yml config. It is a single table (with two indexes) having 5 columns: resource_name, rdf_triple, rdf_subject, rdf_predicate, rdf_object

Testing the Implementation

A basic-test.sh shell script is provided which performs some basic Fedora-level tests (via curl). This script can be used to test that very basic Fedora requests are functioning properly.

Current Status

This project began as a sprint conducted by DuraSpace technical staff which took place October 23 - November 3, 2017. The purpose of the project is to create an implementation of the Fedora API Specification which is cloud-native (that cloud being AWS) and that can be used to provide a performant back-end for Hyku deployments.

As of the latest commit the application can be built (using Gradle) and deployed (using Serverless) to AWS. When deployed, the API endpoint supports the POST operation to add a resource and the GET and HEAD operations to retrieve information about a resource. The exception to this is that binary content is not yet supported. The creation of containers has been tested and shown to work with some caveats (see tickets). The creation of resources which point to external binary is close, but not quite ready. Required response headers and content type handling is not yet in place.

What works?

  1. GET, HEAD, and POST on basic Fedora containers.
  2. When Hyku is hooked up to Lambdora, creation of the "default" AdminSet works (via rake task only).

What doesn't work

  1. The LDP specified "Link" headers are not returned on GET and HEAD requests.
  2. Direct and Indirect containers
  3. Authorization, authentication, Versioning, Resource DELETE, Resource PUT, and PATCH.
  4. Autocreation of non-existent parent containers on resource creation.
  5. Creation of (Hyku) AdminSets from the Hyku UI, see https://github.com/duraspace/lambdora/issues/59