Cloud Storage のチュートリアル

このシンプルなチュートリアルでは、Cloud Storage トリガーを使用したバックグラウンド Cloud Function を書き込み、デプロイ、トリガーする方法について説明します。

目標

料金

このチュートリアルでは、以下を含む Cloud Platform の有料コンポーネントを使用します。

  • Google Cloud Functions
  • Google Cloud Storage

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。

Cloud Platform を初めて使用する方は、無料トライアルをご利用いただける場合があります。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

  3. プロジェクトに対して課金が有効になっていることを確認します。

    課金を有効にする方法について

  4. Cloud Functions と Cloud Storage API を有効にします。

    APIを有効にする

  5. Cloud SDK をインストールして初期化します。
  6. gcloud コンポーネントを更新し、インストールします。
    gcloud components update &&
    gcloud components install beta
  7. Node.js 開発用に環境を準備します。

    セットアップ ガイドに移動

アプリケーションの準備

  1. テストファイルをアップロードする Cloud Storage バケットを作成します。ここで、[YOUR_TRIGGER_BUCKET_NAME] はグローバルで一意のバケット名です。

    gsutil mb gs://[YOUR_TRIGGER_BUCKET_NAME]
    

  2. アプリケーション コード用のディレクトリをローカル システム上に作成します。

    Linux / Mac OS X

    ディレクトリを作成します。

    mkdir ~/gcf_gcs

    作成したディレクトリに移動します。

    cd ~/gcf_gcs

    Windows(CMD)

    ディレクトリを作成します。

    mkdir %HOMEDRIVE%%HOMEPATH%\gcf_gcs

    作成したディレクトリに移動します。

    cd %HOMEDRIVE%%HOMEPATH%\gcf_gcs

関数のデプロイとトリガー

現在、Cloud Storage の関数は Cloud Storage からの Pub/Sub 通知に基づいており、以下に挙げる類似のイベントタイプに対応しています。

以降のセクションでは、上記の各イベントタイプについて、関数をデプロイしてトリガーする方法を説明します。

オブジェクトのファイナライズ

オブジェクト ファイナライズ イベントは、Cloud Storage オブジェクトの「書き込み」が正常にファイナライズされた時点でトリガーされます。つまり、新しいオブジェクトの作成または既存のオブジェクトの上書きによって、このイベントがトリガーされます。このトリガーにより、アーカイブとメタデータの更新オペレーションは無視されます。

オブジェクトのファイナライズ: 関数のデプロイ

この関数をデプロイするには、以下の内容で gcf_gcs ディレクトリ内に index.js ファイルを作成します。

Node.js

