このシンプルなチュートリアルでは、Cloud Storage イベントに応答する Cloud Storage トリガーを使用したイベント ドリブンの Cloud Run functions を作成、デプロイ、トリガーする方法について説明します。
Cloud Storage 自体を使用したコードサンプルについては、Google Cloud のサンプル ブラウザをご覧ください。
目標
- イベント ドリブンの Cloud Run 関数を作成してデプロイする。
- Cloud Storage にファイルをアップロードして関数をトリガーする。
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
- Cloud Run functions
- Cloud Storage
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Storage, and Eventarc APIs.
-
Install the Google Cloud CLI.
-
外部 ID プロバイダ(IdP)を使用している場合は、まずフェデレーション ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Storage, and Eventarc APIs.
-
Install the Google Cloud CLI.
-
外部 ID プロバイダ(IdP)を使用している場合は、まずフェデレーション ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init
-
開発環境を準備します。
Node.js
Python
Go
Java
Ruby
Cloud Storage バケットを作成しテストファイルをアップロードします。ここで、
YOUR_TRIGGER_BUCKET_NAME
はグローバルに固有のバケット名となります。gcloud storage buckets create gs://YOUR_TRIGGER_BUCKET_NAME
ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Cloud Run functions のサンプルコードが含まれているディレクトリに移動します。
Node.js
cd nodejs-docs-samples/functions/helloworld/
Python
cd python-docs-samples/functions/helloworld/
Go
cd golang-samples/functions/helloworld/
Java
cd java-docs-samples/functions/helloworld/hello-gcs/
Ruby
cd ruby-docs-samples/functions/helloworld/storage/
サンプルコードがあるディレクトリに空の
gcf-test.txt
ファイルを作成します。関数をトリガーするために、Cloud Storage にファイルをアップロードします。
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
YOUR_TRIGGER_BUCKET_NAME
は、テストファイルをアップロードする Cloud Storage バケットの名前です。実行が完了したことをログで確認します。
gcloud functions logs read --limit 50
サンプルコードがあるディレクトリに空の
gcf-test.txt
ファイルを作成します。バケットがバージョニング対応でないことを確認します。
gcloud storage buckets update gs://YOUR_TRIGGER_BUCKET_NAME --no-versioning
Cloud Storage にファイルをアップロードします。
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
YOUR_TRIGGER_BUCKET_NAME
は、テストファイルをアップロードする Cloud Storage バケットの名前です。この時点ではまだ関数は実行されません。ファイルを削除して関数をトリガーします。
gcloud storage rm gs://YOUR_TRIGGER_BUCKET_NAME/gcf-test.txt
実行が完了したことをログで確認します。
gcloud functions logs read --limit 50
サンプルコードがあるディレクトリに空の
gcf-test.txt
ファイルを作成します。バケットのバージョニングが有効になっていることを確認します。
gcloud storage buckets update gs://YOUR_TRIGGER_BUCKET_NAME --versioning
Cloud Storage にファイルをアップロードします。
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
YOUR_TRIGGER_BUCKET_NAME
は、テストファイルをアップロードする Cloud Storage バケットの名前です。この時点ではまだ関数は実行されません。ファイルをアーカイブして関数をトリガーします。
gcloud storage rm gs://YOUR_TRIGGER_BUCKET_NAME/gcf-test.txt
実行が完了したことをログで確認します。
gcloud functions logs read --limit 50
サンプルコードがあるディレクトリに空の
gcf-test.txt
ファイルを作成します。バケットがバージョニング対応でないことを確認します。
gcloud storage buckets update gs://YOUR_TRIGGER_BUCKET_NAME --no-versioning
Cloud Storage にファイルをアップロードします。
gcloud storage cp gcf-test.txt gs://YOUR_TRIGGER_BUCKET_NAME
YOUR_TRIGGER_BUCKET_NAME
は、テストファイルをアップロードする Cloud Storage バケットの名前です。この時点ではまだ関数は実行されません。ファイルのメタデータを更新します。
gcloud storage objects update gs://YOUR_TRIGGER_BUCKET_NAME/gcf-test.txt --content-type=text/plain
実行が完了したことをログで確認します。
gcloud functions logs read --limit 50
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
gcloud CLI がすでにインストールされている場合は、次のコマンドを実行して更新します。
gcloud components update
アプリケーションの準備
関数のデプロイとトリガー
Cloud Storage の関数は Cloud Storage からの Pub/Sub 通知に基づいており、以下に挙げる類似のイベントタイプに対応しています。
以降のセクションでは、上記の各イベントタイプについて、関数をデプロイしてトリガーする方法を説明します。
オブジェクトのファイナライズ
オブジェクト ファイナライズ イベントは、Cloud Storage オブジェクトの「書き込み」が正常にファイナライズされた時点でトリガーされます。つまり、新しいオブジェクトの作成または既存のオブジェクトの上書きによって、このイベントがトリガーされます。このトリガーにより、アーカイブとメタデータの更新オペレーションは無視されます。
オブジェクトのファイナライズ: 関数のデプロイ
Cloud Storage イベントを処理するサンプル関数を見てみましょう。
Node.js
Python
Go
Java
Ruby
関数をデプロイするには、サンプルコードがあるディレクトリで次のコマンドを実行します。
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs20 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
サポートされている Node.js バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
サポートされている Python バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Go
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
サポートされている Go バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
サポートされている Java バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Ruby
gcloud functions deploy hello_gcs --runtime ruby33 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.finalize
サポートされている Ruby バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
YOUR_TRIGGER_BUCKET_NAME
は、関数をトリガーする Cloud Storage バケットの名前です。
オブジェクトのファイナライズ: 関数のトリガー
関数をトリガーするには、以下の手順に従います。
オブジェクトの削除
オブジェクト削除イベントは、オブジェクトが削除(復元可能)になったときにトリガーされます。これは、オブジェクトのバージョニングが有効になっていないバケットでオブジェクトが上書きまたは削除された場合に発生します。世代番号を指定してオブジェクトを削除した場合も、オブジェクトは削除済み(復元可能)になります。
オブジェクトの削除: 関数のデプロイ
ファイナライズの例と同じサンプルコードを使用して、トリガー イベントとしてオブジェクトの削除を行う関数をデプロイします。サンプルコードがあるディレクトリで次のコマンドを実行します。
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs20 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
サポートされている Node.js バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
サポートされている Python バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Go
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
サポートされている Go バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
サポートされている Java バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Ruby
gcloud functions deploy hello_gcs --runtime ruby33 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.delete
サポートされている Ruby バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
YOUR_TRIGGER_BUCKET_NAME
は、関数をトリガーする Cloud Storage バケットの名前です。
オブジェクトの削除: 関数のトリガー
関数をトリガーするには、以下の手順に従います。
関数の実行が完了するまでに時間がかかる場合があることに注意してください。
オブジェクトのアーカイブ
オブジェクト アーカイブ イベントは、オブジェクトのライブ バージョンが非現行バージョンになったときにトリガーされます。これは、オブジェクトのバージョニングが有効になっているバケットでオブジェクトが上書きまたは削除された場合に発生します。
オブジェクトのアーカイブ: 関数のデプロイ
ファイナライズの例と同じサンプルコードを使用して、トリガー イベントとしてオブジェクトのアーカイブを行う関数をデプロイします。サンプルコードがあるディレクトリで次のコマンドを実行します。
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs20 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
サポートされている Node.js バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
サポートされている Python バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Go
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
サポートされている Go バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
サポートされている Java バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Ruby
gcloud functions deploy hello_gcs --runtime ruby33 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.archive
サポートされている Ruby バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
YOUR_TRIGGER_BUCKET_NAME
は、関数をトリガーする Cloud Storage バケットの名前です。
オブジェクトのアーカイブ: 関数のトリガー
関数をトリガーするには、以下の手順に従います。
オブジェクト メタデータの更新
メタデータ更新イベントは、既存のオブジェクトのメタデータが更新された時点でトリガーされます。
オブジェクト メタデータの更新: 関数のデプロイ
ファイナライズの例と同じサンプルコードを使用して、トリガー イベントとしてメタデータの更新を行う関数をデプロイします。サンプルコードがあるディレクトリで次のコマンドを実行します。
Node.js
gcloud functions deploy helloGCS \ --runtime nodejs20 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
サポートされている Node.js バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Python
gcloud functions deploy hello_gcs \ --runtime python312 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
サポートされている Python バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Go
gcloud functions deploy HelloGCS \ --runtime go121 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
サポートされている Go バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Java
gcloud functions deploy java-gcs-function \ --entry-point functions.HelloGcs \ --runtime java17 \ --memory 512MB \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
サポートされている Java バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Ruby
gcloud functions deploy hello_gcs --runtime ruby33 \
--trigger-resource YOUR_TRIGGER_BUCKET_NAME \
--trigger-event google.storage.object.metadataUpdate
サポートされている Ruby バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
YOUR_TRIGGER_BUCKET_NAME
は、関数をトリガーする Cloud Storage バケットの名前です。
オブジェクト メタデータの更新: 関数のトリガー
関数をトリガーするには、以下の手順に従います。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金されないようにする最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
関数の削除
Cloud Run functions を削除しても、Cloud Storage に保存されたリソースは削除されません。
このチュートリアルで作成した関数を削除するには、次のコマンドを実行します。
Node.js
gcloud functions delete helloGCS
Python
gcloud functions delete hello_gcs
Go
gcloud functions delete HelloGCS
Java
gcloud functions delete java-gcs-function
Ruby
gcloud functions delete hello_gcs
Cloud Run functions の関数は Google Cloud コンソールで削除することもできます。