Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

 祝!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"

必要パッケージの取得 ※ 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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした