※AWSアカウント作って、aws-cli をインストールして、aws コマンドでログインしておく
aws --version
aws-cli/1.17.0 Python/3.8.1 Darwin/18.7.0 botocore/1.14.0
準備
Goインストール。
$ brew install go
Lambda 用の Go パッケージをインストール。
$ go get github.com/aws/aws-lambda-go/lambda
serverless framework インストール。
$ npm install serverless -g
テンプレート作成、デプロイなどは sls コマンドを利用するので、slsコマンドで作ったらいいです。
$ serverless create -u https://github.com/serverless/serverless-golang/ -p hello-go-lambda
or
$ sls create -u https://github.com/serverless/serverless-golang/ -p hello-go-lambda
hello-go-lambda ができています。
$ ls
hello-go-lambda
Lamdba作成
作成されたテンプレートを見ていきましょう。
$ cd hello-go-lambda
$ ls
README.md bin main.go serverless.yml
main.go が lambda にアップされるプログラムですね。
$ cat 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)
}
ビルドします。利用環境の Lamdba は Linux なので GOOS に指定。
GOOS=linux go build -o bin/main
bin配下に main コマンドができています。
$ ls bin
main
serverless framework の設定ファイルを修正します。リージョンを変更。
vi serverless.yml
# you can overwrite defaults here # stage: dev # region: us-east-1
stage: dev
ap-northeast-1
デプロイ、api keys は一旦なし、エンドポイントもつけていません。
$ 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 hello-go-lambda.zip file to S3 (5.11 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
resources: 6
api keys:
None
endpoints:
None
functions:
hello: hello-go-lambda-dev-hello
layers:
None
Serverless: Run the “serverless” command to setup monitoring, troubleshooting and testing.
Lambda を無事に呼び出せました。
$ sls invoke -f hello
{
“message”: “Go Serverless v1.0! Your function executed successfully!”
}
AWS コンソールから Lambda の関数を確認すると増えています。
API Gateway 作成
curl 経由で Lambda を呼び出せるよう、API Gateway を設定します。
serverless.yml の functions を以下のように修正します。
functions:
hello:
handler: bin/main
events:
- http:
path: hello
method: get
integration: lambda
デプロイします。今度はエンドポイントが追加されましたね
$ sls deploy
………………..
Serverless: Stack update finished…
Service Information
service: hello-go-lambda
stage: dev
region: ap-northeast-1
stack: hello-go-lambda-dev
resources: 11
api keys:
None
endpoints:
GET – https://<エンドポイント>.execute-api.ap-northeast-1.amazonaws.com/dev/hello
functions:
hello: hello-go-lambda-dev-hello
layers:
None
Serverless: Run the “serverless” command to setup monitoring, troubleshooting and testing.
curl 経由で Lambda が呼び出せることを確認できました。
$ curl https://qvribueqyh.execute-api.ap-northeast-1.amazonaws.com/dev/hello
{"message":"Go Serverless v1.0! Your function executed successfully!"}
AWS コンソール上にも新規に登録されています。
serverless framework すごい便利ですね!
{“message”: “Internal server error”}
こちらの記事で解決できました。
こう行ったエラーが出て response が 502 になっている!
Sun Feb 09 06:32:29 UTC 2020 : Received response. Status: 200, Integration latency: 34 ms
Sun Feb 09 06:32:29 UTC 2020 : Endpoint response headers: {Date=Sun, 09 Feb 2020 06:32:29 GMT, Content-Type=application/json, Content-Length=70, Connection=keep-alive, x-amzn-RequestId=e1b0d3aa-6469-45e3-a022-e82a133d0827, x-amzn-Remapped-Content-Length=0, X-Amz-Executed-Version=$LATEST, X-Amzn-Trace-Id=root=1-5e3fa77d-0865a231cb35236ab084a6f0;sampled=0}
Sun Feb 09 06:32:29 UTC 2020 : Endpoint response body before transformations: {"message":"Go Serverless v1.0! Your function executed successfully!"}
Sun Feb 09 06:32:29 UTC 2020 : Execution failed due to configuration error: Malformed Lambda proxy response
Sun Feb 09 06:32:29 UTC 2020 : Method completed with status: 502
serverless.yml に integration: lambda をつけて解決しました。
コメント