Yamashouは田舎に行きたい

ある田舎県の田舎の町で大学生やってた僕が、思ったこと、やったこと、勉強したこと、などをつらつら書いて行く

Goでserverlessの夢を見る(Go言語serverlessの紹介)

最近よく聞くserverlessですが、今回紹介する、serverlessはAWSのlambdaに関するserverless frameworkについて紹介します。

serverlessについて

serverlessは何がいいのかと言いますと。サーバーを保有しないのでサーバーの管理コストを大幅にカットし、さらには、serverlessfraeworkで、開発環境にも依存性が低く、チーム開発にも向いていると考えられます。

今回は

僕のバイト先では、node + serverless フレームワークで使っています。他のbotを作ったりする時は、pythonを使うときもあります。 だが、最近というかここ一年ほど、Go言語を趣味書いています。 が、awsにはgolangは採用されていないため。golangをlambdaで扱うことはできないですし、ましてや、serverless frameworkを使用することもそのままでは難しいです。 が、どうしても使いたい人がいると思います(僕みたいに) そんな人のために紹介したいと思います。。

どうやって?

それ用のライブラリはいくつか存在します。

  • apex
  • eawsy

この二つはとても有名で、serverlessでGoを使う方法のうちの一つですが、僕が両方使ってみて思ったことは以下になります。

apex

  • CLIだから作成・デプロイ・実行が簡単
  • apigatewayが手動?接続方法がわからん!

eawsy

  • logが出せる!・書くだけ!・フレームワーク対応
  • zipの後手動?厳しい、、、

という点で自分はしんどいなと思っています。 そこで、serverless-golangを使っています。

serverless-golang

github.com

これはeawsyを拡張してできたフレームワークで、makeでコマンドが用意されていてとても使いやすいです。

どのようになっているかと言いますと、

  1. はじめにGoを使ってapiを書きます。
  2. それをdocker のcgo環境上でコンパイルします。
  3. 最後にそれをpythonC言語として読み込ませてdeployをします。

この流れをserverless-golangはやってくれます。

f:id:shota-df-412:20171202184750p:plain

さらにチュートリアルを見ると、

速度はやファイルサイズは以下の表にまとめました。 (eawsyはserverless-golangです)

f:id:shota-df-412:20171202182743p:plain

速度はpythonのserverless frameworekと遜色なく動きます。 (まぁCのライブラリとして読み込んでいるので当然かもしれないですが、)

ただ、Goを触ったことある方はわかるかもしれないですが、バイナリサイズが大きいので、lambdaにのっせてもそれは変わらないため、サイズだけは大きくなってしまいます。 普通のserverlessと同様にserverless.ymlを使用するので細かな設定なども行えるので、とても便利です。

今年の夏に調べたことがここまでで、この記事を作ということで久しぶりに触ってみたところ、開発もちゃんと行われていて、exampleも増えていましたし、serverlessのバージョンアップにも対応しているのでありがたいです。何と言っても、Gopherの画像が追加されていたので、これはいいと思います。

Iron-functionsとかで記事を書かれている方をみて、遅いとか見ることもありますが、自分はこっちの方がserverlessを使っている身としては扱いやすいのでおすすめです。 github.com

最後に

急遽書くことになったので、特になにか新しいこととか自分が作ったものの話でなくて申し訳ないです。。。。。 ただ、awsを全面的に採用されていてGoを使いたいけど、awsだからec2やecsでしか使えないな〜とおっしゃっている方に少しでも届けばいいなと思ったので書きました。

小ネタで申し訳ないですが、これで終わります。

リンク

serverless.com

github.com

apex.run