※2019/7/3追記
AWS Lambda(for Ruby2.5)で画像合成をやってみた!
https://praha-inc.hatenablog.com/entry/2019/02/22/143721
こちらも執筆しています。より詳細な手順を記載していますので、参考になりましたら幸いです。
こんにちは、@shino_tpです。
AWS re:Invent 2018でAWS LambdaがRubyを公式サポートが発表されましたね!
これを期にLambdaでRubyを使ってみたところ、Lambdaに標準でインストールされていないライブラリ(gem)を使用する方法が不明だったため手順をまとめます。
詳細な手順は公式のドキュメントに記載されているので、備忘録になります。
公式ドキュメント
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/ruby-package.html
前提環境
awscli
awsコマンドを使うのでawscliのインストール&セットアップが必要です。
参照: https://qiita.com/maimai-swap/items/999eb69b7a4420d6ab64
Ruby2.5
rbenv、rvmなどを使ってRubyをインストール。
注意
AWS LambdaのRubyバージョンは2.5です(2018年12月6日現在)
※Rubyのバージョンが2.5以外の状態でbundle install
を実行後、デプロイを行っても no such file
などのエラーになるため注意。
AWSコンソール上で対応すること
Lambda関数を作成
AWSコンソールにアクセスし、Lambda関数を作成します。
デプロイ時に関数名を指定しますので、適当な名前で作成しましょう。
ローカル環境で対応すること
Gemfileを作成
source 'https://rubygems.org'
gem 'aws-sdk-s3'
gem 'mini_magick' # AWS Lambdaが標準サポートしていないgem
bundle install
$ bundle install --path vendor/bundle
ディレクトリ構造
今回のディレクトリ構造です。
.
├── Gemfile
├── Gemfile.lock
├── lambda_function.rb
└── vendor
└── bundle
Lambdaにデプロイ
ローカルでインストールしたライブラリを作成したプログラムファイルと一緒にzipに固めてデプロイをします。
デプロイ対象のファイルをzipファイルに圧縮
# zip -r [圧縮ファイル名].zip [ファイル名1] [ファイル名2] [ディレクトリ名1] [ディレクトリ名2]...(以降含めたいファイルorディレクトリを記述する)
$ zip -r function.zip lambda_function.rb vendor
ローカルからLambdaにデプロイ
$ aws lambda update-function-code \
--function-name [関数名] \
--zip-file fileb://[圧縮ファイル名].zip
--function-name
オプションには、Lambdaの関数名
--zip-file
オプションには、圧縮したzipファイルの名前
を指定
以上です。
参考資料