概要
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コマンドの詳細は公式ドキュメントにて