HTTP トリガー

Cloud Functions は、POSTPUTGETDELETEOPTIONS の各 HTTP メソッドを使用した HTTP リクエストによって呼び出すことができます。関数の HTTP エンドポイントを作成するには、関数のデプロイ時にトリガータイプとして --trigger-http を指定します。呼び出し元の観点からは、HTTP 呼び出しは同期的です。つまり、関数の実行結果は、HTTP リクエストに対するレスポンスとして返されます。

たとえば、次の gcloud コマンドは HTTP リクエストをトリガーする Node.js 8 ランタイムに関数をデプロイします。

gcloud functions deploy FUNCTION_NAME --runtime nodejs8 --trigger-http

HTTP 関数を呼び出す場合、一般的に利用可能な cURL コマンドライン ユーティリティも使用できます。以下の cURL コマンドは、デプロイされた HTTP 関数の URL に対し、POST リクエストを実行してデータを渡します。

curl -X POST "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME" -H "Content-Type:application/json" --data '{"name":"Keyboard Cat"}'

ここで

  • YOUR_REGION は、関数がデプロイされるリージョンです。
  • YOUR_PROJECT_ID は、Google Cloud Platform のプロジェクト ID です。
  • FUNCTION_NAME は、デプロイした HTTP 関数の名前です。

HTTP 関数のトリガー URL は、関数のデプロイ後に確認できます。また、gcloud functions describe コマンドを使用すると、いつでもクエリで取得できます。

gcloud ツールを使用すると、HTTP 関数を直接トリガーできます。次のコマンドは関数を呼び出し、HTTP POST リクエストの本文に一部のデータを送信します。

gcloud functions call FUNCTION_NAME --data '{"name":"Keyboard Cat"}'

コードサンプル

Node.js

const escapeHtml = require('escape-html');

/**
 * HTTP Cloud Function.
 *
 * @param {Object} req Cloud Function request context.
 *                     More info: https://expressjs.com/en/api.html#req
 * @param {Object} res Cloud Function response context.
 *                     More info: https://expressjs.com/en/api.html#res
 */
exports.helloHttp = (req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
};

Python

from flask import escape

def hello_http(request):
    """HTTP Cloud Function.
    Args:
        request (flask.Request): The request object.
        <http://flask.pocoo.org/docs/1.0/api/#flask.Request>
    Returns:
        The response text, or any set of values that can be turned into a
        Response object using `make_response`
        <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>.
    """
    request_json = request.get_json(silent=True)
    request_args = request.args

    if request_json and 'name' in request_json:
        name = request_json['name']
    elif request_args and 'name' in request_args:
        name = request_args['name']
    else:
        name = 'World'
    return 'Hello {}!'.format(escape(name))

Go


// Package helloworld provides a set of Cloud Functions samples.
package helloworld

import (
	"encoding/json"
	"fmt"
	"html"
	"net/http"
)

// HelloHTTP is an HTTP Cloud Function with a request parameter.
func HelloHTTP(w http.ResponseWriter, r *http.Request) {
	var d struct {
		Name string `json:"name"`
	}
	if err := json.NewDecoder(r.Body).Decode(&d); err != nil {
		fmt.Fprint(w, "Hello, World!")
		return
	}
	if d.Name == "" {
		fmt.Fprint(w, "Hello, World!")
		return
	}
	fmt.Fprintf(w, "Hello, %s!", html.EscapeString(d.Name))
}

イベントの構造

HTTP トリガー関数は、言語固有の HTTP フレームワークを介してイベントを受信します。詳細については、上のサンプルコードをご覧ください。

次のステップ

HTTP 関数の実装例については、HTTP のチュートリアルをご覧ください。また、HTTP 関数の作成方法については、HTTP 関数をご覧ください。