ローカル環境の準備
-
Golangインストール
https://go.dev/dl/ -
Dockerfile作成
Dockerfile
FROM golang:1.17-buster as builder
WORKDIR /go/src/lambda
COPY go.mod go.sum ./
RUN go mod download
COPY ./ .
RUN go build -a -o /main .
FROM debian:buster as runner
WORKDIR /app/
COPY --from=builder /main /main
ENTRYPOINT [ "/main" ]
- main.go作成
main.go
package main
import (
"fmt"
"context"
"github.com/aws/aws-lambda-go/lambda"
)
type MyEvent struct {
Name string `json:"name"`
}
func HandleRequest(ctx context.Context, name MyEvent) (string, error) {
return fmt.Sprintf("Hello %s!", name.Name ), nil
}
func main() {
lambda.Start(HandleRequest)
}
-
モジュール初期化
$ go mod init example.com/hello
-
モジュールの依存関係を最適化
$ go mod tidy
コンテナ作成 / ECRプッシュ
ECRリポジトリからプッシュコマンドを表示させて、ECRにイメージをプッシュする
※詳細な手順は下記を参照
【Amazon ECR】AWS CLI を使ってリポジトリへプッシュする
Lamda権限をもつロール作成
AWSLamda_FullAccess ポリシーを追加
"Lamda_Full" でフィルタリング
Lambda関数の作成
コンテナイメージから作成する方法を選択
※事前にECRにイメージをプッシュしておく
前述で作成したロールを指定
ポイント
Lambda関数は ECR のイメージを実行するのではなく、イメージをもとに作成されたコンテナで実行される。そのため ECR のイメージを削除しても、既に作成された Lambda関数は影響を受けない。