インフラ経験0の新卒エンジニアがインフラエンジニアになるまで

f:id:tech-leverages:20181107173450j:plain

1. はじめに

メディカル事業部インフラ担当新卒2年目エンジニアの村本と申します。

本記事では、私が新卒1年目でインフラ経験0のところから、メディカル事業部のインフラを任せられるようになるまでに、ぶち当たった壁とその対処法を綴っております。

これからエンジニアになる学生の方や、これからインフラ業務に携わる方、これからインフラ担当者を育てるという方が、学び・学ばせる一つの参考になれば幸いです。

2. インフラ担当となった背景

私は配属後、メディカル事業部の社内向けの営業管理ツールとオウンド媒体の大規模リニューアルプロジェクトに携わっておりました。

配属されて3ヶ月間は営業管理ツールの開発をしており、ひたすらPHPを使ってWebページ作成していました。

そんな中ひょんなことからCircleCIを使ったテストとデプロイの自動化タスクが振って来ました(自席に帰ってくるとCircleCIと書かれたメモ紙が、まるで赤紙のように置かれておりました...(メモ紙は真っ白))。

CircleCIに関しては元々、入社前にインターンをしていた会社で使用しておりましたので、その経験を活かして自動化タスクをやることになりました。

その際、隣に座られていた先輩エンジニアが、1人でリニューアルのインフラ基盤の構築を担当していたのですが、「リニューアルインフラの基盤構築」 + 「開発/テスト用の環境の提供」 + 「その他依頼対応」を一手に担っていたため、圧倒的に人手が足りていませんでした。

そういう状況を隣で見ていたこと、少し開発業務から離れたこと、また私自身がインフラに興味があったことから、リニューアルインフラ基盤構築業務に携わることとなりました。

3. ぶち当たった壁と対処法

インフラに興味があったとはいえ、入社前にはHeroku上にRailsアプリケーションを乗せるくらいの経験しかしたことがなく、Webアプリケーションがリクエストを処理する仕組みやネットワークの仕組みなどは、全く理解していない状態でした。

更に、リニューアル後のインフラ環境はAWSを使ったクラウド上に構築することが決定されており、AWSを使ったクラウドの基礎知識も必要でした。

このセクションでは、私が実際に知識不足でぶち当たった壁や事故について、いくつかご紹介していきます。

Nginxの概念・構成がわからない

インフラに携わるようになった時の最初のタスクが、Ansibleを使ってNginxの設定を自動化する事でした。

(メディカル事業部のリニューアルインフラは全て、Infrastructure as Codeになっています)

Ansible自体はYamlで書かれた設定ファイルであったことと、READMEがきちんと書かれていたので、ある程度はすぐに使えるようになりました。

しかし、Nginxの設定に関しては、各設定項目が意味がわからず、またディレクトリ構成もベストがわからない状態でした。

対処法

  • 各設定項目の意味や概要を知るためにとにかくググる
    • 各ディレクティブの役割を知る
      • httpディレクティブ
      • serverディレクティブ
      • locationディレクティブ
  • 各設定項目の詳細についてはNginxのドキュメントを読む
  • ディレクトリ構成についてはlaravel/homesteadなどを参考に構築する
    • site-avaiable、site-enabled構成になっていた
    • 元はApacheがそのような構成だったらしいなど
    • 有効化無効化がシンボリックリングで簡単に行える

開発環境の破壊事件

インフラ担当になってから1〜2ヶ月くらいたった頃でした。

サーバを触るのにも少し慣れてきて、調子に乗っていたのかもしれません。

新規事業である介護施設紹介事業のLP作成のタスクが振ってきまして、私はそのLPを2週間で作成することになりました(リニューアル中に)。 その際にデザイナーさん用の開発&確認環境を用意することになりました。

用意されたサーバは、データセンターで仮想化されて起動しているオンプレミスのサーバでした。 そのサーバに介護施設紹介事業のLPを表示するために必要な設定を施していきました。

一通り設定を終え、画面が確認できる環境を作った3日後くらいに、Hologramというライブラリを使えるようにして欲しいという依頼が飛んできました。

メディカル事業部では、スタイルガイドの生成に、Hologramというライブラリを使用しており、介護施設紹介のLPでも使えるようにして欲しいとのことでした。

HologramRuby製のライブラリだったので、サーバにRubyをインストールする必要がありました。

私はいつも通り何も考えず、新しいRubyをインストールするためにコマンドを実行しました。 そう $ sudo yum -y update を...。

コマンドの実行が終わると、 なぜか全てのコマンドが実行できなくなっていました。

!!!?!

この状態に焦り、一人でひたすら調べ、 LD_LIBRARY_PATH のパスが通ってないから通してみたり色々やってみましたが、結局解決出来ず、ベテランエンジニアに助けを求めに行こうとしたら、 ssh 接続が切れて、2度と ssh 接続が出来なくなってしまいました。

原因は yum update をしたことでカーネルがアップデートされカーネルパニックを起こしてしまったことでした。

結局データセンターに問い合わせて再起動することで対応して頂いたのですが、その対応に3日ほどかかってしまいデザイナーさんの開発をストップさせてしまいました。

この事故から暫くトラウマで、 yum updatesudo コマンドが打てなくなりました...。

対処法

  • サーバに変更を加えるコマンドはめちゃくちゃ慎重に打つ
    • 暫くは上長に見てもらう or 上長に打ってもらう
  • そもそもカーネルが上がらない用に設定する
    • yum -y update --exclude=kernel*
  • どうしようもなくなる前に即ベテランエンジニアに相談
    • どうしようもなくなってからでは遅い

AWSふんわりとしかわかっていなかった問題

実はAWSの操作に関しては、先輩エンジニアに手取り足取り丁寧に指導して頂いたおかげで、特に困ることはありませんでした。

しかし、そのためにAWSの基礎概念であるVPCやSubnetやRouteTableまわりの知識はふんわりとしか理解しておらず、AWSのコンソールを見ても、何故この設定がされているのかわからない状態でした。

このままではいつまで立っても、インフラ担当として一人立ちが出来ず、先輩エンジニアの負担は減りません。

対処法

4. まとめ

この一年で色々な壁にぶち当たり、その度に色々な方法で対処してきました。 壁を乗り越える度に少しずつ成長を実感できた、とても学びの深い1年だったように感じます。

おかげで、今ではメディカル事業部のインフラを1人で運用して、リニューアルのリリースから現在まで問題なくサービスを運用することが出来ております。

しかし、まだまだ改善できる部分は沢山ありますので、今後も壁にぶち当たりながら改善していこうと思います。

5. We Are Hiring

f:id:y-muramoto-lvgs:20180718113123p:plain

レバレジーズ株式会社では一緒に働いてくれるエンジニアを募集しております。 AWSを使ったモダンなインフラ基盤を作りたい!色々改善したい!という方は是非以下からご応募お願いいたします!