LoginSignup
1
1

More than 5 years have passed since last update.

[GCP]Cloud StorageのアップロードイベントをCloud Functionsへ通知するための流れをざっくり

Last updated at Posted at 2018-10-04

概要

Google Cloud Functions(以下、GCF)とGoogle Cloud Storage(GCS)を組み合わせて、サーバレスな関数を作る機会が合ったので手順を書く。
これによって、GCSにmp4をアップロードしたタイミングでGCFを起動しZencoderのAPIを通してHLSに変換したり応用した。

やりたかった事

  • GCSの特定バケットにアップロードされたイベントでGCFを起動する
  • GCFはbeta版のNode.js(version8)を使う
  • 環境変数をyaml形式のenvファイルに定義しGCFで使用する
    • env varはベータ版のようで下位互換なしで変更される可能性があるため注意。詳細はこちらに

前提

gcloudコマンドがインストールされている事。してない場合はここから

GCFの関数サンプル

適当なディレクトリを作成しnpm initして、エントリポイントとなるjsファイルを作成する。
例としてindex.jsとする。package.jsonの設定はnpm initでも後で修正するでも良い

index.js
'use strict';

exports.sampleHandler = (data, event) => {
  console.log('hello GCS upload event');
};
package.json
{
  "name": "sampleHandler",
  "version": "1.0.0",
  "description": "Google Cloud Functions Sample",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "private": true
}

デプロイするまでのコマンドフロー

gcloud componentであるbetaをインストールする

$ gcloud components update && gcloud components install beta

GCFへのデプロイする。runtimeにはnodejs8を指定する。(いずれ、Goも指定できるようになる)

gcloud beta functions deploy {FUNCTION_NAME} --region {REGION} --runtime nodejs8 --stage-bucket {GCS_SRC_STORAGE} --trigger-bucket={TARGET_GCS_BUCKET}  --env-vars-file={ENV_YAML}

コマンドオプション一覧

- {FUNCTION_NAME}
    - GCFのエントリポイントとなる関数名。例だとsampleHandler
- {REGION}
    - どのリージョンを使用するか
- {GCS_SRC_STORAGE}
    - GCFのソースコードを保存するGCSバケット
- {TARGET_GCS_BUCKET}
    - アップロードイベントを監視するGCSバケット
- {ENV_YAML}
    - 環境変数を定義したyamlフォーマットのファイル

終わり

gloud beta functionsコマンドの詳細は公式ドキュメントにて

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1