Skip to content

Ruby Layers not properly packaged #177

Description

@jkahn117

Description:

When using SAM to build a Ruby layer, packaging of Gems is incorrect. Gems are bundled in ruby /lib/vendor/bundle/ruby/2.7.0 using the default bundler workflow, these Gems are not picked up by the runtime.

Per documentation, GEM_PATH (ruby/gems/2.7.0) should be used. Shared / custom code is packaged properly to RUBYLIB (ruby/lib).

Steps to reproduce the issue:

  1. Create new SAM application.
  2. Add Layer to template:
SAMBuildLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      ContentUri: SAMBuild
      CompatibleRuntimes:
        - ruby2.7
    Metadata:
      BuildMethod: ruby2.7
  1. Add directory SAMBuild containing a Gemfile with valid contents.
  2. Run sam build command.
  3. Review results and/or test with a sample function.

Observed result:

Result of build (.aws-sam/build) contains SAMBuildLayer/ruby/lib/vendor/bundle/ruby/2.7.0/gems with bundled Gems. When attempting to run sample function, Gem is not found.

Expected result:

Gem should be packaged in ruby/gems/2.7.0 and available to function when executed. I was able to build using a Makefile:

MakeBuildLayer:
  Type: AWS::Serverless::LayerVersion
  Properties:
    ContentUri: MakeBuild
    CompatibleRuntimes:
      - ruby2.7
  Metadata:
    BuildMethod: makefile

And Makefile in MakeBuild directory:

build-MakeBuildLayer:
  bundle install --path=$(ARTIFACTS_DIR)
  rm -rf $(ARTIFACTS_DIR)/ruby/2.7.0/cache && rm -rf $(ARTIFACTS_DIR)/ruby/2.7.0/bin
  mkdir $(ARTIFACTS_DIR)/ruby/gems
  mv $(ARTIFACTS_DIR)/ruby/2.7.0 $(ARTIFACTS_DIR)/ruby/gems

Additional environment details (Ex: Windows, Mac, Amazon Linux etc)

SAM CLI, version 0.52.0

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions