This repo is deprecated, AWS now supports ruby as a native runtime.
Run ruby scripts on aws lambda.
gem install rumbda
or add it to the Gemfile
group :development do
gem 'rumbda'
end
Rumbda does everything necessary to build a zip file for running ruby inside of an AWS Lambda. This includes downloading traveling ruby, creating a bundle of the project's Gemfile dependencies, and creating a consumable .zip file for use with Lambda.
Run rumbda init
in the directory you'd like to have your Lambda project. This will create the following files in the current directory: source/main.rb
, Gemfile
, .gitignore
, and .ruby-version
. source/main.rb
is the entry point to the ruby script. The Gemfile
and Gemfile.lock
are where gems are specified.
rumbda build
# => creates a file "index.zip" which contains all files in "source/" and all gems specified in the "Gemfile"
-
Set Runtime to
Node.js 6.10
. -
Set Code entry type to
Upload a .ZIP file
. -
In the Function package upload
index.zip
(the zip created byrumbda build
). -
Set Handler to
index.handler
.
See the example folder for what a project using rumbda might look like.
pwd
#=> ~/rumbda/example
ruby --version
#=> 2.2.2
bundle install
#=> installs dependencies, creates Gemfile.lock
bundle exec rumbda build
#=> builds the index.zip file
After the index.zip file is built, follow the steps for Configuring the Lambda.
Lambda environment variables are available to main.rb via ENV['<variable name>']
. See the example.
The Lambda Event is available to the script via ARGV[0]
. See the example.
If testing the script locally, simply pass in a json as the first argument to the script:
$ ruby main.rb "$(cat test_event.json)"
If needing to return JSON from your lambda (e.g. for use in AWS API Gateway) write to a file path provided in your lambda's environment at key 'RUMBDA_RESULT_JSON_FILENAME'.
File.open(ENV['RUMBDA_RESULT_JSON_FILENAME'], 'w') do |file|
file.write(JSON.dump({ statusCode: 200, body: '' }))
end
The file contents should be valid JSON.
Command | Purpose |
---|---|
rumbda init |
Initializes a directory as rumbda project. |
rumbda build |
Packages everything in ./source/ directory as well as gems specified in the Gemfile into a zip file called index.zip |