Cloud Run 関数は、オペレーティング システムのバージョンに加えて、アドオン パッケージ、言語サポート、お使いの関数をサポートして呼び出す Node.js Functions Framework ライブラリで構成される環境で実行されます。この環境は言語バージョンで識別され、ランタイム ID として知られています。
関数の準備
関数は、Google Cloud コンソールから直接準備することも、ローカルマシンで作成してアップロードすることもできます。Node.js 開発用にローカルマシンを準備するには、Node.js 開発環境を設定するをご覧ください。
サポートされている Node.js ランタイムとベースイメージ
ランタイム | ランタイム ID | スタック | ランタイム ベースイメージ |
---|---|---|---|
Node.js 22 | nodejs22 |
|
|
Node.js 20 | nodejs20 |
|
|
Node.js 18 | nodejs18 |
|
|
Node.js 16 | nodejs16 | google-18-full | google-18-full/nodejs16 |
Node.js 14 | nodejs14 | google-18-full | google-18-full/nodejs14 |
Node.js 12 | nodejs12 | google-18-full | google-18-full/nodejs12 |
Node.js 10 | nodejs10 | google-18-full | google-18-full/nodejs10 |
Node.js 8 | nodejs8 | 廃止 | 廃止 |
Node.js 6 | nodejs6 | 廃止 | 廃止 |
ランタイムの選択
デプロイ時に、関数にサポートされている Node.js ランタイムのいずれかを選択できます。
ランタイム バージョンを選択するには、Google Cloud コンソールまたは gcloud CLI を使用します。使用するツールのタブをクリックして、手順を確認してください。
gcloud
関数をデプロイするときに、--base-image
フラグを使用して関数の Node.js ベースイメージを指定します。次に例を示します。
gcloud run deploy FUNCTION \
--source . \
--function FUNCTION_ENTRYPOINT \
--base-image nodejs22
次のように置き換えます。
FUNCTION: デプロイする関数の名前。このパラメータは省略できますが、省略すると名前の入力を求められます。
FUNCTION_ENTRYPOINT: ソースコード内の関数のエントリ ポイント。これは、関数の実行時に Cloud Run が実行するコードです。このフラグには、ソースコード内に存在する関数名または完全修飾クラス名を指定する必要があります。
gcloud CLI を使用して関数をデプロイする手順については、Cloud Run で関数をデプロイするをご覧ください。
コンソール
ランタイム バージョンは、Google Cloud コンソールで Cloud Run 関数を作成または更新するときに選択できます。関数のデプロイ手順については、Cloud Run で関数をデプロイするをご覧ください。
関数を作成するときに Google Cloud コンソールでランタイムを選択する手順は次のとおりです。
Google Cloud コンソールで [Cloud Run] ページに移動します。
[関数を作成] をクリックします。
[ランタイム] リストで、Node.js ランタイム バージョンを選択します。
[作成] をクリックし、Cloud Run がプレースホルダ リビジョンを使用してサービスを作成するのを待ちます。
コンソールの [ソース] タブにリダイレクトされ、関数のソースコードが表示されます。[保存して再デプロイ] をクリックします。
関数のデプロイ後にランタイム バージョンを更新する手順については、新しいソースコードを再デプロイするをご覧ください。
ソースコードの構造
Cloud Run functions が関数の定義を見つけるには、ソースコードが特定の構造に従っている必要があります。詳細については、Cloud Run 関数を作成するをご覧ください。
依存関係を指定する
関数の依存関係は package.json
ファイルに指定します。詳細については、Node.js で依存関係を指定するをご覧ください。
NPM ビルド スクリプト
デフォルトでは、package.json
で build
スクリプトが検出されると、Node.js ランタイムによって npm run build
が実行されます。アプリケーションの起動前にビルドステップをさらに制御する必要がある場合は、gcp-build
スクリプトを package.json
ファイルに追加して、カスタム ビルドステップを指定できます。
ビルドで npm run build
スクリプトが実行されないようにするには、次のいずれかの方法を使用できます。
package.json
ファイルに、空の値を持つgcp-build
スクリプトを追加する:"gcp-build":""
。ビルド環境変数
GOOGLE_NODE_RUN_SCRIPTS
を空文字列に設定して、すべてのスクリプトが実行されないようにする。
非同期関数の完了
コールバックや Promise
オブジェクトを含む非同期タスクを行う場合は、関数がこれらのタスクの実行を完了したことをランタイムに明示的に通知する必要があります。これは、次のサンプルに示すように、いくつかの方法で行うことができます。重要なのは、コードが非同期タスクまたは Promise
が完了するのを待ってから戻る必要があるということです。これを行わないと、関数の非同期コンポーネントが完了前に終了する可能性があります。
イベント ドリブン関数
暗黙的な復帰
exports.implicitlyReturning = async (event, context) => {
return await asyncFunctionThatReturnsAPromise();
};
明示的な復帰
exports.explicitlyReturning = function (event, context) {
return asyncFunctionThatReturnsAPromise();
};
HTTP 関数
ミドルウェアを使用して HTTP リクエストを処理する
Node.js HTTP 関数には、ExpressJS と互換性のある request
オブジェクトと response
オブジェクトが用意されており、HTTP リクエストの使用が容易になっています。Cloud Run functions ではリクエスト本文が自動的に読み取られるため、常にメディアタイプから独立したリクエスト本文を受け取ります。つまり、HTTP リクエストはコードの実行時までに完全に読み取られているものと想定されています。ExpressJS アプリをネストする際は、この点に注意する必要があります。特に、リクエスト本文が読み取られていないと想定しているミドルウェアは、想定どおりに動作しない可能性があります。
ES モジュールを使用する
ECMAScript モジュール(ES モジュールまたは ESM)は Node 14 以降の TC39 の標準でフラグ付けなしの機能で、JavaScript モジュールの読み込みに使用されます。ESM は、CommonJS とは異なり、モジュールを読み込むための非同期 API を提供します。また、構文も改善されています。Cloud Run 関数の中で require
ステートメントの代わりに import
と export
ステートメントを使用できるようになりました。
Cloud Run 関数内で ESM を使用するには、package.json
内で "type": "module"
を宣言する必要があります。
{
...
"type": "module",
...
}
これにより、import
ステートメントと export
ステートメントを使用できます。
詳しくは、ES モジュールの使用に関する記事をご覧ください。