The Function Development Kit for Ruby (FDK for Ruby) provides a Ruby framework for developing functions for use with Fn.
To use this FDK, you simply need to require this gem.
require 'fdk'
Then create a function with with the following syntax:
def myfunction(context:, input:)
# Do some work here
return output
end
- context - provides runtime information for your function, such as configuration values, headers, etc.
- input – This parameter is a string containing body of the request.
- output - is where you can return data back to the caller. Whatever you return will be sent back to the caller. If
async
, this value is ignored. - Default output format should be in JSON, as Content-Type header will be
application/json
by default. You can be more flexible if you create and return an FDK::Response object instead of a string.
Then simply pass that function to the FDK:
FDK.handle(target: :myfunction)
See the examples folder of this repo for code examples.
In the hello-ruby folder there is a traditional "Hello World" example. The code is found in func.rb:
require 'fdk'
def myfunction(context:, input:)
input_value = input.respond_to?(:fetch) ? input.fetch('name') : input
name = input_value.to_s.strip.empty? ? 'World' : input_value
{ message: "Hello #{name}!" }
end
FDK.handle(target: :myfunction)
To use a function we need to deploy it to an fn server.
In fn an app consist of one or more functions and each function is deployed as part of an app.
We're going to deploy the hello world example as part of the app
examples
.
With an fn server running (see Quickstart if you need instructions):
cd
to the hello-ruby folder and run:
fn deploy --app examples --local
The --app examples
option tells fn to deploy the function as part of
the app named examples.
The --local
option tells fn not to push the function image to Docker
Hub.
Once we have deployed a function we can invoke it using fn invoke
.
Running the Hello World example:
$ fn invoke examples hello
{"message":"Hello World!"}
To get a more personal message, send a name in a JSON format and set the
content-type 'application/json'
:
echo '{"name":"Joe"}' | fn invoke examples hello --content-type 'application/json'
{"message":"Hello Joe!"}