はじめに
AWSのLambdaでRubyが使えるようになって色々実務で触っているので、ちょこちょこ更新していこうと思います。
環境
- Ruby 2.5
- Node 11.9.0
- Serverless Framework 1.36.1
- Mac OS X 10.14.2
rbenvとNodejsのインストールは完了している前提です。
RubyのバージョンをLambdaランタイムのRubyバージョンに合わせる
2019/2/14現在 LambdaのRubyバージョンが2.5.0なので、それに合わせて、rbenvで2.5.0をインストールしておきます。
すでにインストールしている場合はこの項目をスキップしてOKです
// 以下のコマンドでrbenvでインストール出来るRubyのバージョンを確認します
$ rbenv install -l
// 2.5.0がなかったら、以下を実行し、最新のRubyバージョンをインストール出来るようにします。
$ brew update
$ brew upgrade ruby-build
// 2.5.0があったら、以下を実行
$ rbenv install 2.5.0
// インストール出来ているか以下で確認をする
$ rbenv versions
Lambda関数の作成
// serverless frameworkをグローバルにインストール
$ npm i -g serverless
// 作業ディレクトリの作成
$ mkdir Lambda
// 作業ディレクトリ内へ移動
$ cd Lambda
// serverlessコマンドのエイリアスslsを使って関数を作成
$ sls create -t aws-ruby -p myFunc
// 関数のディレクトリ内へ移動
$ cd myFunc
// この関数のRubyバージョンを2.5.0に設定
$ rbenv local 2.5.0
// おまじない
$ rbenv rehash
Gemを使用出来るようにする
// bundlerをインストールしておく
$ gem install bundler
// Gemfileを手動で作成
$ touch Gemfile
Gemfileにsource
を記述してGemを使えるようにします
source 'https://rubygems.org'
gem 'aws-record', '~> 2'
上記を記述したら、以下を実行
// いきなりdeploymentが出来ないため
$ bundle install --no-deployment
// 関数と一緒にデプロイするために以下を実行
$ bundle install --deployment
以上までで、myFunc
ディレクトリは以下のような構造になります。
- handler.rb
- serverless.yml
- Gemfile
- Gemfile.lock
- vendor/
handler.rbでrequire
require 'json'
require 'aws-record'
def main
end
みたいにしてあげれば、ライブラリが使えるようになります。
しばらく、serverless関連の話題を投稿していこうと思います。