├── .gitignore ├── Dockerfile ├── Gemfile ├── Gemfile.lock ├── README.md ├── build.sh └── serverless.yml /.gitignore: -------------------------------------------------------------------------------- 1 | layer 2 | vendor 3 | .serverless -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM lambci/lambda:build-ruby2.5 2 | 3 | RUN yum install -y postgresql postgresql-devel 4 | 5 | ADD Gemfile /var/task/Gemfile 6 | ADD Gemfile.lock /var/task/Gemfile.lock 7 | 8 | RUN bundle install --without development test --deployment -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'http://rubygems.org' 2 | 3 | gem 'json' 4 | gem 'rack' 5 | gem 'rack-contrib' 6 | gem 'rake' 7 | gem 'pg' 8 | gem 'sequel' 9 | gem 'activerecord' 10 | gem 'dotenv' 11 | gem 'httparty' 12 | gem 'sidekiq' 13 | gem 'redis' 14 | gem 'sentry-raven' 15 | 16 | # aws 17 | gem 'aws-sdk-firehose' 18 | gem 'aws-sdk-lambda' 19 | gem 'aws-sdk-s3' 20 | gem 'aws-sdk-sqs' 21 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: http://rubygems.org/ 3 | specs: 4 | activemodel (5.2.2) 5 | activesupport (= 5.2.2) 6 | activerecord (5.2.2) 7 | activemodel (= 5.2.2) 8 | activesupport (= 5.2.2) 9 | arel (>= 9.0) 10 | activesupport (5.2.2) 11 | concurrent-ruby (~> 1.0, >= 1.0.2) 12 | i18n (>= 0.7, < 2) 13 | minitest (~> 5.1) 14 | tzinfo (~> 1.1) 15 | arel (9.0.0) 16 | aws-eventstream (1.0.1) 17 | aws-partitions (1.131.0) 18 | aws-sdk-core (3.45.0) 19 | aws-eventstream (~> 1.0) 20 | aws-partitions (~> 1.0) 21 | aws-sigv4 (~> 1.0) 22 | jmespath (~> 1.0) 23 | aws-sdk-firehose (1.11.0) 24 | aws-sdk-core (~> 3, >= 3.39.0) 25 | aws-sigv4 (~> 1.0) 26 | aws-sdk-kms (1.13.0) 27 | aws-sdk-core (~> 3, >= 3.39.0) 28 | aws-sigv4 (~> 1.0) 29 | aws-sdk-lambda (1.16.0) 30 | aws-sdk-core (~> 3, >= 3.39.0) 31 | aws-sigv4 (~> 1.0) 32 | aws-sdk-s3 (1.30.1) 33 | aws-sdk-core (~> 3, >= 3.39.0) 34 | aws-sdk-kms (~> 1) 35 | aws-sigv4 (~> 1.0) 36 | aws-sdk-sqs (1.10.0) 37 | aws-sdk-core (~> 3, >= 3.39.0) 38 | aws-sigv4 (~> 1.0) 39 | aws-sigv4 (1.0.3) 40 | concurrent-ruby (1.1.4) 41 | connection_pool (2.2.2) 42 | dotenv (2.6.0) 43 | faraday (0.15.4) 44 | multipart-post (>= 1.2, < 3) 45 | httparty (0.16.3) 46 | mime-types (~> 3.0) 47 | multi_xml (>= 0.5.2) 48 | i18n (1.5.1) 49 | concurrent-ruby (~> 1.0) 50 | jmespath (1.6.1) 51 | json (2.3.0) 52 | mime-types (3.2.2) 53 | mime-types-data (~> 3.2015) 54 | mime-types-data (3.2018.0812) 55 | minitest (5.11.3) 56 | multi_xml (0.6.0) 57 | multipart-post (2.0.0) 58 | pg (1.1.4) 59 | rack (2.1.4) 60 | rack-contrib (2.1.0) 61 | rack (~> 2.0) 62 | rack-protection (2.0.5) 63 | rack 64 | rake (12.3.3) 65 | redis (4.1.0) 66 | sentry-raven (2.9.0) 67 | faraday (>= 0.7.6, < 1.0) 68 | sequel (5.16.0) 69 | sidekiq (5.2.5) 70 | connection_pool (~> 2.2, >= 2.2.2) 71 | rack (>= 1.5.0) 72 | rack-protection (>= 1.5.0) 73 | redis (>= 3.3.5, < 5) 74 | thread_safe (0.3.6) 75 | tzinfo (1.2.5) 76 | thread_safe (~> 0.1) 77 | 78 | PLATFORMS 79 | ruby 80 | 81 | DEPENDENCIES 82 | activerecord 83 | aws-sdk-firehose 84 | aws-sdk-lambda 85 | aws-sdk-s3 86 | aws-sdk-sqs 87 | dotenv 88 | httparty 89 | json 90 | pg 91 | rack 92 | rack-contrib 93 | rake 94 | redis 95 | sentry-raven 96 | sequel 97 | sidekiq 98 | 99 | BUNDLED WITH 100 | 1.17.3 101 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ruby Lambda Layer 2 | This Repo shows how to include ruby native gems 3 | 4 | ## Attention 5 | 6 | It is generally a bad practice using api directly in the aws lambda. As it will consume too much connections very quickly. 7 | 8 | ## How to use 9 | 10 | build files 11 | 12 | ```shell 13 | $ ./build.sh 14 | ``` 15 | 16 | deploy to aws 17 | 18 | ```shell 19 | $ sls deploy 20 | ``` 21 | 22 | Then see [the docs](https://serverless.com/framework/docs/providers/aws/guide/functions/#layers) 23 | and configure your lambda to use the layer you just published. 24 | 25 | or 26 | 27 | deploy manually via aws cli 28 | 29 | ```shell 30 | $ cd layer 31 | $ zip -r layer.zip ./lib ./ruby/ -x ./ruby/2.5.0/cache/\* 32 | $ aws lambda publish-layer-version \ 33 | --layer-name ruby-kubectl-pg \ 34 | --region us-east-1 \ 35 | --compatible-runtimes ruby2.5 \ 36 | --zip-file fileb://layer.zip 37 | ``` 38 | 39 | ## Gems included 40 | ```Gemfile 41 | gem 'json' 42 | gem 'rack' 43 | gem 'rack-contrib' 44 | gem 'rake' 45 | gem 'pg' 46 | gem 'sequel' 47 | gem 'activerecord' 48 | gem 'dotenv' 49 | gem 'httparty' 50 | gem 'sidekiq' 51 | gem 'redis' 52 | 53 | # aws 54 | gem 'aws-sdk-firehose' 55 | gem 'aws-sdk-lambda' 56 | gem 'aws-sdk-s3' 57 | ``` 58 | 59 | ## Credit 60 | 61 | dschep https://github.com/dschep/sqlite-lambda-layer/ 62 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | 3 | set -e 4 | 5 | rm -rf layer && mkdir -p layer/lib && mkdir -p layer/ruby/gems 6 | 7 | docker build -t ruby25-pg-builder -f Dockerfile . 8 | 9 | CONTAINER=$(docker run -d ruby25-pg-builder false) 10 | 11 | docker cp \ 12 | $CONTAINER:/usr/lib64/libpq.so.5.5 \ 13 | layer/lib/libpq.so.5 14 | 15 | docker cp \ 16 | $CONTAINER:/var/task/vendor/bundle/ruby/2.5.0 \ 17 | layer/ruby/gems/2.5.0 18 | 19 | docker rm $CONTAINER -------------------------------------------------------------------------------- /serverless.yml: -------------------------------------------------------------------------------- 1 | service: lambda-layers-gem 2 | provider: 3 | name: aws 4 | 5 | layers: 6 | gemPacks: 7 | path: layer 8 | description: A Layer with common ruby gems. 9 | compatibleRuntimes: 10 | - ruby2.5 --------------------------------------------------------------------------------