📝
CLI から Go アプリケーションを Lambda にデプロイしてみた
Go による Lambda 関数の構築 - AWS Lambda
CLI からの操作でやってみました。
前提
- コマンド実行環境は Cloud9
- Cloud9 環境のインスタンスタイプは t3.small
- Cloud9 環境のプラットフォームは Amazon Linux 2023
- バージョン情報は以下の通り
$ aws --version
aws-cli/2.28.17 Python/3.13.7 Linux/6.1.147-172.266.amzn2023.x86_64 exe/x86_64.amzn.2023
$ go version
go version go1.24.5 linux/amd64
- Lambda 実行ロールは作成済み
- AdministratorAccess 権限を付与
1. プロジェクトの作成
まずはアプリケーションのプロジェクトを作成します。
$ mkdir lambda-go-example
$ cd lambda-go-example
$ go mod init lambda-go-example
# Lambda Go ライブラリの追加
$ go get github.com/aws/aws-lambda-go/lambda
2. Lambda 関数コードの作成
Go のバージョン情報を出力するコードです。
$ cat > main.go << 'EOF'
package main
import (
"context"
"fmt"
"log"
"runtime"
"github.com/aws/aws-lambda-go/lambda"
)
// Request は入力データの構造体
type Request struct {
Name string `json:"name"`
}
// Response は出力データの構造体
type Response struct {
Message string `json:"message"`
GoVersion string `json:"go_version"`
}
// HandleRequest はLambda関数のメインハンドラー
func HandleRequest(ctx context.Context, request Request) (Response, error) {
// Goのバージョン情報をログ出力
goVersion := runtime.Version()
log.Printf("Go Version: %s", goVersion)
log.Printf("Go OS: %s", runtime.GOOS)
log.Printf("Go Arch: %s", runtime.GOARCH)
name := request.Name
if name == "" {
name = "World"
}
message := fmt.Sprintf("Hello, %s! This is a Go Lambda function.", name)
log.Printf("Generated message: %s", message)
return Response{
Message: message,
GoVersion: goVersion,
}, nil
}
func main() {
lambda.Start(HandleRequest)
}
EOF
main.go のインデントが崩れている場合には Cloud9 IDE 上でコードを張り付けなおしてください。
3. カスタムランタイム用にビルド
Using AL2023 in AWS Lambda - Amazon Linux 2023
provided.al2023 ランタイム用に Go コードをビルドします。
$ GOOS=linux GOARCH=amd64 go build -o bootstrap main.go
4. デプロイ
zip ファイル化して Lambda 関数にデプロイします。
$ zip lambda-function.zip bootstrap
$ aws lambda create-function \
--function-name go-lambda-example \
--runtime provided.al2023 \
--role your-role-name \
--handler bootstrap \
--zip-file fileb://lambda-function.zip \
--description "Go Lambda function example using provided.al2023 runtime"
5. 動作確認
$ cat > test-payload.json << 'EOF'
{
"name": "AWS Lambda"
}
EOF
$ aws lambda invoke \
--function-name go-lambda-example \
--payload file://test-payload.json \
--cli-binary-format raw-in-base64-out \
response.json
$ cat response.json
{"message":"Hello, AWS Lambda! This is a Go Lambda function.","go_version":"go1.24.5"}
Lambda コンソールにも go-lambda-example という関数が作成されていることを確認できました。
CloudWatch Logs には以下のようなログが出力されていました。
2025/08/29 05:23:46 Go Version: go1.24.5
2025/08/29 05:23:46 Go OS: linux
2025/08/29 05:23:46 Go Arch: amd64
2025/08/29 05:23:46 Generated message: Hello, AWS Lambda! This is a Go Lambda function.
まとめ
今回は CLI から Go アプリケーションを Lambda にデプロイしてみました。
どなたかの参考になれば幸いです。
Discussion