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になった。

おそらく認証/権限関連の設定周りがだめっぽいけどひとまずここまで。

Amazon Web Services 業務システム設計・移行ガイド (Informatics&IDEA)
佐々木 拓郎 林 晋一郎 瀬戸島 敏宏 宮川 亮 金澤 圭
SBクリエイティブ
売り上げランキング: 428