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系のフレームワークでスタンダードなものがないのが気になるところ。これから出てくると思うので、今後に期待。