Go에서 Vercel Serverless Functions

13437 단어 5Vercelapi
github 저장소

호스팅 서비스를 Netlify에서 Vercel로 갈아 타고 나서 Serverless Functions가 신경이 쓰여서 시도했습니다.

Vercel



Next.js의 운영원인 Vercel(전 Zeit)의 웹 애플리케이션 호스팅 서비스입니다. 그냥 Netlify와 같은 위치입니다.

이전 준비



계정 생성



Vercel의 톱 페이지 오른쪽 상단에있는 SignUp 버튼에서 Github, GitLab, BitBucket 계정을 사용하여 계정을 만듭니다.


Vercel CLI



npm 패키지로 제공되는 Vercel CLI를 설치합니다.
이것은 주로 로컬에서 배포하는 데 사용됩니다.

npm
npm i -g vercel

yarn
yarn global add vercel

설치 후
vercel login

를 실행하여 위에서 등록한 이메일 주소를 입력하고 확인합니다.

서버리스 함수 만들기



프로젝트 폴더 바로 아래에 index.go를 만듭니다.
index.gohttp.ResponseWriter*http.Request 를 인수로 갖는 함수가 존재해야 합니다.
먼저 Vercel Serverless Functions Go Example 라는 텍스트를 반환하는 함수를 구현합니다.

index.js
package main

import (
  "fmt"
  "net/http"
)

func Handler(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Vercel Serverless Functions Go Example")
}

vercel.json 만들기



vercel.json
{
  "version": 2,
  "name": "go",
  "builds": [
    { "src": "*.go", "use": "@vercel/go" }
  ]
}

라우팅



날짜와 시간을 반환하는 끝점을 만듭니다.
이번은 알기 쉽게 아래와 같이 엔드포인트마다 폴더를 나누어 작성합니다.
root
├ /date
│ └ index.go
└ index.go

형식 만들기



date/index.go
type ResDate struct {
    Date string `json:"date"`
}

요청 핸들러 구현


w.Header().Set("Content-Type", "application/json") 에서 Content-Type 를 지정합니다.

date/index.go
func Handler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    d := ResDate{ time.Now().Format(time.RFC850) }
    bytes, _ := json.Marshal(d)
    fmt.Fprintf(w, string(bytes))
}

date/index.go



date/index.go
package date

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

type ResDate struct {
    Date string `json:"date"`
}

func Handler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    d := ResDate{ time.Now().Format(time.RFC850) }
    bytes, _ := json.Marshal(d)
    fmt.Fprintf(w, string(bytes))
}

vercel.json에서 라우팅 설정



라우팅을 구성하려면 vercel.jsonroutes 요소를 추가합니다.

routes
  "routes": [
    { "src": "/date", "dest": "/date" }
  ]

또한 빌드 대상 폴더에 방금 만든 date 폴더의 go 파일을 추가합니다.

builds
  "builds": [
    { "src": "*.go", "use": "@vercel/go" },
    { "src": "/date/*.go", "use": "@vercel/go" }
  ]

vercel.json
{
  "version": 2,
  "name": "go-vercel-functions-demo",
  "builds": [
    { "src": "*.go", "use": "@vercel/go" },
    { "src": "/date/*.go", "use": "@vercel/go" }
  ],
  "routes": [
    { "src": "/date", "dest": "/date" }
  ]
}

배포


vercel

이것뿐입니다.

프로덕션 배포를 한다면 --prod 옵션을 붙이기만 하면 됩니다.
vercel --prod

2020/10/05 타이포가 있었기 때문에 수정했습니다. prob -> prod
@kimihito_ 씨 지적 해 주셔서 감사합니다.

배포 후 다음 URL에 액세스하면
h tps : // / ゔ ぇ r せ ー フ ン c 치 온 에 ぁ mp ぇ. 무기 111.ゔぇrl. 아 p
가장 먼저 작성한 함수대로 Vercel Serverless Functions Go Example 라고 표시되고 있는 것을 확인할 수 있었습니다.


date 엔드포인트도 제대로 작동하고 있음을 확인할 수 있습니다.
htps : ///-ゔぇr세 l-펑 c치온-에ぁmpぇ. 무기 111.ゔ ㄱ l. 아 p/다테

좋은 웹페이지 즐겨찾기