[Terraform] CloudFront のオリジンに Lambda Function URL をセットする

2024-11-21
Lambda 関数を作成し、その Function URL を CloudFront のオリジンにセットしてみる
構成
・CloudFront
・CloudFront OAC
・Lambda (Web Adapter)
・アプリケーション (Go)
architecture.svg
アプリケーション
アプリケーションは Go で作り Lambda Web Adapter を被せる
</>
package main

import (
	"net/http"
	
	"github.com/labstack/echo/v4"
)

func main() {
	e := echo.New()
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello")
	})

	// Lambda Web Adapter はデフォルトで 8080 番ポートにリクエストを送る
	e.Logger.Fatal(e.Start(":8080"))
}
Lambda Web Adapter
Lambda Web Adapter を使う際は、Docker で関数を作るのがメジャーだと思う。
だが、AWS は Lambda Web Adapter 用の Lambda Layer を公開しており、それをアタッチしたところ Zip 形式でも動いた。
Terraform
</>
1
[注意] POST or PUT はできない
CloudFront OAC がリクエストボディのハッシュ計算に対応していない様子。
POST or PUT を叩くとエラーが返ってくる。

ワークアラウンドはいくつかあるが、プロダクションでの使用は要検討。