最近、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アプリケーションが生成されました