Google Cloud Functions (以下、GCF) で簡単な関数を作ってみました。
AWS Lambda の記事はわんさかあるのですが、 GCF の記事は多くなかったので関数をつくるまでをまとめていきます。
AWS Lambda に比べると機能は少ないですが、 GCF だとHTTPトリガーが爆速で作れたので好印象です。 (AWS は柔軟な分 API Gateway でごちゃごちゃと設定を行う必要があります)
Google Cloud Functions
GCP のコンソールにアクセスして、メニューから Cloud Functions を選択します。
初回のアクセスでは Cloud Functions の API が有効になっていないので有効化します。
WEBコンソールからつくってみる
下記のように関数情報を入力して作成を押下します。
作成が完了すると GCF 一覧に作成した関数が表示されます。
関数詳細からは先に設定した情報、ソース更新、テストなどが実施できます。 トリガーに表示されているURLが関数のエントリーポイントになります。尚、デプロイ後にトリガーは変更できないので注意が必要です。
HTTPトリガーだとこれだけでエントリーポイント作成までが完了しました。
スポンサーリンク
gcloudコマンドラインツールでつくってみる
Googleのクイックスタートを参考に上記WEBコンソールから作成したものと同じ関数を作ってみます。
Quickstart: Using the gcloud Command-Line Tool | Cloud Functions Documentation | Google Cloud
まずは、作成する関数のディレクトリを作成します。
今回は librarian と名前で作成しました。ディレクトリの中身は下記の通りです。
$ librarian ls index.js package.json
ファイルの中身はWEBコンソールから作成されたデフォルトと同じものを使用してみます。
index.js
/** * Responds to any HTTP request that can provide a "message" field in the body. * * @param {!Object} req Cloud Function request context. * @param {!Object} res Cloud Function response context. */ exports.borrow = (req, res) => { // Example input: {"message": "Hello!"} if (req.body.message === undefined) { // This is an error case, as "message" is required. res.status(400).send('No message defined!'); } else { // Everything is okay. console.log(req.body.message); res.status(200).send('Success: ' + req.body.message); } };
package.json
{ "name": "sample-http", "version": "0.0.1" }
deploy してみる
gcloud beta functions deploy
を使用します。deploy の詳細は下記ページに載っています。
gcloud beta functions deploy | Cloud SDK | Google Cloud
カレントディレクトリのファイルが deploy されるのですが、 .git
ディレクトリが存在した場合、自動的に除外してくれます。( .gcloudignore
を作成してくれます)
$ gcloud beta functions deploy librarian --trigger-http --entry-point=borrow --memory=128MB --timeout=5 Created .gcloudignore file. See `gcloud topic gcloudignore` for details. Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 128 entryPoint: borrow httpsTrigger: url: https://***.cloudfunctions.net/librarian labels: deployment-tool: cli-gcloud name: projects/***/locations/us-central1/functions/librarian serviceAccountEmail: *** sourceUploadUrl: https://storage.googleapis.com/*** status: ACTIVE timeout: 5s updateTime: '2018-05-03T08:12:21Z' versionId: '2'
これで deploy が完了しました。
発行されたエントリーポイントにアクセスすると動作が確認できます。
尚、今回は entry-point, memory, timeout を指定してみました。
versionId: '2'
になっている理由は、WEBコンソール上から作成した関数を削除して、同名の関数を作成したからだと思われます。
callしてみる
gcloud beta functions call
でコールすることも可能です。
gcloud beta functions call | Cloud SDK | Google Cloud
$ gcloud beta functions call librarian --data='{"message": "Hello!"}' executionId: 4tc45ez0xset result: 'Success: Hello!'
所感
AWS Lambda と比べると以下の印象を受けました。
- HTTPトリガーをつくるのが爆速。
- シンプルで使いやすいが、できることがかなり限定されている。
- AWS Lambda の初期の頃より deploy がとても簡単。
まだベータということもあり使用できる言語(Node.js)、リージョン(us-central1)も限られているので、今後に期待していきましょう。