テックまとめ

Cloud Functions

Cloud Functions

イベントとトリガー

イベントとは、データベースでのデータの変更、ストレージ システムへのファイルの追加、新しい仮想マシン インスタンスの作成など。
イベントは対応の有無にかかわらず発生する。イベントへの対応(レスポンス)は、トリガーを作成して行う。
トリガーは、いわば特定のイベントや一連のイベントに関心があることの宣言であり、関数をトリガーにバインドすると、イベント情報を取得してなんらかの対応をとることができる。

ユースケース

ユースケース 説明
データ処理 / ETL ファイルの作成、変更、削除などの Cloud Storage イベントをリッスン。画像処理、動画のコード変換、データの検証と変換、インターネット上の任意のサービスの呼び出しなどといった操作。
Webhook シンプルな HTTP トリガーによって、GitHub、Slack、Stripe などのサードパーティ システムをはじめ、HTTP リクエストを送信できるあらゆる場所で発生したイベントに応答。
軽量 API 軽量な疎結合のロジックを組み合わせることで、アプリケーションのビルドや拡張を迅速に実行。関数は、イベントでトリガーされるようにすることも、HTTP(S) で直接呼び出すことも。
モバイル バックエンド アプリ デベロッパー向けに Google が提供しているモバイル プラットフォームの Firebase を使用すればモバイル バックエンドを記述できる。これにより、Firebase Analytics、Firebase Realtime Database、Firebase Authentication、Firebase Storage からのイベントをリッスンして応答できる。
IoT デバイスの膨大なストリーミング データを Cloud Pub/Sub に取り込み、Cloud Functions を呼び出してそのデータを処理、変換、保存するといった操作を完全にサーバーレスな形で実現。

ユースケース

Cloud Pub/Sub トピックに関する Cloud Functions のイベントを扱う。( Google Cloud Pub/Sub: Google 規模のメッセージ サービス
イベント パラメータとコールバック パラメータについて詳しくは、 バックグラウンド関数 を確認。

# 関数コード用のディレクトリを作成
$ mkdir gcf_hello_world
$ cd gcf_hello_world

# index.js を作成し、編集
/**
* Pub/Sub でトリガーされるバックグラウンド Cloud Function 関数。
* この関数は index.js によってエクスポートされ、トリガー トピックが
* メッセージを受信すると実行されます。
*
* @param {object} data The event payload.
* @param {object} context The event metadata.
*/
exports.helloWorld = (data, context) => {
const pubSubMessage = data;
const name = pubSubMessage.data
    ? Buffer.from(pubSubMessage.data, 'base64').toString() : "Hello World";

console.log(`My Cloud Function: ${name}`);
};
# Cloud Storage バケット作成
$ gsutil mb -p [PROJECT_ID] gs://[BUCKET_NAME]
# gsutil mb -p qwiklabs-gcp-02-5fcdb48e7b6e gs://qwiklab-sample1234

次に新しい関数をデプロイするのだが、 --trigger-topic--trigger-bucket--trigger-http のいずれかを指定する必要がある。
ここでは、 --trigger-topichello_world を指定する。

$ gcloud functions deploy helloWorld \
  --stage-bucket qwiklab-sample1234 \
  --trigger-topic hello_world \
  --runtime nodejs8

# ステータスの確認
$ gcloud functions describe helloWorld

関数をデプロイしてそれがアクティブになっていることを確認したら、関数がイベントを検出してメッセージをクラウド ログに書き込むかどうかをテストする。

# 関数のメッセージテストを実行
$ DATA=$(printf 'Hello World!'|base64) && gcloud functions call helloWorld --data '{"data":"'$DATA'"}'
executionId: u4h75ec5oy6m

# ログを確認
$ gcloud functions logs read helloWorld
LEVEL  NAME        EXECUTION_ID  TIME_UTC                 LOG
D      helloWorld  u4h75ec5oy6m  2021-05-06 12:37:28.571  Function execution took 219 ms, finished with status: 'ok'
I      helloWorld  u4h75ec5oy6m  2021-05-06 12:37:28.546  My Cloud Function: Hello World!
D      helloWorld  u4h75ec5oy6m  2021-05-06 12:37:28.352  Function execution started