Cloud Run 関数は、オペレーティング システムのバージョンに加えて、アドオン パッケージ、言語サポート、お使いの関数をサポートして呼び出す Ruby Functions Framework ライブラリで構成される環境で実行されます。この環境は言語バージョンで識別され、ランタイム ID として知られています。
関数の準備
関数は、Google Cloud コンソールから直接準備することも、ローカルマシンで作成してアップロードすることもできます。Ruby 開発用にローカルマシンを準備するには、Ruby 開発環境を設定するをご覧ください。
サポートされている Ruby ランタイムとベースイメージ
ランタイム | ランタイム ID | スタック | ランタイム ベースイメージ |
---|---|---|---|
Ruby 3.3 | ruby33 |
|
|
Ruby 3.2 | ruby32 |
|
|
Ruby 3.0 | ruby30 | google-18-full | google-18-full/ruby30 |
Ruby 2.7 | ruby27 | google-18-full | google-18-full/ruby27 |
Ruby 2.6 | ruby26 | google-18-full | google-18-full/ruby26 |
ランタイムの選択
デプロイ時に、関数にサポートされている Ruby ランタイムのいずれかを選択できます。
ランタイム バージョンを選択するには、Google Cloud コンソールまたは gcloud CLI を使用します。使用するツールのタブをクリックして、手順を確認してください。
gcloud
関数をデプロイするときに、--base-image
フラグを使用して関数の Ruby ベースイメージを指定します。次に例を示します。
gcloud run deploy FUNCTION \
--source . \
--function FUNCTION_ENTRYPOINT \
--base-image ruby33
次のように置き換えます。
FUNCTION: デプロイする関数の名前。このパラメータは省略できますが、省略すると名前の入力を求められます。
FUNCTION_ENTRYPOINT: ソースコード内の関数のエントリ ポイント。これは、関数の実行時に Cloud Run が実行するコードです。このフラグには、ソースコード内に存在する関数名または完全修飾クラス名を指定する必要があります。
gcloud CLI を使用して関数をデプロイする手順については、Cloud Run で関数をデプロイするをご覧ください。
コンソール
ランタイム バージョンは、Google Cloud コンソールで Cloud Run 関数を作成または更新するときに選択できます。関数のデプロイ手順については、Cloud Run で関数をデプロイするをご覧ください。
関数を作成するときに Google Cloud コンソールでランタイムを選択する手順は次のとおりです。
Google Cloud コンソールで [Cloud Run] ページに移動します。
[関数を作成] をクリックします。
[ランタイム] リストで、Ruby ランタイム バージョンを選択します。
[作成] をクリックし、Cloud Run がプレースホルダ リビジョンを使用してサービスを作成するのを待ちます。
コンソールの [ソース] タブにリダイレクトされ、関数のソースコードが表示されます。[保存して再デプロイ] をクリックします。
関数のデプロイ後にランタイム バージョンを更新する手順については、新しいソースコードを再デプロイするをご覧ください。
ソースコードの構造
Cloud Run functions が関数の定義を見つけるには、ソースコードが特定の構造に従っている必要があります。詳細については、Cloud Run 関数を作成するをご覧ください。
依存関係を指定する
Ruby で作成された Cloud Run functions は、bundler を使用して依存関係にアクセスします。
Functions Framework は、すべての関数に必須の依存関係です。Cloud Run functions は、関数の作成時にユーザーの代理でこの依存関係をインストールしますが、明確化のため明示的な依存関係として含めておくことをおすすめします。
関数がプライベート依存関係を利用している場合は、functions-framework
をプライベート レジストリにミラーリングすることをおすすめします。ミラーリング対象の functions-framework
を依存関係として関数に含めることで、公共のインターネットからパッケージがインストールされないようにします。
各関数は、functions_framework
gem とその関数で必要な他の gem を指定する Gemfile
を提供する必要があります。Gemfile
は、関数コードを含む app.rb
ファイルと同じディレクトリに置く必要があります。さらに、関数はすべての一時的な依存関係と正確なバージョンを指定するロックファイルを提供する必要があります。このファイル(Gemfile.lock
)も Gemfile
と同じディレクトリにあります。
関数をデプロイすると、Cloud Run は bundler
を使用して、Gemfile
と Gemfile.lock
で宣言された依存関係をダウンロードしてインストールします。
Gemfile
には、関数に必要なパッケージとオプションのバージョンの制約が列挙されます。詳細については、Gemfile リファレンスをご覧ください。
次に Gemfile
の例を示します。
source "https://rubygems.org" gem "functions_framework", "~> 0.7" gem "google-cloud-storage", "~> 1.29"
ローカル依存関係をパッケージ化する
依存関係と関数は、一緒にパッケージ化してデプロイすることもできます。この方法は、依存関係が rubygems パッケージ マネージャーを使用して使用できない場合に選択できます。
ローカルで gem をパッケージ化するには、関数のディレクトリ構造内のディレクトリに gem を入れ、そのパスを依存関係の Gemfile
エントリに記述します。gem のディレクトリには有効な gemspec
ファイルが入っている必要があります。また、コードが関数と一緒にデプロイされるように、関数のディレクトリ階層内に配置されている必要があります。たとえば、次のようなディレクトリ構造を使用するとします。
myfunction/ ├── Gemfile ├── Gemfile.lock ├── app.rb └── my_private_gem/ ├── lib/ | └── my_private_gem.rb └── my_private_gem.gemspec
Gemfile
エントリは次のようになります。
source "https://rubygems.org" gem "functions_framework", "~> 0.7" gem "my_private_gem", path: "./my_private_gem"
ローカルの gem パスの参照については、Gemfile リファレンスをご覧ください。