高木のブログ

Sinatra アプリを Cloud Functions にデプロイする

2022/05/01

Sinatra アプリのデプロイ先を探していて、Cloud Fucntions が候補に上がったので簡単に肩慣らし

functions_framework gem のリポジトリにサンプルが用意されていたのでそれを参考にした

手順

既に Sinatra アプリをモジュラースタイルで作ってある前提

Functions Framework の導入

gem を追加し、リクエストが来たら Sinatra アプリを呼び出すコードを追記をするだけ

Gemfile
 # frozen_string_literal: true

 source "https://rubygems.org"

 git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }

 gem "sinatra"
+gem "functions_framework"
app.rb
 # frozen_string_literal: true

 require "sinatra/base"
+require "functions_framework"

 class App < Sinatra::Application
   get "/" do
     "Hello world!\n"
   end
 end

+FunctionsFramework.http "sinatra_example" do |request|
+  App.call request.env
+end

ローカルで起動

$ bundle exec functions-framework-ruby --target sinatra_example
$ curl localhost:8080
Hello world!

Cloud Functions にデプロイ

$ gcloud functions deploy sinatra_example --runtime ruby27 --trigger-http
$ curl https://hogehoge.cloudfunctions.net/sinatra_example
Hello world!

リポジトリ

今回作ったものは、GitHub にあげた
https://github.com/ytkg/cloud-functions-sinatra


ytkg

Written by ytkg, Twitter, GitHub