[AWS]LambdaでGoを使ってみる

2021/05/30に公開

今回はGoとLambdaを使用していきたいと思います。
AWSLambdaはfunction as a serviceというものでサーバーを自分で管理する必要なく自動でスケールしてくれます!いわゆるサーバレスです。
Lambdaの特徴としてコードをUpLoadするだけで良いので、より開発に力を入れる事が出来ます。また様々なAWSのサービスをトリガーに設定することもできるのでかなり汎用性が高く重要なサービスと位置付ける事が出来ます!
AWSLambdaのメリット
1つ目にEC2などの起動している間は費用がかかるサービスと違い、関数を実行した分だけの金額に抑えられる。
2つ目に自動でスケールしてくれるのでEC2インスタンスを管理するなどの手間を抑える事ができる。
他にも利点はいろいろありますが、AWSが考えるベストプラクティスにも指定されており、AWSソリューションアーキテクトアソシエイトの頻出問題でもあります!

Lambda関数をGoで記述してAWSコンソール上のテスト実行を行ってみたいと思います。
まずLambdaにUpLoadするためにGoを記述します。

その前にモジュール管理のためのmodとAWSLambdaを使用するためのモジュールをインポートしておきます。

terminal
go mod init go-lambda
go get github.com/aws/aws-lambda-go/lambda

go-lambdaはアプリ名ですので自分用に書き換えましょう

まずはmain.goを記載していきます

main.go
package main

import (
	"fmt"

	"github.com/aws/aws-lambda-go/lambda"
)

type Request struct {
	ID   float64 `json: "id"`
	Name string  `json: "name"`
	Like string  `json: "like"`
}

type Response struct {
	YouName string `json: "name"`
	YouLike string `json: "like"`
}

func Handler(request Request) (Response, error) {
	return Response{
		YouName: fmt.Sprintf("あなたはID %f 番 %s です。", request.ID, request.Name),
		YouLike: fmt.Sprintf("あなたの好きな物は %s です", request.Like),
	}, nil
}

func main() {
	lambda.Start(Handler)
}

次にlambdaにあげる用のexecファイルを作成しそれを圧縮しzipファイルにします。
関数の作成から

1から作成を行い、名前は適当なものをつけましょう。今回は「go_lambda_function」とします。
言語は「Go」を選択し他はデフォルトで構いません。

execファイルを作成します。ターミナルからコマンドを打ちます。

execファイルを圧縮します。

ZipファイルをAWSのコンソール上にUpLoadします。

デフォルトではハンドラがHelloに設定されているのでmainに変更しましょう

コンソールにてテスト実行をしてみましょう

以上でテストが無事成功しました。
今回、AWSLambdaを使用してみましたが他の言語やコードを変えて色々試して見ると面白いと思います。

参考資料
https://dev.classmethod.jp/articles/aws-lambda-supports-go/

Discussion