Ruby で HTTP Cloud Functions の関数を作成してデプロイする
このガイドでは、Ruby ランタイムを使用して Cloud Functions の関数を記述するプロセスを説明します。Cloud Functions には次の 2 つのタイプがあります。
- HTTP 関数。標準的な HTTP リクエストから呼び出します。
- イベント ドリブン関数。Cloud Pub/Sub トピックのメッセージや Cloud Storage バケットの変更など、Cloud インフラストラクチャのイベントを処理するために使用します。
次のサンプルでは、簡単な HTTP 関数を作成しています。
ガイドの構成
gcloud CLI を使用した GCP プロジェクトの作成
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
-
Cloud Functions and Cloud Build API を有効にします。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
-
Cloud Functions and Cloud Build API を有効にします。
- gcloud CLI をインストールして初期化します。
gcloud
コンポーネントを更新してインストールします。gcloud components update
- 開発環境を準備します。
関数の作成
関数コードで使用するため、ローカル システムにディレクトリを作成します。
Linux / Mac OS X
mkdir ~/helloworld cd ~/helloworld
Windows
mkdir %HOMEPATH%\helloworld cd %HOMEPATH%\helloworld
helloworld
ディレクトリに、次の内容のapp.rb
ファイルを作成します。このサンプル関数は HTTP リクエストで指定された名前を使用します。名前が指定されていない場合は、「Hello World!」という挨拶を返します。
依存関係の指定
Ruby での依存関係は bundler で管理され、Gemfile
というファイルに表現されます。
関数をデプロイすると、Cloud Functions は bundler
を使用して、Gemfile
と Gemfile.lock
で宣言された依存関係をダウンロードしてインストールします。
Gemfile
には、関数に必要なパッケージとオプションのバージョンの制約が列挙されます。Cloud 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!
関数のデプロイ
HTTP トリガーを使用して関数をデプロイするには、helloworld
ディレクトリで次のコマンドを実行します。
gcloud functions deploy hello_http --runtime ruby30 --trigger-http --allow-unauthenticated
--allow-unauthenticated
フラグを使用すると、認証なしで関数にアクセスできます。認証を要求するには、フラグを省略します。
デプロイされた関数のテスト
関数がデプロイされたら、
httpsTrigger.url
プロパティをメモするか、次のコマンドを使用して検索します。gcloud functions describe hello_http
次のようになります。
https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello_http
ブラウザで、この URL にアクセスします。「Hello World!」というメッセージが表示されます。
たとえば、次の URL を使用して HTTP リクエストで名前を渡します。
https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello_http?name=NAME
「Hello
NAME
!」というメッセージが表示されます。
ログの表示
コマンドライン ツールの使用
Cloud 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
ロギング ダッシュボードを使う
Google Cloud コンソールから Cloud Functions のログを表示することもできます。