Google Cloud Functionsを試す

2017-11-29

Google Cloud Funtions(GCF)を試してみる。まずは Quickstart 通りにやってみる。

‘Before you begin’ の途中までは GUI でぽちぽちしていく。

Google Cloud SDK のインストール

Google Cloud SDK が必要みたいなのでインストールする。ここのページのダウンロードリンクから tar.gz をダウンロード。

全然使わないので、tar のオプションが覚えられない。

$ tar zxvf google-cloud-sdk-170.0.1-darwin-x86_64.tar.gz
# インストールスクリプト実行
$ ./google-cloud-sdk/install.sh

こういうのって毎回どこに置くのか悩む。。。どこに置くのが正解なんだろう。今回はとりあえず /usr/local/etc とかに置いておこう。

$ mv google-cloud-sdk /usr/local/etc
# /usr/local/bin/gcloud に bin/gcloud のシンボリックリンクを貼っておく
$ ln -s /usr/local/etc/google-cloud-sdk/bin/gcloud /usr/local/bin/gcloud
# init
$ gcloud init

質問は適当に答える。

これで gcloud コマンドは終わったので、Quickstart に戻ってこれる。

$ gcloud components update beta && gcloud components install

これでセットアップはおしまいっぽい。

Cloud Storage bucket を作る

ソースコードは Cloud Storage に置くらしいのでバケットを作成する。バケットは gsutil コマンドが必要らしいので、これもシンボリックリンクを貼る。

最低限しか使う予定ないから、gcloud コマンドしか使わないのかと思ってたけど、他にも使うならパス通しておいてもよかったかも。まぁいいか。

$ ln -s /usr/local/etc/google-cloud-sdk/bin/gsutil /usr/local/bin/gsutil
$ gsutil mb -p [PROJECT_ID] gs://[BUCKET_NAME]

[PROJECT_ID]は使用するプロジェクトのID、[BUCKET_NAME]は適当。

この Quickstart はトリガーが Pub/Sub のやつでデプロイしてるみたい。今回は HTTP をトリガーにしたいので、ドキュメント見てたら、HTTP 用のチュートリアルがあるではないか!

HTTP Tutorial  |  Cloud Functions Documentation  |  Google Cloud Platform

これのコード書くところとデプロイのところからやりますか。

サンプルコードを書く

とりあえず HelloWorld をやりたいので、チュートリアルと同じコードを書く。

/**
 * HTTP Cloud Function.
 *
 * @param {Object} req Cloud Function request context.
 * @param {Object} res Cloud Function response context.
 */
exports.helloGET = function helloGET (req, res) {
  res.send('Hello World!');
};

ローカルで試す

Goolge Cloud Functions Emulator でローカルで試せるみたいなので使ってみる。

$ mkdir ~/gcf_http
$ cd ~/gcf_http
$ yarn init
$ yarn add @google-cloud/functions-emulator -D

これで準備は完了。

# start
$ $(yarn bin)/functions start

# deploy
$ $(yarn bin)/functions deploy helloGET --trigger-http

# call
$ $(yarn bin)/functions call helloGET
#=> Warning: You're using Node.js v8.9.1 but Google Cloud Functions only supports v6.11.1.
#=> ExecutionId: 1f45b802-a339-4b74-85b4-4f9d3e4a729c
#=> Result: Hello World!

動いてるけど、GCF は v6.11.1 なのか。。。node のバージョンマネージャー的なもの使ってなかったので、後で何か入れとこう。

ログも見れるみたい。

$ $(yarn bin)/functions logs read

止めとく。

$ $(yarn bin)/functions stop

デプロイ

下記のコマンドでデプロイする。

$ gcloud beta functions deploy helloGET --stage-bucket [YOUR_STAGING_BUCKET_NAME] --trigger-http

デプロイしたら URL とか色々な情報が返ってくる。試しに叩いてみる。

$ curl "https://[YOUR_REGION]-[YOUR_PROJECT_ID].cloudfunctions.net/helloGET"
#=> Hello World!

できた!やっと hello world が終わった。

ちなみに GitHub とかにあるものからもデプロイできるみたい。

Deploying from Source Control