Edited at
GoDay 14

AWS LambdaのGoサポートについて今知れるいくつかのこと

More than 1 year has passed since last update.


この記事は

Go(その1) Advent Calendar 2017の、2017/12/14の記事です。


注意


正式リリース来ましたね

https://aws.amazon.com/jp/about-aws/whats-new/2018/01/aws-lambda-supports-go/

技術的な内容はこちらが詳しい。

https://aws.amazon.com/jp/blogs/compute/announcing-go-support-for-aws-lambda/

ここより下は、2017/12時点の情報で、つまり リリースが来る前の情報 です。ご注意下さい。

別の記事でハンズオン的なやつ書きたいなと思っています。


導入


AWS LambdaのGoサポートについて書きます

この記事では、こないだAWS re:Invent2017 に行ってきまして、そこでちょこっとだけ聞いてきたAWS LambdaのGoサポートについて書きます。

そして、まだサービスリリースもされてないんで公開情報だけで書きます。詳しい人は殆ど知ってる内容だろうけど許していただきたい。

まあ、このセッションの動画見ればこの記事みなくてもわかります。

AWS re:Invent 2017: What's New in Serverless (SRV305) - Youtube

小品だしふわっとしてますが、お付き合いください。


AWS Lambdaって何?

AWS Lambda (サーバーレスでコードを実行・自動管理) | AWS

自分の書いたプログラム(AWS Lambda関数)をサーバレスに実行でき、AWS API GatewayやAWS IoT、AWS SMS、Alexa Skillと連携できるエンドポイントにもなるというやつです。GCPでいうGoogle Cloud Functionsみたいなやつ。

今までは、Node.js (JavaScript)、Python、Java (Java8互換)、C# (.NET Core)の4種類の言語に対応していましたが、今回のre:Invent 2017で、Goと.Net Core2.0の追加が発表されました。



先行研究

LambdaでGoを動かそうと頑張った人たちをご紹介。


実際はどういうふうに動かすの?

https://youtu.be/WrPOz2dx8XY?t=55m45s

ここのハンズオンデモでやってます。


コードはこんな感じ


package main

import (
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)

func HandleRequest(name string) (string, error) {
result := fmt.Sprintf("Hello %s!", name)
fmt.Println(result) // log to console
return name, null
}

func main() {
lambda.Start(HandleRequest)
}

叩いたAWS CLIは

aws lambda invoke --region us-west-1 \

--invocation-type RequestResponse \
--function-name goDemo
--payload '"re:Invent"' \
--log-type None output

って感じで、これは普通にlambda叩いてるだけって感じ。

ソースに関しては、lambda.Startで関数名を指定するところがオッという感じですね。Goの言語仕様とあいまって他の言語と比べてちょっと特殊な書き方になっているような。

http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/programming-model-v2.html

contextの概念はあるので、他の言語に倣うとHandleRequestの第2引数とかで受けてくれるんですかね。

まだgithub.com/aws/aws-lambda-go/lambdaがプライベートリポジトリなようで、オープンになってたら中読んでどういう処理してるか書きたいと思ってたんですが、残念。

Node.jsやPythonみたいに、素のライブラリだけならWebコンソールだけで完結、外部パッケージとのリンクが必要だったりするとビルドしてアップしなきゃいけない感じですかね。パブリックパッケージなら、コンソールからコードアップするだけでよしなにビルドまでやってくれると嬉しいなあ。


いつから使えるの?

Launching early 2018 !とのこと

IMG_2617.jpg

座して待つ。(かわいい)


気になる点

動かすまでは解決しなそうなので列挙するだけで棚上げ。


まとめ


サマリー


  • AWS LambdaのGoを動かすには、既存のコードに最低2行の追加が必要

  • 利用するためのパッケージはオープンソースになるらしい(まだ)


  • Comming Soon! Launching early 2018 !とのこと

  • とにかく楽しみ


感想

界隈ではGCP派に押されて肩身が狭い思いをしており、LambdaでGoを頑張るの辛い手法が多かったんですが、Lambdaがネイティブに対応してくれるのは本当に嬉しい。プロダクト全体のコードベースがGoなのに、しょうがなくPythonで書いてるLambda Functionや、ECSとかで動いてる小さい処理のバッチとかどんどん移していきたいです。可能な限り管理する部分を無くしたい。

はよ使いたいですね!Previewとか来たらできるかぎり早く触って記事書きたいと思います。