12/07 Vercel Serverless Functions

2020/12/19に公開

この記事は、Serverless Hello World Advent Calendar 2020の7日目です。

VercelServerless FunctionsでHTTP APIを実装します。

関数の作成

Vercelでは通常Next.jsやGatsby.jsなどのレポジトリをベースにしますが、今回は静的ファイルは不要なのでいきなり関数を書いていきます。

$ mkdir severless-helloworld-vercel 
$ cd severless-helloworld-vercel 
$ git init
$ mkdir api
api/hello.js
module.exports = (req, res) => {
  const { name = 'World' } = req.query
  res.status(200).send(`Hello ${name}!`)
}

デプロイ

GitHubにpushして、Vercelに登録します。特にServerless Functions固有の設定などは不要です。

少し待つとデプロイが完了するので、cURLで叩いてみます。
URLは{サイトURL}/api/{関数名}になります。

curl -v 'https://severless-helloworld-vercel.vercel.app/api/hello?name=world'                                                                     <main 0:53>
*   Trying 76.76.21.21:443...
* TCP_NODELAY set
* Connected to severless-helloworld-vercel.vercel.app (76.76.21.21) port 443 (#0)

...(省略)...

> GET /api/hello?name=world HTTP/2
> Host: severless-helloworld-vercel.vercel.app
> user-agent: curl/7.68.0
> accept: */*
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
< HTTP/2 200 
< content-type: text/html; charset=utf-8
< cache-control: public, max-age=0, must-revalidate
< content-length: 12
< date: Fri, 18 Dec 2020 16:41:43 GMT
< etag: W/"c-00hq6RNueFa8QiEjhep5cJRHWAI"
< x-vercel-cache: MISS
< age: 0
< server: Vercel
< x-vercel-id: hnd1::sfo1::74nrp-1608309703307-99fd3b01d233
< strict-transport-security: max-age=63072000; includeSubDomains; preload
< 
* Connection #0 to host severless-helloworld-vercel.vercel.app left intact
Hello world!%

Vercel上にhello関数をデプロイできました。

Discussion