AWS LambdaでGoを動かしてみた
はじめに
AWS LamdaでのGolang対応が昨年のAWS Re:Inventで発表され、先日サポートが正式に
発表されたので、実際に触ってみることにしました。
試しに簡単なechoサーバーを作ってみることに。
さらっとドキュメントを読んでみる
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/go-programming-model-handler-types.html
In addition, you need to implement handler function code and a main() function.
handlerの設定はmainで書く必要がある
lambdaで設定できるHandlerは以下の形式
TIn/TOutは標準のjson packageでmarshal/unmarshal できる必要がある
func ()
func () error
func (TIn), error
func () (TOut, error)
func (context.Context) error
func (context.Context, TIn) error
func (context.Context) (TOut, error)
func (context.Context, TIn) (TOut, error)
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/go-programming-model-context.html
lambdaの情報をcontextから取得できる。 取得する際は lambdacontextを使う
lc, _ := lambdacontext.FromContext(ctx)
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/go-programming-model-logging.html
logはLambda Consolから取得できるらしい
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/go-programming-model-errors.html
customもエラーを設定できる
panicした時はどこでpanicしたかも教えてくれる
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/go-programming-model-env-variables.html
環境変数を使いたいときは普段通り os.Getevn("FOO")
で取得できる
実際にコードを書いてみる
こんな感じ。 受け取ったメッセージに現在時刻を付与して返す簡単な例
https://gist.github.com/Konboi/2c5c735ce2f9f966515abc3b566c2c2e
ちなみに手元で実行しても特になにも表示されない
デプロイしてみる
READMEにあるようにアプリをビルドしてzipする (環境はMac)
ビルド
GOOS=linux go build -o main main.go
zip main.zip main
awsの設定
こんな感じでlambdaの設定をして
API Gatewayの設定する
テストしてみるとこんな感じで返ってきた
AWSのConsoleでのテストではうまくいったけど、手元のterminalからは403になった。
おそらく認証/権限関連の設定周りがだめっぽいけどひとまずここまで。
SBクリエイティブ
売り上げランキング: 428