⚡️
LambdaWebAdapterを試してみた
このスライドを見ていたら気になってしょうがないのでやってみた。
(ラムダリス。。。。。だと。。。)
とりあえずAPIを作る
ginで山川APIを作った
main.go
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/yama", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "kawa",
})
})
r.Run() // デフォルトでポート8080でリッスンします
}
Dockerfileを書いてコンテナにする
実行すると山川APIを立ち上げて待ち受けるコンテナ
以下の呪文をいれるのがポイント
COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.8.4 /lambda-adapter /opt/extensions/lambda-adapter
LambdaWebAdapterのデフォルトポートは8080
(環境変数AWS_LWA_PORTで変更可能)
Dockerfile
# ベースイメージとして公式のGoイメージを使用
FROM golang:1.23
# コレがミソ
COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.8.4 /lambda-adapter /opt/extensions/lambda-adapter
# 作業ディレクトリを設定
WORKDIR /app
# Goモジュールを使用するためのファイルをコピー
COPY go.mod ./
COPY go.sum ./
RUN go mod download
# ソースコードをコピー
COPY . .
# アプリケーションをビルド
RUN go build -o /yamakawaapi
# コンテナが実行するコマンドを指定
CMD [ "/yamakawaapi" ]
ECRに上げてLambdaを作る
。。。詳細手順は省略
- ECRにリポジトリを作る
- ビルドしたDockerイメージをECRのリポジトリにPUSH
- そのイメージを実行するLambdaを作成
- 関数URLを有効にする
実行
Lambdaの関数URLに対してのアクセスが
コンテナのポート8080番へのアクセスとして処理される。
↓ローカルでの実行結果
~ http http://localhost:8080/yama 397ms 日 1/ 5 00:08:55 2025
HTTP/1.1 200 OK
Content-Length: 18
Content-Type: application/json; charset=utf-8
Date: Sat, 04 Jan 2025 15:24:04 GMT
{
"message": "kawa"
}
↓LWAを介した実行結果
~ http https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.lambda-url.ap-northeast-1.on.aws/yama 378ms 日 1/ 5 00:24:04 2025
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 18
Content-Type: application/json; charset=utf-8
Date: Sat, 04 Jan 2025 16:03:40 GMT
X-Amzn-Trace-Id: Root=1-67795bdc-1b967a840ed88d325a76261f;Parent=2a814a196ad1dd9b;Sampled=0;Lineage=1:886ab67c:0
x-amzn-Remapped-content-length: 18
x-amzn-Remapped-date: Sat, 04 Jan 2025 16:03:40 GMT
x-amzn-RequestId: aa29208c-2800-4c07-94ed-ed04ebd9fe94
{
"message": "kawa"
}
まとめ(というかまとまりのない所感)
しょうもない物(言い方が悪い。利用頻度が低い、利用量が跳ねる可能性が無い、とりあえず公開したい。みたいなヤツ)を作るときの選択肢としては、かなりアリ。
ではないかと、、、正直APIGateway&Lambdaはめんどくさい⋯
- これlambdaだから、実行されない限り課金されない(だよな?)
- 仮に実行されまくっても負荷耐性はある(多分)、そう、ラムダだから。
- ただし実行されまくったら料金はひどいことになる、そう、ラムダだから。
Discussion