Ruby で Cloud Run の HTTP 関数を作成してデプロイする(第 1 世代)

このガイドでは、Ruby ランタイムを使用して Cloud Run functions を記述するプロセスを説明します。Cloud Run functions には次の 2 つのタイプがあります。

  • HTTP 関数。標準的な HTTP リクエストから呼び出します。
  • イベント ドリブン関数。Pub/Sub トピックのメッセージや Cloud Storage バケットの変更など、Cloud インフラストラクチャのイベントを処理するために使用します。

次のサンプルでは、簡単な HTTP 関数を作成しています。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions and Cloud Build APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Functions and Cloud Build APIs.

    Enable the APIs

  8. gcloud CLI をインストールして初期化します
  9. gcloud コンポーネントを更新してインストールします。
    gcloud components update
  10. 開発環境を準備します。

    Ruby 設定ガイドに移動

関数を作成する

  1. 関数コードで使用するため、ローカル システムにディレクトリを作成します。

    Linux / Mac OS X

    mkdir ~/helloworld
    cd ~/helloworld
    

    Windows

    mkdir %HOMEPATH%\helloworld
    cd %HOMEPATH%\helloworld
    
  2. helloworld ディレクトリに、次の内容の app.rb ファイルを作成します。

    require "functions_framework"
    require "cgi"
    require "json"
    
    FunctionsFramework.http "hello_http" do |request|
      # The request parameter is a Rack::Request object.
      # See https://www.rubydoc.info/gems/rack/Rack/Request
      name = request.params["name"] ||
             (request.body.rewind && JSON.parse(request.body.read)["name"] rescue nil) ||
             "World"
      # Return the response body as a string.
      # You can also return a Rack::Response object, a Rack response array, or
      # a hash which will be JSON-encoded into a response.
      "Hello #{CGI.escape_html name}!"
    end

    このサンプル関数は HTTP リクエストで指定された名前を使用します。名前が指定されていない場合は、「Hello World!」という挨拶を返します。

依存関係を指定する

Ruby での依存関係は bundler で管理され、Gemfile というファイルに表現されます。

関数をデプロイすると、Cloud Run functions は bundler を使用して、GemfileGemfile.lock で宣言された依存関係をダウンロードしてインストールします。

Gemfile には、関数に必要なパッケージとオプションのバージョンの制約が列挙されます。Cloud Run functions の関数では、これらのパッケージの 1 つは functions_framework gem である必要があります。

この演習用に、関数コードを含む app.rb ファイルと同じディレクトリに Gemfile というファイルを作成し、そのファイルに次の内容を含めます。

source "https://rubygems.org"

gem "functions_framework", "~> 0.7"

functions_framework gem とその他の依存関係は、次のコマンドを実行してインストールします。

bundle install

ローカルでビルドしてテストする

関数をデプロイする前に、ローカルでビルドしてテストできます。functions-framework-ruby 実行可能ファイルを使用して、hello_http 関数を実行するローカル ウェブサーバーを起動するため、次のコマンドを実行します。

bundle exec functions-framework-ruby --target hello_http
# ...starts the web server in the foreground

関数が正常にビルドされると、ウェブブラウザでアクセスして関数の動作を確認できる URL(http://localhost:8080/)が表示されます。Hello World! というメッセージが表示されます。

別のターミナル ウィンドウから curl を使用して、この関数にリクエストを送信することもできます。

curl localhost:8080
# Output: Hello World!

Ruby Functions Framework のドキュメントの関数のテストをご覧ください。

関数をデプロイする

HTTP トリガーを使用して関数をデプロイするには、helloworld ディレクトリで次のコマンドを実行します。

gcloud functions deploy hello_http --no-gen2 --runtime ruby32 --trigger-http --allow-unauthenticated

--allow-unauthenticated フラグを使用すると、認証なしで関数にアクセスできます。認証を要求するには、フラグを省略します。

デプロイされた関数をテストする

  1. 関数がデプロイされたら、httpsTrigger.url プロパティをメモするか、次のコマンドを使用して検索します。

    gcloud functions describe hello_http
    

    次のようになります。

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello_http
  2. ブラウザで、この URL にアクセスします。「Hello World!」というメッセージが表示されます。

    たとえば、次の URL を使用して HTTP リクエストで名前を渡します。

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello_http?name=NAME

    「Hello NAME!」というメッセージが表示されます。

ログを表示する

Cloud Run functions のログは、Cloud Logging UI または Google Cloud CLI を使用して表示できます。

コマンドライン ツールを使用してログを表示する

gcloud CLI を使用して関数のログを表示するには、logs read コマンドの後に関数の名前を続けます。

gcloud functions logs read hello_http

出力は次のようになります。

LEVEL  NAME       EXECUTION_ID  TIME_UTC                 LOG
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:25.983  Function execution started
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:26.001  Function execution took 19 ms, finished with status code: 200

Logging ダッシュボードでログを表示する

Google Cloud コンソールから Cloud Run functions のログを表示することもできます。