Deploy Ruby Lambda functions with .zip file archives - Amazon Lambda
Services or capabilities described in Amazon Web Services documentation might vary by Region. To see the differences applicable to the China Regions, see Getting Started with Amazon Web Services in China (PDF).

Deploy Ruby Lambda functions with .zip file archives

Your Amazon Lambda function's code consists of scripts or compiled programs and their dependencies. You use a deployment package to deploy your function code to Lambda. Lambda supports two types of deployment packages: container images and .zip file archives.

To create the deployment package for a .zip file archive, you can use a built-in .zip file archive utility or any other .zip file utility (such as 7zip) for your command line tool. Note the following requirements for using a .zip file as your deployment package:

  • The .zip file contains your function's code and any dependencies used to run your function's code (if applicable) on Lambda. If your function depends only on standard libraries, or Amazon SDK libraries, you don't need to include these libraries in your .zip file. These libraries are included with the supported Lambda runtime environments.

  • If the .zip file is larger than 50 MB, we recommend uploading it to your function from an Amazon Simple Storage Service (Amazon S3) bucket.

  • If your deployment package contains native libraries, you can build the deployment package with Amazon Serverless Application Model (Amazon SAM). You can use the Amazon SAM CLI sam build command with the --use-container to create your deployment package. This option builds a deployment package inside a Docker image that is compatible with the Lambda execution environment.

    For more information, see sam build in the Amazon Serverless Application Model Developer Guide.

  • You need to build the deployment package to be compatible with this instruction set architecture of the function.

  • Lambda uses POSIX file permissions, so you may need to set permissions for the deployment package folder before you create the .zip file archive.

Prerequisites

The Amazon CLI is an open-source tool that enables you to interact with Amazon services using commands in your command line shell. To complete the steps in this section, you must have the following:

Tools and libraries

Lambda provides the following tools and libraries for the Ruby runtime:

Tools and libraries for Ruby

Updating a function with no dependencies

To update a function by using the Lambda API, use the UpdateFunctionCode operation. Create an archive that contains your function code, and upload it using the Amazon Command Line Interface (Amazon CLI).

To update a Ruby function with no dependencies
  1. Create a .zip file archive.

    zip function.zip function.rb
  2. To upload the package, use the update-function-code command.

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    You should see the following output:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws-cn:lambda:us-west-2:123456789012:function:my-function", "Runtime": "ruby2.5", "Role": "arn:aws-cn:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }

Updating a function with additional dependencies

If your function depends on libraries other than the Amazon SDK for Ruby, install them to a local directory with Bundler, and include them in your deployment package.

To update a Ruby function with dependencies
  1. Install libraries in the vendor directory using the bundle command.

    bundle config set --local path 'vendor/bundle' \ bundle install

    You should see the following output:

    Fetching gem metadata from https://rubygems.org/.............. Resolving dependencies... Fetching aws-eventstream 1.0.1 Installing aws-eventstream 1.0.1 ...

    This installs the gems in the project directory instead of the system location, and sets vendor/bundle as the default path for future installations.

    Note

    The bundle config command in this step may add a trailing space to your BUNDLE_PATH variable. To avoid deployment errors, check that the value of BUNDLE_PATH ("vendor/bundle") does not contain a trailing space.

    To later install gems globally, use bundle config set --local system 'true'.

  2. Create a .zip file archive.

    zip -r function.zip function.rb vendor

    You should see the following output:

    adding: function.rb (deflated 37%) adding: vendor/ (stored 0%) adding: vendor/bundle/ (stored 0%) adding: vendor/bundle/ruby/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/build_info/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/cache/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/cache/aws-eventstream-1.0.1.gem (deflated 36%) ...
  3. Update the function code.

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    You should see the following output:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws-cn:lambda:us-west-2:123456789012:function:my-function", "Runtime": "ruby2.5", "Role": "arn:aws-cn:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 300, "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }