この記事は何
Cloud Functionsで開発をしているときにぶつかる問題として「Cold start問題」があると思います。
色々調べている中で、Cloud Functionsの立ち上がりを高速化する上でのテクニックがあったので記事に残します。
特にランタイムにRubyを選んだ時の実装方法を紹介します。
app.rbの読み込みが遅い
Cloud FunctionsのランタイムにRubyを選択すると、app.rbにイベントに対しての処理を記述すると思います。
単一リポジトリなどで開発を行っているケースだと、app.rbに複数のイベント処理の定義がされることもザラにあると思います。
app.rb
require_relative './functions/function1'
require_relative './functions/function2'
...
functions/function1.rb
require 'functions_framework'
FunctionsFramework.http 'function1' do |request|
...
end
functions/function2.rb
require 'functions_framework'
FunctionsFramework.http 'function2' do |request|
...
end
以下の記事の通り、それぞれの処理の読み込みはある程度の時間がかかるため、本来であれば実行される関数に関わる処理のみをロードするようにして、読み込みの速度をあげたいです。
解決方法
Cloud FunctionsのランタイムにRubyを選択した時、ビルド時、実行時に関数名はFUNCTION_TARGET
という環境変数に保存されています。
特に関数名をファイル名を一致させている場合は、以下のような処理をapp.rbに記述するだけで実現できます
app.rb
require_relative "./functions/#{ENV['FUNCTION_TARGET']}"
Ref