ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

NginxをAWS上で作って壊す「Nginx Up and Running」0.2.0をリリースした

趣味インフラ趣味プロジェクトなので勝手にリリースごっこをしているだけであります。

初回リリース時の記事はこちら。

blog.chaspy.me

何が変わったか

issue & PR

0.1.0まではガシガシmasterに向けてcommit & pushしてましたが、そのあとはissue & PRで、ちゃんとcommitやPRにはrefでissue情報を加えています。現職での仕事の仕方に習っています。

で、今回の変更をPRベースで振り返ります。

Testing on CircleCI

github.com

github.com

このリポジトリ、TerraformでAWS上にインフラ(EC2)を作ったあと、ansibleでNginxを作って、InfratasterでL7のテストをするというものです。CIでは何をするか悩みました。悩んだ結果、AWS上には実際にリリースせず、テストに絞ることにしました。

テストをするにしても、実際にAWS上にインフラを作るわけではないので、TerraformとAnsible/Infratasterの2つにわけました。

Terraformは単純にplanをしているだけなので、テストとしては少し甘いかもしれません。TerraformもCI時はlocal(?)に実行できる(?)とかあればいいんですが、わけがわからないので諦め。

次にNginxをinstallするansibleと、構築後のNginxに対してL7のテストを行うInfratasterですが、CircleCIで立ち上がるコンテナに対して、local実行することにしました。

もともと、AWSに対して実行するときも、作成したEC2インスタンスのpublic IPアドレスをhosts、spec/spec_hosts.rbに出力していたので、CI実行時はlocalhostに書き換えることで対応できました。

使うDocker Imageもどうしようか悩んだのですが、Ansibleが入ったイメージをFROMとし、rbenvをいれる部分はDockerfileを書きました。

https://hub.docker.com/r/chaspy/nginx-up-and-running/

あとはAWSのcredentialですが、環境変数に持たせることでCIでもAWSに対してデプロイするときでも動くようにしました。

CIも、テストもとても大事なので、今回ちゃんとできてよかった。

Embedding build status badges

github.com

バッジつけましたー。

CircleCI

Build nginx from source with ngx_mruby module

github.com

ngx_mrubyを使うには、Nginxをbuildするときに指定しないといけません。以前軽くvagnratで動かした時にinstallのshellは書いていたので、それをplaybookにかきおこすダルい作業をしていました。

Ansible、loginしないから/etc/profileとかにexport書いても読んでくれなくてPATHとおらねー!とか、shell moduleとcommand moduleで謎の挙動違いがあってNo such file or directoryになったりとかで無駄にハマったりしました。

あとngx_mrubyのお試しで無駄にfizzbuzzを返すようにしていて、そのテストをInfratasterで書きました。

今後Nginx / ngx_mrubyのconfigとテストをメインにどんどん書いていきたいので、その基盤ができてよかった。

Add Japanese Document

github.com

結局ほぼほぼREADMEに書いている内容と同じになってしまったが、今後増えて行くといいと思う。そんな思いでまずは簡単に書いた。

いつまで続くかわかんないですが、薄い本というか、NginxをAWS上で、CI/CDこみで動かしたい、そういう職場で働いている、キャッチアップしたいひとが、git cloneしてすぐに動かして試せる、学習用の技術書。。。のサポートリポジトリ、みたいなイメージで今回取り組んでいます。

まだまだ道半ばですが、v1.0.0の頃にはそれなりのボリュームのものになればいいなと思います。まだまだ中身もよくないところたくさんあるし、少しずつ直しつつ、ようやくCI/CDまわりの基盤となる部分や、必要ソフトウェアの導入まで終わったので、今後はようやく中身!って感じですね。

今後

さっきも言ったけどNginxでできること、ngx_mrubyでできることをconfigを書きつつ、Infratasterでテストも書きつつ、ドキュメントも書きつつ、っていうのを少しずつ進めて、コンテンツを増やしていきます。

おわりに

Vagrant版もつくろうかなーって思っている。というか以前作ったのがあるので移行する感じで。。。

github.com