☁
12/06 Netlify Functions
この記事は、Serverless Hello World Advent Calendar 2020の6日目です。
Netlify FunctionsでHTTP APIを実装します。
関数の作成
Netlify Functionsではコードジェネレータ等は特に用意していないようなので、素直に書いていきます。
$ mkdir helloworld
$ cd helloworld
$ git init
$ mkdir functions
まずはNetlifyに関数を読み込ませるディレクトリを指定します。
netlify.toml
[build]
functions = "functions"
つづいて、さきほど作ったfunctions
ディレクトリに関数の本体を置いていきます。
functions/hello.js
'use strict';
exports.handler = async function (event, context) {
const body = event.body ? JSON.parse(event.body) : {};
const name = event.queryStringParameters.name || body.name || '';
return {
statusCode: 200,
body: JSON.stringify({message: `Hello ${name}!`}),
};
};
$ git add .
$ git commit
GitHubにpushして、Netlifyに登録します。特にNetlify Functions固有の設定などは不要です。
少し待つとデプロイが完了するので、cURLで叩いてみます。
URLは{サイトURL}/.netlify/functuions/{関数名}
になります。
curl -v 'https://friendly-pike-1b50fb.netlify.app/.netlify/functions/hello?name=world'
* Trying 18.136.21.181:443...
* TCP_NODELAY set
* Connected to friendly-pike-1b50fb.netlify.app (18.136.21.181) port 443 (#0)
...(省略)...
> GET /.netlify/functions/hello?name=world HTTP/2
> Host: friendly-pike-1b50fb.netlify.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 == 150)!
< HTTP/2 200
< cache-control: no-cache
< date: Tue, 15 Dec 2020 20:12:46 GMT
< content-length: 26
< content-type: text/plain; charset=utf-8
< age: 0
< server: Netlify
< x-nf-request-id: 738de0d0-bc2d-42da-b98b-17be5b7e48cc-38804153
<
* Connection #0 to host friendly-pike-1b50fb.netlify.app left intact
{"message":"Hello world!"}%
Netlify上にhello関数をデプロイできました。
とにかくAWS Lambadaベースの関数を同じドメイン上で動かせるというのはCORS等を考えなくても良いこともあり手軽で良いですね。
Discussion