小規模なSlack BotはAWS lambda functions URLsに作ると楽だった の話の続きです.
先日lambda function URLsを利用してhttp apiのような実装を記述する方法を紹介しました.
今回は httpadapternet/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 ではそのような実装にしました.