21
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

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

 祝!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.忘れてた

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
21
Help us understand the problem. What are the problem?