Google Cloud Pub/Sub トピックのメッセージ、Google Cloud Storage バケットの変更、Firebase イベントなどのイベントによって Cloud Functions の関数を間接的に呼び出す場合は、バックグラウンド関数を使用します。
バックグラウンド関数を再試行する方法については、バックグラウンド関数の再試行をご覧ください。
サポート ランタイム
次のランタイムは、バックグラウンド関数をサポートしています。
言語 | バージョン |
---|---|
Node.js | すべて |
Python | すべて |
Go | すべて |
Java | すべて |
使用例
以下の例は、Pub/Sub と Cloud Storage からイベントを処理する方法を示しています。異なるソースからのイベントを処理する方法については、Cloud Functions の呼び出しをご覧ください。
Pub/Sub の例
この例では、Pub/Sub イベントで Cloud ファンクションをトリガーします。Pub/Sub トピックにメッセージが公開されるたびに関数が呼び出され、メッセージから派生したデータを含む挨拶がログに書き込まれます。
Node.js
Python
Go
Java
C#
Ruby
Pub/Sub イベントでトリガーされる Cloud Functions をデプロイする方法については、Pub/Sub トリガーと Pub/Sub チュートリアルをご覧ください。
Cloud Storage の例
この例では、Cloud Storage イベントで Cloud ファンクションをトリガーします。 オブジェクトが Cloud Storage バケットに作成されるたびに関数が呼び出され、変更に関するメッセージがログに記録されます。
Node.js
Python
Go
Java
C#
Ruby
Cloud Storage イベントでトリガーされる Cloud Functions をデプロイする方法については、Cloud Storage トリガーと Cloud Storage チュートリアルをご覧ください。
関数のパラメータ
バックグラウンド関数には、関数の実行をトリガーしたイベントの関連データを含む引数が渡されます。バックグラウンド関数のパラメータは次のとおりです。
Node.js
Node.js ランタイムでは、関数に引数 (data, context, callback)
が渡されます。
プロパティ | 説明 | 型 |
---|---|---|
data |
イベントのデータ オブジェクト。タイプはイベントによって異なります。 | オブジェクト |
context |
イベントのコンテキスト オブジェクト。 | オブジェクト |
context.eventId |
イベントの一意の ID。例: "70172329041928" 。 |
文字列 |
context.timestamp |
このイベントが作成された日時。例: "2018-04-09T07:56:12.975Z"
|
文字列(ISO 8601) |
context.eventType |
イベントのタイプ。例: "google.pubsub.topic.publish"
|
文字列 |
context.resource |
イベントを発行したリソース。 | オブジェクト |
callback |
関数の実行完了を通知するコールバック。errback 規則に従います。最初の引数がエラーとして解釈されます。 callback(); // Success callback(null, 'Success!'); // Success callback(1); // Error callback(new Error('Failed')); // Error |
関数 |
Python
Python ランタイムでは、関数に引数 (data, context)
が渡されます。
プロパティ | 説明 | 型 |
---|---|---|
data |
イベントのデータを含む辞書。形式はイベントによって異なります。 | Cloud Storage オブジェクトまたは PubsubMessage |
context |
イベントのコンテキスト オブジェクト。 | コンテキスト |
context.event_id |
イベントの一意の ID。例: "70172329041928" 。 |
文字列 |
context.timestamp |
このイベントが作成された日時。例: "2018-04-09T07:56:12.975Z"
|
文字列(ISO 8601) |
context.event_type |
イベントのタイプ。例: "google.pubsub.topic.publish"
|
文字列 |
context.resource |
イベントを発行したリソース。 | 文字列 |
Go
Go ランタイムでは、関数に引数 (ctx, Event)
が渡されます。
プロパティ | 説明 | 型 |
---|---|---|
ctx |
イベントに関するメタデータを保持する context.Context 値。メタデータは、cloud.google.com/go/functions/metadata パッケージで取得できます。 |
context.Context
|
Event |
定義する型の
コードに指定する
|
ユーザー定義の struct |
Java
Java ランタイムでは、関数にパラメータ (event, context)
が渡されます。バックグラウンド関数には、BackgroundFunction<T>
と RawBackgroundFunction
の 2 種類があります。
プロパティ | 説明 | 型 |
---|---|---|
event |
イベントのペイロード。ペイロードの内容は、関数が登録されたトリガーによって異なります。
BackgroundFunction<T> の場合、このパラメータの型は T (ユーザー定義クラス)です。イベントの JSON ペイロードは、Gson.fromJson を使用してシリアル化解除され、このクラスのインスタンスになります。RawBackgroundFunction の場合、このパラメータの型は String であり、イベントの JSON ペイロードです。
|
ユーザー定義または String
|
context |
イベントに関するメタデータを保持する読み取り専用の Context オブジェクト。 |
Context
|
C#
.NET Core 3.1 ランタイムには、2 種類の CloudEvent 関数があります。1 つは ICloudEvent<T>
、もう 1 つは ICloudEvent
(型なしの CloudEvent 関数)です。
ICloudEvent<T>
を実装すると、関数にパラメータ (cloudEvent, data, cancellationToken)
が渡されます。ICloudEvent
を実装すると、関数にパラメータ (cloudEvent, cancellationToken)
が渡されます。
プロパティ | 説明 |
---|---|
cloudEvent |
関数をトリガーした CloudEvent。イベントに関するメタデータと元データのメタデータが格納されます。 |
data |
イベントから抽出された T 型のデータ。T は関数のタイプ引数です。このパラメータは、型なしの CloudEvent 関数で使用されません。 |
cancellationToken |
中止されたリクエストを監視するキャンセル トークン。 |
Ruby
Ruby ランタイムでは、CloudEvent 関数には、単一のパラメータで CloudEvents::Event::V1
型の CloudEvent オブジェクトが渡されます。このオブジェクトのプロパティは次のとおりです。
プロパティ | 説明 | 型 |
---|---|---|
id |
イベントの一意の ID。例: 70172329041928 。 |
String
|
time |
このイベントが作成された日時。 | DateTime |
type |
イベントのタイプ。例: google.cloud.pubsub.topic.v1.messagePublished 。 |
String |
source |
イベントを発行したリソース。 例: //pubsub.googleapis.com/projects/sample-project/topics/gcf-test 。 |
URI
|
data |
イベントのデータ オブジェクト。これはハッシュで、そのキーはイベントによって異なります。 | Hash |
イベントデータは、関数が登録されたトリガーによって異なります(たとえば Pub/Sub または Cloud Storage など)。直接トリガーされる関数の場合(gcloud functions call
コマンドでトリガーする場合など)、直接送信されたメッセージがイベントデータに含まれます。
バックグラウンド関数の終了
関数がバックグラウンド タスク(スレッド、Future、Promise、コールバック、システム プロセスなど)を作成する場合、関数から制御が戻る前に、これらのタスクを終了するか、他の方法で解決する必要があります。特定の実行から制御が戻る前に終了しなかったタスクは、正常に完了しない場合があります。また、予測できない動作を引き起こす場合もあります。
Node.js ランタイムを使用すると、関数に進行中のタスクへの参照を提供させ、Cloud Functions 自体にタスクを待機させることができます。これは、次のいずれかの方法で行うことができます。
- 関数が完了すると解決される
Promise
を返す。 - 完了時にコールバック関数で
callback
引数を呼び出す。
次のステップ
- Cloud Functions をデプロイする。
- Pub/Sub トリガー関数を呼び出す。
- Cloud Storage トリガー関数を呼び出す。
- Cloud Functions と Pub/Sub のチュートリアル。
- Cloud Functions と Cloud Storage のチュートリアル。