このガイドでは、指定したコレクション内のドキュメントに変更を加えたときにトリガーされる関数の例を示します。
始める前に
このガイドのサンプルコードを実行する前に、次の作業を行う必要があります。
例
次の例は、Firestore トリガーに応答する関数の作成方法を示しています。
例 1: Hello Firestore 関数
次のサンプルは、トリガーされた Firestore イベントのフィールドを出力します。
Node.js
Python
Go
Java
C#
Hello Firestore 関数をデプロイする
Firestore データベースをまだ設定していない場合は、設定します。
任意のツールを使用して、手順のタブでクリックします。
コンソール
Google Cloud コンソールを使用して関数を作成するときに、関数にトリガーを追加することもできます。関数のトリガーを作成する手順は次のとおりです。
Google Cloud コンソールで、[Cloud Run] に移動します。
[関数を作成] をクリックし、関数の詳細を入力します。デプロイ時に関数を構成する方法については、関数をデプロイするをご覧ください。
[トリガー] セクションで [トリガーを追加] をクリックします。
[Firestore トリガー] を選択します。
[Eventarc トリガー] ペインで、トリガーの詳細を次のように変更します。
[トリガー名] フィールドにトリガーの名前を入力するか、デフォルトの名前を使用します。
リストからトリガーのタイプを選択して、次のいずれかのトリガータイプを指定します。
Google のソース: Pub/Sub、Cloud Storage、Firestore などの Google イベント プロバイダのトリガーを指定できます。
サードパーティ: Eventarc ソースを提供する Google 以外のプロバイダと統合できます。詳細については、Eventarc のサードパーティ イベントをご覧ください。
[イベント プロバイダ] リストから [Firestore] を選択し、関数をトリガーするイベントのタイプを提供するプロダクトを選択します。イベント プロバイダのリストについては、イベント プロバイダと宛先をご覧ください。
[イベントタイプ] リストから [type=google.cloud.firestore.document.v1.written] を選択します。トリガーの構成は、サポートされているイベントタイプによって異なります。詳細については、イベントタイプをご覧ください。
[フィルタ] セクションで、データベース、オペレーション、属性の値を選択するか、デフォルト値を使用します。
[リージョン] フィールドが有効になっている場合は、Eventarc トリガーのロケーションを選択します。一般に、Eventarc トリガーのロケーションは、イベントをモニタリングする Google Cloud リソースのロケーションと一致する必要があります。ほとんどの場合、Cloud Functions の関数を同じリージョンにデプロイする必要があります。Eventarc トリガーのロケーションの詳細については、Eventarc のロケーションについてをご覧ください。
[サービス アカウント] フィールドで、サービス アカウントを選択します。Eventarc トリガーはサービス アカウントにリンクされ、関数を呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、関数を呼び出す権限が必要です。デフォルトでは、Cloud Run は Compute Engine のデフォルトのサービス アカウントを使用します。
受信リクエストの送信先であるサービスの URL パスを指定することもできます。これは、トリガーのイベントの送信先である宛先サービスの相対パスです。例:
/
、/route
、route
、route/subroute
.
必須フィールドに値を入力したら、[トリガーを保存] をクリックします。
gcloud
gcloud CLI を使用して関数を作成する場合は、まず関数をdeployしてからトリガーを作成する必要があります。関数のトリガーを作成する手順は次のとおりです。
サンプルコードを含むディレクトリで次のコマンドを実行して、関数をデプロイします。
gcloud beta run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE_ID \ --region REGION
次のように置き換えます。
FUNCTION: デプロイする関数の名前。このパラメータは省略できますが、省略すると名前の入力を求められます。
FUNCTION_ENTRYPOINT: ソースコード内の関数のエントリ ポイント。これは、関数の実行時に Cloud Run が実行するコードです。このフラグには、ソースコード内に存在する関数名または完全修飾クラス名を指定する必要があります。
BASE_IMAGE_ID: 関数のベースイメージ環境。ベースイメージと各イメージに含まれるパッケージの詳細については、ランタイム ベースイメージをご覧ください。
REGION: 関数をデプロイする Google Cloud リージョン。例:
us-central1
次のコマンドを実行して、イベントをフィルタするトリガーを作成します。
gcloud eventarc triggers create TRIGGER_NAME \ --location=EVENTARC_TRIGGER_LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=REGION \ --event-filters=type=google.cloud.firestore.document.v1.written \ --event-filters=database='(default)' \ --event-data-content-type=application/protobuf \ --event-filters-path-pattern=document='users/{username}' \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
次のように置き換えます。
TRIGGER_NAME: トリガーの名前。
EVENTARC_TRIGGER_LOCATION: Eventarc トリガーのロケーション。一般に、Eventarc トリガーのロケーションは、イベントをモニタリングする Google Cloud リソースのロケーションと一致する必要があります。ほとんどの場合、関数も同じリージョンにデプロイする必要があります。詳細については、Eventarc のロケーションをご覧ください。
FUNCTION: デプロイする関数の名前。
REGION: 関数の Cloud Run リージョン。
PROJECT_NUMBER は、Google Cloud プロジェクト番号に置き換えます。Eventarc トリガーはサービス アカウントにリンクされ、関数を呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、関数を呼び出す権限が必要です。デフォルトでは、Cloud Run はデフォルトのコンピューティング サービス アカウントを使用します。
event-filters
フラグには、トリガーがモニタリングするイベント フィルタを指定します。event-filters
フィルタにすべて一致するイベントが関数の呼び出しをトリガーします。各トリガーには、サポートされているイベントタイプを指定する必要があります。作成後にイベント フィルタのタイプを変更することはできません。イベント フィルタのタイプを変更するには、新しいトリガーを作成して古いトリガーを削除する必要があります。(省略可)さらにフィルタを追加するには、--event-filters
フラグを繰り返し、サポートされているフィルタをATTRIBUTE=VALUE
の形式で指定します。
他のフィールドはそのまま使用します。
--event-filters=type=google.cloud.firestore.document.v1.written
は、google.cloud.firestore.document.v1.written
イベントタイプに従って、ドキュメントが作成、更新、削除されたとき関数がトリガーされるように指定します。--event-filters=database='(default)'
には Firebase データベースを指定します。デフォルトのデータベース名には(default)
を使用します。--event-filters-path-pattern=document='users/{username}'
は、関連する変更をモニタリングするドキュメントのパスパターンを指定します。このパスパターンは、users
コレクション内のすべてのドキュメントをモニタリングする必要があることを示しています。詳細については、パスパターンについてをご覧ください。
Hello Firestore 関数をテストする
Hello Firestore 関数をテストするには、Firestore データベースに users
というコレクションを設定します。
Google Cloud コンソールで、Firestore データベース ページに移動します。
[コレクションを開始] をクリックします。
コレクション ID として
users
を指定します。コレクションの最初のドキュメントの追加を開始するには、[最初のドキュメントの追加] で、自動生成されたドキュメント ID を使用します。
ドキュメントに少なくとも 1 つのフィールドを追加し、名前と値を指定します。たとえば、[フィールド名] に「
username
」、[フィールド値] に「rowan
」と入力します。完了したら [Save] をクリックします。
この操作により新しいドキュメントが作成され、関数がトリガーされます。
関数がトリガーされたことを確認するには、Google Cloud コンソールの Cloud Run の概要ページで関数のリンク名をクリックして、[サービスの詳細] ページを開きます。
[ログ] タブを選択して、次の文字列を探します。
Function triggered by change to: //firestore.googleapis.com/projects/your-project-id/databases/(default)'
例 2: Convert to Uppercase 関数
次の例では、ユーザーが追加した値を取得し、その場所にある文字列を大文字に変換して、大文字の文字列で置き換えます。
Node.js
protobufjs を使用して、イベントデータをデコードします。ソースに google.events.cloud.firestore.v1
data.proto
を含めます。
Python
Go
Java
C#
Convert to Uppercase 関数をデプロイする
Firestore データベースをまだ設定していない場合は、設定します。
任意のツールを使用して、手順のタブでクリックします。
コンソール
Google Cloud コンソールを使用して関数を作成するときに、関数にトリガーを追加することもできます。関数のトリガーを作成する手順は次のとおりです。
Google Cloud コンソールで、[Cloud Run] に移動します。
[関数を作成] をクリックし、関数の詳細を入力します。デプロイ時に関数を構成する方法については、関数をデプロイするをご覧ください。
[トリガー] セクションで [トリガーを追加] をクリックします。
[Firestore トリガー] を選択します。
[Eventarc トリガー] ペインで、トリガーの詳細を次のように変更します。
[トリガー名] フィールドにトリガーの名前を入力するか、デフォルトの名前を使用します。
リストからトリガーのタイプを選択して、次のいずれかのトリガータイプを指定します。
Google のソース: Pub/Sub、Cloud Storage、Firestore などの Google イベント プロバイダのトリガーを指定できます。
サードパーティ: Eventarc ソースを提供する Google 以外のプロバイダと統合できます。詳細については、Eventarc のサードパーティ イベントをご覧ください。
[イベント プロバイダ] リストから [Firestore] を選択し、関数をトリガーするイベントのタイプを提供するプロダクトを選択します。イベント プロバイダのリストについては、イベント プロバイダと宛先をご覧ください。
[イベントタイプ] リストから [type=google.cloud.firestore.document.v1.written] を選択します。トリガーの構成は、サポートされているイベントタイプによって異なります。詳細については、イベントタイプをご覧ください。
[フィルタ] セクションで、データベース、オペレーション、属性の値を選択するか、デフォルト値を使用します。
[リージョン] フィールドが有効になっている場合は、Eventarc トリガーのロケーションを選択します。一般に、Eventarc トリガーのロケーションは、イベントをモニタリングする Google Cloud リソースのロケーションと一致する必要があります。ほとんどの場合、Cloud Functions の関数を同じリージョンにデプロイする必要があります。Eventarc トリガーのロケーションの詳細については、Eventarc のロケーションについてをご覧ください。
[サービス アカウント] フィールドで、サービス アカウントを選択します。Eventarc トリガーはサービス アカウントにリンクされ、関数を呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、関数を呼び出す権限が必要です。デフォルトでは、Cloud Run は Compute Engine のデフォルトのサービス アカウントを使用します。
受信リクエストの送信先であるサービスの URL パスを指定することもできます。これは、トリガーのイベントの送信先である宛先サービスの相対パスです。例:
/
、/route
、route
、route/subroute
.
必須フィールドに値を入力したら、[トリガーを保存] をクリックします。
gcloud
gcloud CLI を使用して関数を作成する場合は、まず関数をdeployしてからトリガーを作成する必要があります。関数のトリガーを作成する手順は次のとおりです。
サンプルコードを含むディレクトリで次のコマンドを実行して、関数をデプロイします。
gcloud beta run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE_ID \ --region REGION
次のように置き換えます。
FUNCTION: デプロイする関数の名前。このパラメータは省略できますが、省略すると名前の入力を求められます。
FUNCTION_ENTRYPOINT: ソースコード内の関数のエントリ ポイント。これは、関数の実行時に Cloud Run が実行するコードです。このフラグには、ソースコード内に存在する関数名または完全修飾クラス名を指定する必要があります。
BASE_IMAGE_ID: 関数のベースイメージ環境。ベースイメージと各イメージに含まれるパッケージの詳細については、ランタイム ベースイメージをご覧ください。
REGION: 関数をデプロイする Google Cloud リージョン。例:
us-central1
次のコマンドを実行して、イベントをフィルタするトリガーを作成します。
gcloud eventarc triggers create TRIGGER_NAME \ --location=EVENTARC_TRIGGER_LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=REGION \ --event-filters=type=google.cloud.firestore.document.v1.written \ --event-filters=database='(default)' \ --event-data-content-type=application/protobuf \ --event-filters-path-pattern=document='messages/{pushId}' \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
次のように置き換えます。
TRIGGER_NAME: トリガーの名前。
EVENTARC_TRIGGER_LOCATION: Eventarc トリガーのロケーション。一般に、Eventarc トリガーのロケーションは、イベントをモニタリングする Google Cloud リソースのロケーションと一致する必要があります。ほとんどの場合、関数も同じリージョンにデプロイする必要があります。詳細については、Eventarc のロケーションをご覧ください。
FUNCTION: デプロイする関数の名前。
REGION: 関数の Cloud Run リージョン。
PROJECT_NUMBER は、Google Cloud プロジェクト番号に置き換えます。Eventarc トリガーはサービス アカウントにリンクされ、関数を呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、関数を呼び出す権限が必要です。デフォルトでは、Cloud Run はデフォルトのコンピューティング サービス アカウントを使用します。
event-filters
フラグには、トリガーがモニタリングするイベント フィルタを指定します。event-filters
フィルタにすべて一致するイベントが関数の呼び出しをトリガーします。各トリガーには、サポートされているイベントタイプを指定する必要があります。作成後にイベント フィルタのタイプを変更することはできません。イベント フィルタのタイプを変更するには、新しいトリガーを作成して古いトリガーを削除する必要があります。(省略可)さらにフィルタを追加するには、--event-filters
フラグを繰り返し、サポートされているフィルタをATTRIBUTE=VALUE
の形式で指定します。
他のフィールドはそのまま使用します。
--event-filters=type=google.cloud.firestore.document.v1.written
は、google.cloud.firestore.document.v1.written
イベントタイプに従って、ドキュメントが作成、更新、削除されたときに関数がトリガーされるように指定します。--event-filters=database='(default)'
には、Firestore データベースを指定します。デフォルトのデータベース名には(default)
を使用します。--event-filters-path-pattern=document='messages/{pushId}'
は、関連する変更をモニタリングするドキュメントのパスパターンを指定します。このパスパターンは、messages
コレクション内のすべてのドキュメントをモニタリングする必要があることを示しています。詳細については、パスパターンについてをご覧ください。
Convert to Uppercase 関数をテストする
デプロイした Convert to Uppercase 関数をテストするには、Firestore データベースに messages
というコレクションを設定します。
Google Cloud コンソールで、Firestore データベース ページに移動します。
[コレクションを開始] をクリックします。
コレクション ID として
messages
を指定します。コレクションの最初のドキュメントの追加を開始するには、[最初のドキュメントの追加] で、自動生成されたドキュメント ID を使用します。
デプロイされた関数をトリガーするには、フィールド名が
original
、フィールド値がminka
のドキュメントを追加します。ドキュメントを保存すると、値フィールドの小文字の単語が大文字に変換されます。
その後、フィールド値を編集して小文字を含めると、関数が再度トリガーされ、すべての小文字が大文字に変換されます。
関数の制限事項
- 順序は保証されません。短時間に複数の変更を行うと、予期しない順序で関数の呼び出しがトリガーされることがあります。
- イベントは必ず 1 回以上処理されますが、1 つのイベントで関数が複数回呼び出される場合があります。「正確に 1 回」のメカニズムに依存することは避け、べき等になるように関数を記述してください。
- トリガーは、単一のデータベースに関連付けられます。複数のデータベースに一致するトリガーは作成できません。
- データベースを削除しても、そのデータベースのトリガーは自動的に削除されません。トリガーはイベントの配信を停止しますが、トリガーを削除するまで存在し続けます。