Go에서 Vercel Serverless Functions
호스팅 서비스를 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.go
는 http.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.json
에 routes
요소를 추가합니다.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/다테
Reference
이 문제에 관하여(Go에서 Vercel Serverless Functions), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mugi111/items/9063e7c6d9e86164d6c3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)