LoginSignup
32
21

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-27

 祝!Lambda Go Support

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

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"

必要パッケージの取得 ※ 12/20追記

その後必要なパッケージを取得します。
今回の場合、 github.com/aws/aws-lambda-go/lambdaですね

@shinriyo@githubさんに教えてもらい気付きました。
ありがとう御座います!!

$ go get github.com/aws/aws-lambda-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.忘れてた

32
21
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
21