[AWS]LambdaでGoを使ってみる
今回は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を使用するためのモジュールをインポートしておきます。
go mod init go-lambda
go get github.com/aws/aws-lambda-go/lambda
go-lambdaはアプリ名ですので自分用に書き換えましょう
まずは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を使用してみましたが他の言語やコードを変えて色々試して見ると面白いと思います。
参考資料
Discussion