AWS CodeBuildを使ってRuby lambda functionにデプロイする


方法論的なものが少なかったので。
Rubyだけでなく、他の言語でも応用が効くはず。
CodePipelineと組み合わせると強力。

TLDR

buildspec.yml
# 抜粋
phases:
  install:
    runtime-versions:
      ruby: 2.6
    commands:
      - rbenv install 2.5.5 && rbenv global 2.5.5
      # bundler install --path vendor/bundle等
post_build:
    commands:
      - zip data.zip *.rb -r vendor && aws lambda update-function-code --function-name 'FUNCTION_NAME' --zip-file 'fileb://data.zip'

解説

bundle install した状態のファイル群をまとめてlambdaに投げたい。

Rubyバージョンの乖離

2019/06/26現在、lambdaのRubyは通常2.5しか選択できない。
CodeBuildはRuby2.6しか選択できない。
bundle install --path vendor/bundle したときに困ってしまう。
CodeBuildのログを見る感じrbenvが入っているので使いたいRubyバージョン入れてしまおうというアプローチ。

lambdaへの反映

awsコマンドが使えるので使う。zipを作って普通にアップロード。CodeBuildの権限ロールにlambdaのアクセス権限つけるのを忘れずに。(AWSLambdaFullAccessをつければ動くことは確認)

別のアプローチ

カスタムコンテナ使えば解決ではあるが・・・。

補足

実際の buildspec.yml のコマンド欄には hoge.sh みたいにシェルスクリプトを指定したほうが見通しや管理が楽。
zipするところは必要なファイル群を入れておくこと。