こんにちは、河野です。
昨年に引き続き、今年も社内ハッカソンが行われました。今年のテーマは「あったらいいなを実現する」でした。アイデアソンには1人で、ハッカソンには2人で参加しました。
私が取り組もうと考えていた技術のテーマとしては、
- Amazon Web Services
- Go言語
の二つでした。
Amazon Web Services
社内でもAWSを使用したプロジェクトが増えているのですが、私自身はなかなか触る機会がなく、他のメンバーの話を聞くだけなので、まずは色々触ってみようと。
AWSくらい家でもやれるよ〜と言う声が聞こえてきそうですね。まぁそうですね。実際、EC2の初期構築は自宅でやったので。
利用するサービスは、標準的なウェブアプリに必要そうな、EC2、S3、RDS辺りを想定してました。
Go言語
Go言語は、12月1日に、1.2が出たばかりですね。
最近golangを使って、細々とCUIのツール作ったりしてるんですが、まとまった時間を取ってボリュームのあるものを作りたいなと思っていました。
なんか、goroutin使った非同期にポコポコと処理するようなもので、リッチなインターフェースがいらないやつ。
作ろうと思ったもの
最近github pages使って個人のサイトを運用しているのですが、
- static site generatorがなんか流行ってそうな気がする
- 静的ページはコメントできないのでDisqusが良く使われている
と思い、以下のようなシステムを考えてみました。名前はFOCUSと付けてみました。
端的に言えばdispusクローンですね。
ちょっと違っているところは、弊社のSynergy!とデータ連携する辺りでしょうか。コメントだけでなく、問合せフォームとかでも良いので、そういったデータを連携する感じです。
システムの構成とか
それぞれ以下の構成を想定してました。
APIサーバ
- コメント投稿、履歴辺りを担当
- golang使う
- JavaScript配信とかする
管理サーバ
- コメントの管理用
- railsのウェブアプリで作る
- コメントの閲覧、編集とかできる
外部連携サーバ
- 弊社サービスのsynergy!と連携する用のサーバ
- railsつかう
デモサーバ
- WordPressとstaticpress使って、静的サイト生成から、S3まで連携させる
- APIサーバから提供されるjavascript使って、コメントが利用できるようにする
サーバーが多いですが、EC2を多めに作ってAWS使ってる感じを味わいたかっただけです…。DBサーバはRDSでまかないます。
実際にできたモノ
なかなか想定通りには行かないですね。最終的には以下のサーバ・アプリケーション構成になりました。
API・管理サーバ
- コメント投稿、履歴の出力
- コメント管理
- rialsでアプリを構築し、管理画面はrails-adminを素のまま使ってる状態…。
- golangは断念…。
デモサーバ
- 1枚のhtmlファイルのみ。
- WordPressとStaticPressはどこか遠くへ…。
- S3も断念…。
Synergyとの連携もできず、断念した部分も多く、残念な感じになりました。
振り返り
ハッカソンでは、インフラの構築部分とAPIサーバ、デモサーバの部分を担当しました。他の部分は、もう1人にお任せしました。
以下、自分の担当部分について、技術的な反省点とか、ハマったとこ、良かったことなどです。
EC2のPublicDNSとPublicIPが変わる
EC2の起動と停止を行うとPublicIPが変わるというのは、聞いていました。
なので、SSHのconfigには、PublicDNSを利用して設定していたのですが、PublicDNSも変わったので、再度設定し直すことに…。
割り振られているFQDNにも、明らかにIPから構成されている数字の部分があるのに、なぜ気づかなかったのでしょう…。
ElasticIPを割り振るのが面倒だったので、とりあえず立ち上げっぱなしにしておきました。
DNSちゃんと設定すれば良かった
FQDNが長いし、IPは覚えにくいし、やっぱりRoute53使って、各サーバに名前を付けておけば良かったなと思いました。
WordPressとStaticPressとS3の連携
- WordPress+StaticPressで静的コンテンツ作成
- 静的コンテンツをs3cmdでS3にアップロード
というところまで、出来ていたのですが、結局採用しませんでした。
StaticPressの設定の手順に問題があったと思いますが、WordPressで更新しても、S3へ反映されないという問題が起きました。なので、StaticPressではHTMLの生成だけにして、s3cmdを利用してS3へデータを送る方法を採りました。
が、どうも上手く表示されません。階層に問題があるのか、s3cmdの使い方に問題があったのか、トップページは良いのですが、各個別の投稿ページを表示できませんでした。
色々と調べてみたものの、すぐに解決できそうになかったので、結局断念しました。
Golang使ってないし…
ハッカソン当日、午前中にS3周りで手間取ってしまい、時間も足りなくなってきました。その時点で、他の部分もあまり出来ていなかったので、コメント周りの機能と管理機能を合わせて1つのRailsアプリにしました。
何か最低限動かないと…と思っての判断でしたが、せっかくの機会だし、完成しなくてもGo言語で頑張っても良かったかなぁとか思ったりもしました。
どっちが良かったか悩ましいところです。
サーバ分けといて良かった
上に書いたようにちょっと躓いたりはしましたが、機能別に分業できて、それが影響しない状態になったので、とてもやりやすかったです。特に意図はしていませんでしたが、結果として良かったなと思います。
EC2は、必要なときにインスタンス立ち上げて、不要になったら破棄してというのが気軽に出来るので、とても良いですね。
ハマった時の諦めどころ
なかなか判断が難しいところですが、ハマった時にどのくらい深追いするか、というのは予め決めておけば良かったと思います。
例えば、30分は自分で調査する、その後相談する、深追いするならさらに30分みたいな。「もう少しで何とかなりそう」という気持ちが結局ずるずると引きずってしまい、時間を無駄にしていた気がします。
まとめ
そういえば結果は3位でした。とはいってもチームが少なかったからですが。来年は多くの人が参加できると良いなと思います。
あと、AWSはとても楽しいですね。もっと早く触っておけば良かったな~と思いました。