/**
 * Generic background Cloud Function to be triggered by Cloud Storage.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.helloGCSGeneric = (event, callback) => {
  const file = event.data;
  const context = event.context;

  console.log(`Event ${context.eventId}`);
  console.log(`  Event Type: ${context.eventType}`);
  console.log(`  Bucket: ${file.bucket}`);
  console.log(`  File: ${file.name}`);
  console.log(`  Metageneration: ${file.metageneration}`);
  console.log(`  Created: ${file.timeCreated}`);
  console.log(`  Updated: ${file.updated}`);

  callback();
};

新しいオブジェクトがバケット内でファイナライズされると、モジュールによって helloGCSGeneric 関数がエクスポートされ、実行されます。

次に、gcf_gcs ディレクトリで次のコマンドを実行します。

gcloud beta functions deploy helloGCSGeneric --trigger-resource [YOUR_TRIGGER_BUCKET_NAME] --trigger-event google.storage.object.finalize

[YOUR_TRIGGER_BUCKET_NAME] は、この関数をトリガーする Cloud Storage バケットの名前です。

オブジェクトのファイナライズ: 関数のトリガー

関数をトリガーするには、以下の手順に従います。

  1. gcf_gcs ディレクトリ内に空の gcf-test.txt ファイルを作成します。

  2. 関数をトリガーするために、Cloud Storage にファイルをアップロードします。

    gsutil cp gcf-test.txt gs://[YOUR_TRIGGER_BUCKET_NAME]
    

    ここで [YOUR_TRIGGER_BUCKET_NAME] は、テストファイルのアップロード場所となる Cloud Storage バケットの名前です。

  3. 実行が完了したことをログで確認します。

    gcloud beta functions logs read --limit 50
    

オブジェクトの削除

オブジェクト削除イベントは、バージョニング非対応バケットには特に便利です。このイベントがトリガーされるのは、オブジェクトの古いバージョンが削除された時点です。さらに、オブジェクトが上書きされた場合にもトリガーされます。また、オブジェクト削除トリガーをバージョニング対応バケットで使用することもできます。この場合、オブジェクトのバージョンが完全に削除された時点でトリガーされます。

オブジェクトの削除: 関数のデプロイ

関数をデプロイするには、以下の手順に従います。

  1. ファイナライズの例と同じ helloGCSGeneric 関数で、gcf_gcs ディレクトリ内に index.js ファイルを作成します。この関数は、オブジェクトがバケットから削除されると実行されます。

  2. gcf_gcs ディレクトリで次のコマンドを実行します。

    gcloud beta functions deploy helloGCSGeneric --trigger-resource [YOUR_TRIGGER_BUCKET_NAME] --trigger-event google.storage.object.delete
    

    [YOUR_TRIGGER_BUCKET_NAME] は、この関数をトリガーする Cloud Storage バケットの名前です。

オブジェクトの削除: 関数のトリガー

関数をトリガーするには、以下の手順に従います。

  1. gcf_gcs ディレクトリ内に gcf-test.txt という名前の空のファイルを作成します。

  2. バケットがバージョニング対応でないことを確認します。

    gsutil versioning set off gs://[YOUR_TRIGGER_BUCKET_NAME]
    
  3. 関数をトリガーするために、Cloud Storage にファイルをアップロードします。

    gsutil cp gcf-test.txt gs://[YOUR_TRIGGER_BUCKET_NAME]
    

    ここで [YOUR_TRIGGER_BUCKET_NAME] は、テストファイルのアップロード場所となる Cloud Storage バケットの名前です。この時点ではまだ関数は実行されません。

  4. ファイルを削除します。

    gsutil rm gs://[YOUR_TRIGGER_BUCKET_NAME]/gcf-test.txt
    
  5. 実行が完了したことをログで確認します。

    gcloud beta functions logs read --limit 50
    

関数の実行が完了するまでに時間がかかる場合があることに注意してください。

オブジェクトのアーカイブ

オブジェクト アーカイブ イベントは、バージョニング対応バケットでのみ使用できます。このイベントがトリガーされるのは、オブジェクトの古いバージョンがアーカイブされた時点です。つまり、オブジェクトが上書きまたは削除されると、アーカイブ イベントがトリガーされます。

オブジェクトのアーカイブ: 関数のデプロイ

関数をデプロイするには、以下の手順に従います。

  1. ファイナライズの例と同じ helloGCSGeneric 関数で、gcf_gcs ディレクトリ内に index.js ファイルを作成します。この関数は、オブジェクトがアーカイブされると実行されます。

  2. gcf_gcs ディレクトリで次のコマンドを実行します。

    gcloud beta functions deploy helloGCSGeneric --trigger-resource [YOUR_TRIGGER_BUCKET_NAME] --trigger-event google.storage.object.archive
    

    [YOUR_TRIGGER_BUCKET_NAME] は、この関数をトリガーする Cloud Storage バケットの名前です。

オブジェクトのアーカイブ: 関数のトリガー

関数をトリガーするには、以下の手順に従います。

  1. gcf_gcs ディレクトリ内に空の gcf-test.txt ファイルを作成します。

  2. バケットのバージョニングが有効になっていることを確認します。

    gsutil versioning set on gs://[YOUR_TRIGGER_BUCKET_NAME]
    
  3. 関数をトリガーするために、Cloud Storage にファイルをアップロードします。

    gsutil cp gcf-test.txt gs://[YOUR_TRIGGER_BUCKET_NAME]
    

    ここで [YOUR_TRIGGER_BUCKET_NAME] は、テストファイルのアップロード場所となる Cloud Storage バケットの名前です。この時点では関数はまだ実行されないはずです。

  4. ファイルをアーカイブします。

    gsutil rm gs://[YOUR_TRIGGER_BUCKET_NAME]/gcf-test.txt
    
  5. 実行が完了したことをログで確認します。

    gcloud beta functions logs read --limit 50
    

オブジェクト メタデータの更新

メタデータ更新イベントは、既存のオブジェクトのメタデータが更新された時点でトリガーされます。

オブジェクト メタデータの更新: 関数のデプロイ

関数をデプロイするには、以下の手順に従います。

  1. ファイナライズの例と同じ helloGCSGeneric 関数で、gcf_gcs ディレクトリ内に index.js ファイルを作成します。この関数は、オブジェクトのメタデータが変更されると実行されます。

  2. gcf_gcs ディレクトリで次のコマンドを実行します。

    gcloud beta functions deploy helloGCSGeneric --trigger-resource [YOUR_TRIGGER_BUCKET_NAME] --trigger-event google.storage.object.metadataUpdate
    

    [YOUR_TRIGGER_BUCKET_NAME] は、この関数をトリガーする Cloud Storage バケットの名前です。

オブジェクト メタデータの更新: 関数のトリガー

関数をトリガーするには、以下の手順に従います。

  1. gcf_gcs ディレクトリ内に空の gcf-test.txt ファイルを作成します。

  2. バケットがバージョニング対応でないことを確認します。

    gsutil versioning set off gs://[YOUR_TRIGGER_BUCKET_NAME]
    
  3. 関数をトリガーするために、Cloud Storage にファイルをアップロードします。

    gsutil cp gcf-test.txt gs://[YOUR_TRIGGER_BUCKET_NAME]
    

    ここで [YOUR_TRIGGER_BUCKET_NAME] は、テストファイルのアップロード場所となる Cloud Storage バケットの名前です。この時点では関数はまだ実行されないはずです。

  4. ファイルのメタデータを更新します。

    gsutil -m setmeta -h "Content-Type:text/plain" gs://[YOUR_TRIGGER_BUCKET_NAME]/gcf-test.txt
    
  5. 実行が完了したことをログで確認します。

    gcloud beta functions logs read --limit 50
    

クリーンアップ

このチュートリアルで使用するリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除する手順は次のとおりです。

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

Cloud Functions の削除

Cloud Functions を削除しても、Cloud Storage に保存されたリソースは削除されません。

Cloud Function を削除するには、次のコマンドを実行します。

gcloud beta functions delete [NAME_OF_FUNCTION]

ここで、[NAME_OF_FUNCTION] は削除する関数の名前です。

また、Google Cloud Platform Console から Cloud Functions を削除することもできます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Functions のドキュメント