じゃあ、おうちで学べる

思考を呼び覚ます このコードに、君は抗えるか。

@nwiizo の2019年の振り返り

はじめに

拝啓、お世話になってる皆々様。

年末年始ひたすらにジムへ行き、友人も特におらず天涯孤独な身の上故に飲み会などもなくひたすらに鍛えて走っていたので社会人をはじめて一番、元気です。皆々様はいかがお過ごしでしょうか。

本日は去年の仕事と振り返りについて...

お前は誰だ

GMOインターネットでインフラエンジニアと兼任してエバンジェリストをやっている人間です。

Profile | nwiizo.github.io

  1. 2017 年にGMOインターネットに新卒で入社して3年目
  2. インフラ開発、自動化やコンテナ化やツール開発などに従事
  3. 土壇場で逃げずに戦うことの出来るインフラエンジニアを目標にしている

2019年の振り返り

2019年の目標は「動作するきれいなインフラを目指して」というものでした。

動作するインフラを目指して

今日のソフトウェア開発の世界において絶対になければならない3つの技術的な柱があります。 それは、自動化 、バージョン管理 、テスト の3つです。

ソフトウェア開発においてこれらは無いというのはかなりの地獄で、これらがない開発環境は存在を知り、メリットを享受していた人からするとストレスフルな環境であり2019年においては開発環境的にはマイナスからのスタートであるといえます。

私はインフラを扱うエンジニアなので、これらが2019年のinfrastructureの開発や保守において必ず必要か?と言われたら規模や状況によってとしかいえません。また、流行っているからという理由で導入すると後から入った人が意味の分からない辛みを経験しなくてはいけないのでなぜ、導入するかは明確にする必要があります。

話は変わりますが、インフラにおけるテスト駆動について少しお話をさせて下さい。「動作するインフラ」であればTerraformAnsibleChefなどの構成管理ツールを用いてinfrastructureの自動化を行って、「監視」を一種のテストと考えることによって監視がすべてグリーンになればOkであるという考え方もあります。監視では、一定の間隔で任意のコマンドなどが実行され、ユーザからみて影響がないかということが重要な指標であることから振る舞いを監視することも多いからです。このような背景からZabbixNagiosPrometheusmackerelを用いて恐らく正しい振る舞いをしてくれる「動作するインフラ」を構築することができます。

動作するきれいなインフラを目指して

各種ソフトウェアやライブラリ、OSは日々バージョンアップを行い、我々が頑張って検証して構築したインフラ環境は日々、相対的に劣化します。これらは避けようがありません。複数のソフトウェアを適切なバージョンで動作させ続けることはクロスワードパズルのようなタスクでありながらこれらはインフラの面倒をみるエンジニアにとって必須のタスクになります。また、複雑なインフラ要求に対応するためにプラグインを入れてコードを書いてある場合もあるとは思います。

それらの巨大で複雑なインフラの運用をしていくとサービス監視によるテスト駆動ではどうしても抜け漏れが発生してしまいます。自分を含めた組織で働いていくエンジニアが経験豊富でエスパーのように問題や障害を事前に回避できるエンジニアであればよいのですが我々、凡人には毎回、その能力を発揮することができない為、簡単にリリースで失敗することができます。巨大で複雑なものはそれだけで十分に難しいので各ソフトウェアを分割統治しようという話になる。分割統治を行い各個撃破する為に状態のテストを行うツールというのは非常に有用であると考えます。

導入する目的や目標は各チームや組織によって様々であると思いますのでこの辺は導入の前に明確にしておいたほうが良いと思います。この辺は宮下さんのServerspecなどが非常に参考になります。

最近、採用されているツールとして、Gossがあります。紹介ブログを書いてたの時間がある時にでも読んでみてください。

まとめ

ちょっと話は逸れましたが、2019年の前半は主にインフラにおけるテスト駆動を行う為の諸々のサーバー監視や自動化を行ってました。後半はずっとコンテナ基盤と戯れてたので2020年の抱負の方でシュッと書いて行きたいと思います。