Google Cloud Functions (Go1.11) 자습서

제목



Google Cloud Functions(Go1.11)의 퀵 스타트와 튜토리얼을 통해 각 기능을 확인해 간다.
이번에는 일단 퀵 스타트.
그리고 Go 모듈을 사용한 프로젝트 배포에 관한 자습서만.

기본적으로 다음을 참고로 진행한다.
h tps : // c ぉ d. 오, ぇ. 코 m / 훈 c 치온 s / 두 cs /

전제



  • 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/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.
     〜〜 省略 〜〜
    


    $ 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.
     〜〜 省略 〜〜
    


    $ 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)
    

    좋은 웹페이지 즐겨찾기