小規模なSlack BotはAWS lambda functions URLsに作ると楽だった
の話の続きです.
先日lambda function URLsを利用してhttp apiのような実装を記述する方法を紹介しました.
今回は
httpadapter
と
net/http/httputil
を利用してlambda function URLsをリバースプロキシとして動かしてbackend apiに流す方法です.
実装
普通のリバースプロキシを実装するときはhttputil.ReverseProxy
を定義してserverを作って待ち受けるわけですが、
今回の場合はhttputil.ReverseProxy
を定義した後httpadapter.NewV2
に食わせるだけですね.
次の例はlambdaのeventを受け取ったあとlocalで8080ポートで待ち受けるhttp serverにリクエストを流すproxyの例です.
func main() {
director := func(req *http.Request) {
req.URL.Scheme = "http"
req.URL.Host = ":8080"
}
rp := &httputil.ReverseProxy{Director: director}
lambda.Start(httpadapter.NewV2(rp).ProxyWithContext)
}
すべてlambda関数上で完結させたい場合は func init()
などでapiを予め立ち上げた後プロキシしてあげると良いと思います.
github.com/ieee0824/le2hp
ではそのような実装にしました.