「rds-try」を公開するまで #golang #aws #jawsug

会社で担当するプロダクトがなくなってしまい、手を動かす機会も減って”検証”以外で何か出来るのがいいなーと思ったのと、今回試した中で何か参考になればいいなーと思うのでまとめてみました。

github.com

きっかけ 

皆さんご存知の peco を始めとして結構身近に色々とgolangで作られたプロダクトが増えたなーと感じたのと、会社でも家でもWin/Mac両方使うことがあるのでクロスコンパイルも素敵だなーと思ってました。


peco/peco · GitHub


Pecoに関する89件の投稿 - Qiita

そして半年ほど前に以下のCrocos さんのエントリーを見て、前に担当してた認証系サービスで似たような要望があったなーと思い出し

RDSのSnapshotミラー&テストツール [RDS TestRunner] をGoで実装した話 :: Crocos Engineering Blog 

http://engineering.crocos.jp/post/95813111405/rds-snapshot-rds-testrunner-go

さらにInfluxDBやpecoのお話をGREE Tech Talk #6で聞いて、これは手を動かすしかないと思い込み時間を見つけてgolangに触るようにしました


GREE Tech Talk #06 : Practical Go

goamz 利用していた頃

Crocos さんのrds-testrunner を眺めながら、Forkしたgoamzに手を入れながらgolangに慣れるために細々とコードを書いてました。

使っていたgoamzはrds-testrunnerに採用されていたものと同じくmitchellh/goamzでした。しかしRDS関連は実装してあるメソッドが少なく、goamzに手を入れる→APIリファレンスを調べて実際に使ってみるとなり、色々と勉強になりました。


crocos/rds-testrunner · GitHub


mitchellh/goamz · GitHub

aws-goの登場! 

のんびり作業していたらaws-goというパッケージが急遽公開に!今現在のaws-sdk-go の元?となったものですね。

当然中身を見てみるわけですが、こちらはbotocoreのJSONスキーマから自動生成されたものですべてのメソッドが揃ってる!これは乗り換えるしかない!

ということで、goamzからaws-goへの変更作業を行いました。


awslabs/aws-sdk-go at 50f5f12927d77de6ec71a7473fe1f1081734d908 · GitHub


Stripe's AWS-Go and uploading to S3 - Quelques digressions sous GPL...

そしてaws-sdk-goの登場!

またもや大体動くようになってきたかなーと思ったタイミングで、今度はAWSオフィシャルSDKとしてaws-sdk-goが発表されました。

オフィシャルSDKは待ちに待った!という感じなので、当然置き換えたわけですがimport 部分を置き換えたらそれで終了という感じで非常に簡単!

それもそのはずで、置き換えてから知ったのですがaws-goを元にそのままオフィシャルSDK化したものとのことでした。


awslabs/aws-sdk-go · GitHub 

動作してから 

テストも書いてないし、クロスコンパイルも手元で手動で作っていたんですが丁度gif画像を作ってるあたりからある程度時間が取れる事情に強制的になったのです・・・

なので、せっかくだからテストも書いてCIサービスも利用してみようと思ったのです。

テストについてはオフラインでも出来るようにモックを使うことにして、CIサービスはさすがにオフラインでは無理なので、ネット回線が使えるときに作業するとか分けてのんびり作業していました。

どの作業を行うにしてもWeb上の情報を参考にしていたのでオフライン作業は結構大変だなーと実感しました。

まとめ

いろいろとやったことないことにも手を付けられたし、時間があるときに楽しいことをするのはやっぱり正解ですね。

今回はいろいろと勉強になって発見もあったので非常に有意義でした。

モノを作るっていうのはやっぱり得るものも大きいですね。