おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

RackアプリケーションをLambdaでホスティングしてみた

最近、Lamby というRackアプリケーションをAWS Lambda上で動かすためのGemを使って、RackアプリケーションをAWS Lambda上で動かしてみました。簡単に使えて良い感じだったのでメモしておきます。

前提

もともとm3 tech blogの記事 を見てLambdaでもRailsを動かせることは知っていました。

ここ数年ほど個人ブログ用のリダイレクタを DigitalOceanの$4/月のインスタンス上で動かしていたのですが、普段は全然アクセス数がないはずなので、これをLambdaに載せ替えたらもっと安くなるのでは?と思い、試しに乗り換えてみることにしたのでした。

設定の仕方

Lambyでは、以下のようなコマンドを使って新しいRailsアプリ*1の雛形を生成できます。

docker run \
  --rm \
  --interactive \
  --volume "${PWD}:/var/task" \
  ghcr.io/rails-lambda/lamby-cookiecutter \
  "gh:rails-lambda/lamby-cookiecutter"

単にrails newしただけではなく、lambdaにデプロイするためのCI設定(GitHub ActionsやCircleCIの設定ファイル)、やbin/deploy スクリプトなどが含まれています。生成されたプロジェクトをベースに少し設定をいじり、bin/deploy を実行すると、簡単にLambda上にRailsアプリをデプロイできます。デプロイしたアプリケーションはLambda 関数 URL経由でアクセスできます。

Lambda関数URL自体はhttps://<url-id>.lambda-url.<region>.on.awsのような形式のURLなのですが、独自ドメインで運用したい場合のドキュメントはあるので、そのとおりにCloudfrontとDNSを設定したところ比較的すんなり設定できました。

注意点

Lambyは一応「Rackアプリケーション対応」となっていますが、実際にはRailsを前提に設計されている印象です。僕のリダイレクタはSinatraアプリだったのですが、これをLambyで使おうとした場合の設定はドキュメントにはなかったので、Lambyのコードを読んで理解する必要がありました。

まとめ

多少荒削りな部分はあるものの、bin/deploy でサクッとLambdaにデプロイできる体験は良かったです。1ヶ月ほど運用してみた料金は、LambdaとCloudfrontの料金は無料の範囲で収まっているようで0ドル、ECRの料金が0.04ドルほどかかっている、という状況です。やすい。アクセス数の少ないサービスであれば、安価に運用できて良さそうだなと感じました。

*1:執筆時点ではRailsの最新は8.0でしたが7.2のRailsアプリケーションが生成されました