LoginSignup
1
1

More than 3 years have passed since last update.

Google Cloud Functions (Go1.11) チュートリアル

Last updated at Posted at 2019-05-06

お題

Google Cloud Functions(Go1.11)のクイックスタートとチュートリアルを通して各機能を確認していく。
今回は、ひとまずクイックスタート。
あと、Goモジュールを使ったプロジェクトのデプロイに関するチュートリアルだけ。

基本的に以下を参考に進めていく。
https://cloud.google.com/functions/docs/

前提

  • GCPは知っている。

以下は済んだ上での作業。

  • GCPプロジェクトの作成
  • Cloud SDKのインストールと初期化・認証

開発環境

# OS

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"

# Cloud SDK

$ gcloud version
Google Cloud SDK 244.0.0

# Golang

$ go version
go version go1.11.4 linux/amd64

実践

Quickstart

参考

ソース

[QuickStart/helloworld.go]
package Quickstart

import (
    "fmt"
    "net/http"
)

func HelloWorld(w http.ResponseWriter, r *http.Request) {
    if _, err := fmt.Fprint(w, "Hello, World! (go111)"); err != nil {
        fmt.Println(err)
    }
}

デプロイと動作確認

$ pwd
/home/sky0621/work/src/go111/src/github.com/sky0621/tips-go/try/gcp/gcfgo/Quickstart
$
$ gcloud functions deploy HelloWorld --runtime=go111 --trigger-http
Deploying function (may take a while - up to 2 minutes)...done.
 〜〜 省略 〜〜

screenshot-console.cloud.google.com-2019-05-06-21-55-02-520.png

$ curl https://us-central1-【GCPプロジェクトID】.cloudfunctions.net/HelloWorld
Hello, World! (go111)

Structured

参考

留意点

Goランタイムの場合、関数はプロジェクトのルートにあるGoパッケージに含まれている必要がある。
関数をmainパッケージにするのは不可。
サブパッケージは、Goモジュールを使用している場合にのみサポート。

ソース

$ tree
.
├── function.go
├── go.mod
├── go.sum
└── subpkg
    └── jsonform.go
[Structured/function.go]
package Structured

import (
    "Structured/subpkg"
    "encoding/json"
    "fmt"
    "net/http"

    "go.uber.org/zap"
)

var lgr *zap.Logger

func init() {
    var err error
    lgr, err = zap.NewProduction()
    if err != nil {
        panic(err)
    }
}

func StructuredHello(w http.ResponseWriter, r *http.Request) {
    var jf subpkg.JsonForm
    if err := json.NewDecoder(r.Body).Decode(&jf); err != nil {
        lgr.Error(err.Error())
    }
    if _, err := fmt.Fprintf(w, "Hello, %s(%s)", jf.Name, jf.ID); err != nil {
        lgr.Error(err.Error())
    }
}
[Structured/subpkg/jsonform.go]
package subpkg

type JsonForm struct {
    ID   string `json:"id"`
    Name string `json:"name"`
}

デプロイと動作確認

$ pwd
/home/sky0621/work/src/go111/src/github.com/sky0621/tips-go/try/gcp/gcfgo/Structured
$
$ gcloud functions deploy StructuredHello --runtime=go111 --trigger-http
Deploying function (may take a while - up to 2 minutes)...done.
 〜〜 省略 〜〜

screenshot-console.cloud.google.com-2019-05-06-23-27-58-751.png

$ curl -X POST \
>   https://us-central1-【GCPプロジェクトID】.cloudfunctions.net/StructuredHello \
>   -H 'Content-Type: application/json' \
>   -H 'cache-control: no-cache' \
>   -d '{
> "id": "001",
> "name": "Sato"
> }'
Hello, Sato(001)
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