AWS LambdaをGolangで作る

どこかの世界線でGolangが流行っていると聞いたので、AWS LambdaのアプリをGolangで書いてみた。

今回作成していたのは、Webページをスクレイピングして、結果をSlackに通知するアプリ。環境周りで悩んだところをメモしておく。

Goの開発環境

IntelliJ IDEA Ultimateを持っているならば、IntelliJで良いと思う。これ高いよね。

無料の開発環境を探して、VS CodeにGoのプラグインを入れて使うことにした。 [Visual Studio Code][Golang][Windows] VSCodeでGoの開発環境を作成する方法まとめ - Qiitaを見つつ、ひたすら拡張を入れていくだけ。

デバッグもVS Code上でできるので便利。

Goのプロジェクトの配置場所

自分のPCにGoのプロジェクトを置く時、どこに置くかという問題。一般的には「$GOPATH/src/GitHubホスト名/GitHubリポジトリ名」とするらしい。

今回はAWS GodeCommitを利用したので、以下のような形になった。
$GOPATH/src/git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/Project

AWS Codebuildを使うと、上記の場所にcloneされるので、合わしておかないとコンパイルできないことになる。

他言語から来た人がGoを使い始めてすぐハマったこととその答え - Qiita

Goのライブラリ管理

Goのライブラリ管理はGitHub - golang/dep: Go dependency management tool。Goのオフィシャルチームが作っているということで、今後はこれが主流になると思う。

Goオフィシャルチーム作成の依存関係管理ツール dep を試してみた | DevelopersIO

Goのビルドファイル

Goのプロジェクトでビルドは、Makefileを使うらしい。 懐かしいものが出てきたなと思いつつ、Makefileを書いた。

Goでデバッグ用コードを埋め込む

デバッグの時だけXXしたいという時は、コンパイル時にtagsオプションを利用する。
Golang Cafe #25 まとめ デバッグとリリースビルドの切り替え方法を考える - taknb2nchのメモ

Goでスクレイピング

Webページをスクレイピングするために、goquery - GoDoc を使わせていただいた。

jQuery’s stateful manipulation functions (like height(), css(), detach()) have been left off.

基本はjQueryのセレクタが使えるのだけど、一部は対応していないので注意。

SAMを使う

今回、サーバレスということで、AWS SAMを使った。
awslabs/serverless-application-model: AWS Serverless Application Model (AWS SAM) prescribes rules for expressing Serverless applications on AWS.

template.yamlを書けば、Cloudformationのテンプレートを作成してくれる。思っている以上に簡単だった。

SAM localを使えば、AWS Lambdaのテストをローカルでも実施することができる。便利!

Go langを使ってみた感想

他の言語を触っている人ならば、比較的に早く習得できると思う。シンプルで良い言語だと思った。Googleが開発元というので、すごく良い印象がある。気に入ったぜ。

マイナス面は、Javaと比較すると標準ライブラリに物足りなさを感じる。あと、Web系のフレームワークでスタンダードなものがないのが気になるところ。これから出てくると思うので、今後に期待。