Go
golang
serverless

Serverless Framework(Go) でHello worldしてみる

 祝!Lambda Go Support

ついにAWS LambdaがGo対応されました。

https://aws.amazon.com/jp/blogs/compute/announcing-go-support-for-aws-lambda/

Serverless Frameworkも素早くGo対応を行なってくれてますので、

早速Hello worldしてみて、GoでのServerless開発を始めたいと思います。

Serverless Framework のインストール(アップデート)

まずはServerless Frameworkをグローバルにインストールします。
パッケージ毎に管理されている方はローカルにインストールしてください。
既にインストール済みの方もGo対応以降のバージョンにアップデートしましょう。

ServerlessFrameworkインストール
$ npm install serverless -g

テンプレート作成

Go用のテンプレートを作成します。

テンプレート作成
$ serverless create -u https://github.com/serverless/serverless-golang/ -p hello-go-lambda
Serverless: Generating boilerplate...
Serverless: Downloading and installing "serverless-golang"...
Serverless: Successfully installed "hello-go-lambda"

serverlessコマンド部分は slsコマンドでもよいです。

テンプレート作成
$ sls create -u https://github.com/serverless/serverless-golang/ -p hello-go-lambda
Serverless: Generating boilerplate...
Serverless: Downloading and installing "serverless-golang"...
Serverless: Successfully installed "hello-go-lambda"

main.go確認

作成したテンプレートのディレクトリ内に main.goがあるので開いてみます。
Response返すだけのプログラムの様です。今回は、動かす事が目的なのでそのまま使用します。

$ cd hello-go-lambda
$ vim main.go
main.go
package main

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

type Response struct {
    Message string `json:"message"`
}

func Handler() (Response, error) {
    return Response{
        Message: "Go Serverless v1.0! Your function executed successfully!",
    }, nil
}

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

build

先程のプログラムを buildします。
lambdaの動いている環境は linuxなのか、クロスコンパイル設定値 GOOSを linuxにしておきます。
※この設定をしていないと、実行時にエラーになります。

$ GOOS=linux go build -o bin/main
$ ls -R
README.md       bin/            main.go         serverless.yml

./bin:
main*

bin配下にmainコマンドが出来てます。

リージョン変更

デフォルトではus-east-1にデプロイされてしまうので、serverless.ymlの設定を変更しておきます。

$ vim serverless.yml
# you can overwrite defaults here
#  stage: dev
#  region: us-east-1

# you can overwrite defaults here
  stage: dev
  region: ap-northeast-1

deploy

deploy します。

$ sls deploy
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
.....
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (2.98 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
................
Serverless: Stack update finished...
Service Information
service: hello-go-lambda
stage: dev
region: ap-northeast-1
stack: hello-go-lambda-dev
api keys:
  None
endpoints:
  None
functions:
  hello: hello-go-lambda-dev-hello

※動作させれば良いという考えなのでAPIKeyなかったりします。ちゃんと使う人は確実に設定お願いします。

実行

$  sls invoke -f hello
{
    "message": "Go Serverless v1.0! Your function executed successfully!"
}

楽勝ですね。

まとめ

簡単なので、みなさん是非やってみましょう!

追記

Q.Hello worldして無くない?
A.忘れてた