AWS Lambda Ruby Runtimeを使ってサーバーレスなSinatraアプリケーションを作る #reinvent

2018.11.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

SinatraアプリをLambdaで動かす

Ruby Runtimeが利用可能になったAWS Lambda。以下の記事では、簡単なLambda Functionを作成するところをやってみました。

AWS LambdaのRuby Runtimeを使ってみた #reinvent

aws-samples ではSinatraアプリをLambdaで動かすサンプルが公開されているので、試してみました。

インストールまで

Rubyをインストールします。以下はrbenvを使ってインストールする場合です。LambdaのRuby RuntimeのRubyバージョンは 2.5.0 なので、ローカルのRubyバージョンも 2.5.0 に合わせる必要があります。

$ rbenv install 2.5.0
$ rbenv global 2.5.0

リポジトリをcloneして、Gemをインストールします。

$ git clone git@github.com:aws-samples/serverless-sinatra-sample.git
$ cd serverless-sinatra-sample
$ bundle install

SAMのデプロイ

S3バケットは事前に用意しておき、以下のコマンドでSAMをパッケージします。

$ aws cloudformation package \
     --template-file template.yaml \
     --output-template-file serverless-output.yaml \
     --s3-bucket <S3バケット>

serverless-sinatra という名前でデプロイします。

$ aws cloudformation deploy --template-file serverless-output.yaml \
     --stack-name serverless-sinatra \
     --capabilities CAPABILITY_IAM

使ってみる

APIとWebページが用意されます。

まずはAPIはhello-worldで呼べます。

$ curl -XGET https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/hello-world
{"Output":"Hello World!"}

次はWebページ。https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/feedback でアクセスします。

Webページが起動しました!

Lambdaはサーバーサイドエンジニアにとって、より扱いやすいものに

SinatraアプリがAPI Gateway+Lambda Functionで動かすことができました。Railsも動かしてみたいですね。