このガイドでは、指定したコレクション内のドキュメントに変更を加えたときにトリガーされる関数の例を示します。
始める前に
このガイドのサンプルコードを実行する前に、次の作業を行う必要があります。
例
次の例は、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 リソースのロケーションと一致している必要があります。ほとんどの場合に、関数を同じリージョンにデプロイすることも必要です。Eventarc トリガーのロケーションの詳細については、Eventarc のロケーションについてをご覧ください。 
- [サービス アカウント] フィールドで、サービス アカウントを選択します。Eventarc トリガーはサービス アカウントにリンクされ、関数を呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、関数を呼び出す権限が必要です。デフォルトでは、Cloud Run は Compute Engine のデフォルトのサービス アカウントを使用します。 
- 受信リクエストの送信先であるサービスの URL パスを指定することもできます。これは、トリガーのイベントの送信先である宛先サービスの相対パスです。例: - /、- /route、- route、- route/subroute.
 
- 必須フィールドに値を入力したら、[トリガーを保存] をクリックします。 
gcloud
gcloud CLI を使用して関数を作成する場合は、まず関数をデプロイしてからトリガーを作成する必要があります。関数のトリガーを作成する手順は次のとおりです。
- サンプルコードのあるディレクトリで次のコマンドを実行して、関数をデプロイします。 - gcloud 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リージョン。例: - europe-west1
 
- 次のコマンドを実行して、イベントをフィルタするトリガーを作成します。 - 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フラグで指定されたすべての条件を満たした場合にのみトリガーされます。各トリガーには、Firestore への新しいドキュメントの書き込みや Cloud Storage へのファイルのアップロードなど、サポートされているイベントタイプを指定する- event-filtersフラグが必要です。作成後にイベント フィルタの種類を変更することはできません。イベント フィルタの種類を変更するには、新しいトリガーを作成して古いトリガーを削除する必要があります。(省略可)さらにフィルタを追加するには、- --event-filtersフラグを繰り返し、サポートされているフィルタを- ATTRIBUTE=VALUEの形式で指定します。
Terraform
Cloud Run 関数の Eventarc トリガーを作成するには、Terraform を使用してトリガーを作成するをご覧ください。
他のフィールドはそのまま使用します。
- --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」と入力します。
- 完了したら [保存] をクリックします。 - この操作により新しいドキュメントが作成され、関数がトリガーされます。 
- 関数がトリガーされたことを確認するには、 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 リソースのロケーションと一致している必要があります。ほとんどの場合に、関数を同じリージョンにデプロイすることも必要です。Eventarc トリガーのロケーションの詳細については、Eventarc のロケーションについてをご覧ください。 
- [サービス アカウント] フィールドで、サービス アカウントを選択します。Eventarc トリガーはサービス アカウントにリンクされ、関数を呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、関数を呼び出す権限が必要です。デフォルトでは、Cloud Run は Compute Engine のデフォルトのサービス アカウントを使用します。 
- 受信リクエストの送信先であるサービスの URL パスを指定することもできます。これは、トリガーのイベントの送信先である宛先サービスの相対パスです。例: - /、- /route、- route、- route/subroute.
 
- 必須フィールドに値を入力したら、[トリガーを保存] をクリックします。 
gcloud
gcloud CLI を使用して関数を作成する場合は、まず関数をデプロイしてからトリガーを作成する必要があります。関数のトリガーを作成する手順は次のとおりです。
- サンプルコードのあるディレクトリで次のコマンドを実行して、関数をデプロイします。 - gcloud 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リージョン。例: - europe-west1
 
- 次のコマンドを実行して、イベントをフィルタするトリガーを作成します。 - 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フラグで指定されたすべての条件を満たした場合にのみトリガーされます。各トリガーには、Firestore への新しいドキュメントの書き込みや Cloud Storage へのファイルのアップロードなど、サポートされているイベントタイプを指定する- event-filtersフラグが必要です。作成後にイベント フィルタの種類を変更することはできません。イベント フィルタの種類を変更するには、新しいトリガーを作成して古いトリガーを削除する必要があります。(省略可)さらにフィルタを追加するには、- --event-filtersフラグを繰り返し、サポートされているフィルタを- ATTRIBUTE=VALUEの形式で指定します。
Terraform
Cloud Run 関数の Eventarc トリガーを作成するには、Terraform を使用してトリガーを作成するをご覧ください。
他のフィールドはそのまま使用します。
- --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 回」のメカニズムに依存することは避け、べき等になるように関数を記述してください。
- セッションは、単一のデータベースに関連付けられます。複数のデータベースに一致するトリガーは作成できません。
- データベースを削除しても、そのデータベースのトリガーは自動的に削除されません。トリガーはイベントの配信を停止しますが、トリガーを削除するまで存在し続けます。