公開日:2018-06-25
梅雨明け後の沖縄よりこんにちは、皆さん今日も元気にGo言語でコードを書いてますか?
今年のはじめ、2018年1月よりかねてより待望のGo言語でのAWS Lambda関数の開発が正式にサポートされました。それより以前はapexを活用してこんな感じでLambda関数をGo言語で書いていたと思います。書いてましたよね?
Node 4.xのEOLが迫る(本当はもう過ぎてる)今日このごろ、蓄積された膨大なGo言語のLambda資産をそろそろNative Goランタイムに移したいと思いますよね?
幸いなことに、こちらのプルリクエストがすでにマージされていますので、少しコードを書き換えて & apexをv1.0.0-rc1以上に上げてデプロイし直すことで、Native Go ランタイムを利用することが出来るようになります。
ということで、今日はNative Goランタイムに移行する際に利用するイベントをまとめてみたいと思います。apex + golang で作成された関数は、受け取るイベントごとにほぼ機械的に書き換えることができます。
以下、ハンドラを “main” とした例でご紹介します。
API Gateway の Lambda proxy を利用する場合
API Gateway の Lambdaプロキシ統合のリクエストを受け、レスポンスを返す場合には events.APIGatewayProxyRequest とevents.APIGatewayProxyResponse を利用します。ドキュメントはこちらです。
自分の中では最も利用回数は少ないのですが、一般的には多そうなので初めにご紹介します。
func main() {
lambda.Start(shim)
}
func shim(context context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
}
SNSイベントを利用する場合
自分の中ではSNSでLambdaをキックするパターンが一番多いんじゃないか?と思うのですが、皆様の活用範囲ではいかがでしょうか。
この場合利用するイベントは events.SNSEvent です。ドキュメントはこちら。関数はこんな感じになります。
func main() {
lambda.Start(shim)
}
func shim(context context.Context, event events.SNSEvent) (e error) {
}
CloudWatchEventを利用する場合
CloudWatchのイベント経由でLambdaを起動することもよくありますね。いわゆるcronやバッチ系の処理に利用します。ドキュメントはあれ、、、無いですが、これを見れば一目瞭然でしょう。関数はこんな感じになりますね。
func main() {
lambda.Start(shim)
}
func shim(context context.Context, event events.CloudWatchEvent) (e error) {
}
カスタムオーソライザーを作成する場合
ちょっと変わり種?の API Gateway で認証を実装するときに作るカスタムオーソライザーも良く作成するLambda関数の1つですね。このLambda関数では、イベントは events.APIGatewayCustomAuthorizerRequest を利用します。ドキュメントはこちら。関数はこんな感じで、PolicyDocument を events.APIGatewayCustomAuthorizerResponse でレスポンスします。
func main() {
lambda.Start(shim)
}
func shim(ctx context.Context, event events.APIGatewayCustomAuthorizerRequest) (events.APIGatewayCustomAuthorizerResponse, error) {
}
その他
この他、もちろんS3のイベントだったり、DynamoDB ストリームやKinesisのストリーミング系のイベントだったりと、おおよそイベントとして取り扱えるものは揃っているはずです。サポート内容は、こちらのソースを見れば確認することができます。
ちなみに、Lambda関数自身に関する情報(関数名やRequestIDなど)は、lambdacontext.FromContextを使って context から取り出すことが可能です。
lambdacontext.FromContext(ctx)
以上、皆さんのGo言語+Lambdaライフがより快適になれば幸いです。
投稿者プロフィール
-
"沖縄の自宅からリモートワークで参画している根っからのクラウド・コミュニティ大好き人間。
オープンソースとクラフトビールをこよなく愛する。"
最新の投稿
- life-work2024年10月4日琉球ゴールデンキングス 2024-25シーズン TIP-OFFパーティーに参加してきました!
- gusuku2020年10月5日自社サイトの検索機能を構築して、顧客理解をより深める取り組み
- kintone2020年8月20日ノーコードを戦略的に採用するには?
- kintone2020年6月17日SvelteJSを使ってkintoneをカスタマイズしてみた!