インフラエンジニア学習ロードマップ
Contents
はじめに
Developer Roadmapsの内容が興味深く、自分の経験を元に日本のインフラエンジニア向けの学習ロードマップを作ってみました。
これからキャリアをスタートする駆け出しエンジニアの参考になれば幸いです。
※私自身の限られた経験のもとに作成した学習ロードマップです。偏った内容や、時代の流れで主流が変わってしまった部分もあると思うので、色々な方のご意見コメントを頂けると嬉しいです!
[2020/8/12追記]
図中の技術選定や学習順序について解説を追記しました。
前提条件
以下の前提条件で作っています。自身の置かれている環境に合わせて、学習内容は適宜取捨選択することをお勧めします。
- 1〜3年目の新人エンジニア向け
- SI業界で使われるエンタープライズ系技術を想定
- オンプレとクラウドはどちらも扱う
- オンプレ機器は経験上よく見かける製品を代表して記載
- ファシリティ、アプリケーションの分野は対象外
各技術の学習のゴール
本ロードマップ記載の技術に対する学習のゴールは以下の通りです。もちろん、より詳しく学ぶ分には構いません。
- 該当技術の概要、利用シーンを説明できる
- 与えられた要件に沿って、基本的な作業やパラメータ作成ができる
- 必要に応じて、他の技術と連携したシステムを構築することができる
インフラエンジニア学習ロードマップ
PDF版
画像版
解説
ツール
物理的サーバの代わりにNICやディスクの概念も交えて、まずはサーバOSのインストールから習得できるようにVirtualBoxを学習します。
最近は、インフラ案件もGitでコンフィグやドキュメントを管理しているところも多く、スクリプトやコンフィグを編集してリポジトリにpushするまでVS Codeがあればワンタッチで行えるので、両ソフトも最優先カテゴリに加えています。
サーバOS
SI系の案件だとサーバOSはRHELが主流です。CentOSはRHELと共通点が多いので、代替手段として触ってみるのが良いと思います。
前段で用意したVirtualBoxを使用してOSインストールから始めて、リモートログイン、ファイル・ディレクトリ操作、プロセスの概念、テキスト編集、パッケージインストール方法を学びます。
社内系のシステムだとWindowsクライアントの管理でWindows Serverが導入されているケースも多いので、余裕があれば同OSの基本的な操作方法もここで学んでおきます。
プログラム言語
Bashによるシェルスクリプトが使えるようになれば、Linuxサーバ上の大半の作業は自動化できます。より複雑な要件をこなしたいときはライブラリが豊富で完結に記述できるPythonが便利です。
Windows ServerであればPowerShellを使いますが、大規模システムでは無い限りGUI操作が主流なので、この時点ではそこまで学習の優先度は高くないです。
サーバ筐体
機器の設置方法やケーブルの整頓方法について学びます。
ロードマップ上はDellとHPEを例に載せていますが、サーバ筐体は自身が業務で使うメーカーのものについて学べばOKです。どのメーカーも、大体公式サイトにドキュメントが公開されています。
リモート管理ボード(DellのiDRACやHPEのiLOなど)の操作方法や、ハードウェア監視方法についてもここで学習します。
なお、業務で触ることがなければ、サーバ筐体の項目は飛ばしても構いません。
ネットワーク
EthernetやTCP/IPを中心に、メーカー共通で使用するプロトコルや仕様を学習します。
ネットワーク機器は、シェアの大きいCiscoのルータとスイッチの設定方法を覚えておけば、多くの現場で潰しが効きます。VLAN、IPルーティング、NAT、VPN、WAN接続に関する設定を学習しておけば基礎的なスキルとしてはOKです。
ストレージ
RAIDとパーティションの概念を学習します。併せて、Linuxサーバを使ってNFSやSAN(iSCSI)の接続を試します。
ストレージ機器について学習する場合は、サーバ筐体と同じメーカーのものを選べば良いかと思います。ストレージ機器は非常に高額なので、学習する場合はメーカーが公開しているシミュレータや仮想アプライアンスを使用することになるかと思います。
ストレージ機器を業務で使わない人は、サーバ内臓のストレージについて管理ができれば大丈夫です。
仮想化
ネットワークとストレージについて理解したところで、仮想化を学習します。
SI系の案件だと、VMware vShpere (ESXi)を使うことが多いです。無償版があるので、個人でも比較的簡単に仮想基盤サーバを構築できます。
ローカル環境でミドルウェアを検証したりするケースもあるので、余裕があればDockerもここで学習しておきます。
ネットワーク系ミドルウェア
仮想化を学習し、複数のサーバを構築できるようになったら、ネットワーク系ミドルウェアを学んでいきます。
firewalldはCentOSに標準搭載されたファイアウォールソフトウェアなので使う場面が多いです。(中にはOFFにする案件もありますが) サービスやポートの通信許可設定を学習します。
メール、DNS、プロキシは企業内ネットワークでよく使う技術なので、余裕があればOSSで一通り構築してみると仕組みがよく理解できます。
データベース系ミドルウェア
アプリケーションのインフラを扱う場合は、始めにデータベース系ミドルウェアについて学習します。
エンタープライズ向けはOracle Databaseのシェアが一定数あるものの、SI業界の大きな流れとしてはOSSのDBMSやIaaSのマネージドDBサービスへの移行が進んでいます。データベース学習の足掛かりとしては、まずはMySQLかPostgreSQLのどちらかを学んでおけば良いかと思います。
基本的なデータベース・テーブルの作成、SQLによるデータ操作、レプリケーション設定、バックアップ・リカバリについて学習します。
Webアプリケーション系ミドルウェア
ざっくりしたジャンルになりますが、Webアプリケーションに関係しているミドルウェアです。
Webサーバは、SI系だとApacheは現在もシェアが多く、市販のWebアプリケーションを導入する場合も大体使われているので、学習の優先度は高いです。
Nginxも、近年使用されるケースが増えてきているので、こちらも学んでおいた方が良いでしょう。
アプリケーションサーバは、案件で使用している言語によって異なるので言語に合わせてメジャーなものを1つ学んでおけばOKです。
キャッシュサーバは、MemcachedもしくはRedisあたりがメジャーどころです。業務で使うことがあれば学習します。
ログ管理
各種OS、ミドルウェアやアプリケーションのログを管理するためのソフトウェアです。
LinuxのOSやミドルウェアのログは、rsyslogでファイル出力、logrotateでローテーション、という組み合わせが主流なので優先して学習します。
最近はクラウド上で動作するアプリケーションを中心にログの転送、収集にFluentdが使われているケースもあります。
業務でログの可視化や解析を行うようなことがあれば、いわゆるELK Stackと呼ばれるElasticsearch、Logstash、Kibanaについても学習します。
Windows系サービス
主にWindowsクライアント向けに提供するサービスです。
ADDS (Active Directory Domain Service) は、Windowsが存在するほとんどのシステムで使用されています。
また、最近はMicrosoft 365のAzureADとID連携するためにADDC (Azure AD Connect)を使用することがあるため、そのような構成のシステムを扱う場合はADDCも学習します。
運用管理
システムが止まらず動き続けるために必要な技術です。
個別のソフトウェアを勉強する前に、システム運用管理の概念を知るためにまずはITILの知識を身に着けることをお勧めします。
近年IaC (Infrastructure as Code、インフラのコード化)の流れがSI業界にも少しずつ入ってきており、Ansibleによる運用作業の自動化は身につけておくべきです。
バックアップソフトは商用製品を使うことが多いのですが、案件によってまちまちでデファクトスタンダート的的な製品がないので、携わるシステムに合わせたものを学習します。
運用監視ソフトは、導入コストが掛からず機能の豊富なZabbixを体験しておけば、おおよそのイメージが掴めると思います。実案件でも、最近はZabbixかJP1のどちらかを使う案件が多いです。
DevOps
主に構成管理とデプロイに関する技術です。
開発部門が作るアプリケーションやインフラのコードはGitで管理します。そのため、Gitホスティングサービスを活用していく必要があります。
シェア、日本語情報の豊富さからGitHubを最優先で学習します。GitHub Pagesで個人の取り組みをアウトプットしてみたり、GitHub Actionsでデプロイの自動化を身につけてみても良いでしょう。
案件によっては、システムが閉域環境に構築されている場合がるので、そういった環境向けにGitLabをGitHubの代替手段として学習したり、Jenkinsと組み合わせるのもありです。
タスクや課題を管理するためのチケットシステムは、RedmineやJIRAがよく使われるので、基本的な使い方を覚えておくと良いでしょう。
クラウド (IaaS)
IaaS型のクラウドを使って、今まで学習してきたサーバOSやソフトウェアを動かしたり、それらを応用したマネージドサービスを利用してシステムを組み上げていく技術を学びます。
シェアの高さ、日本語情報の多さからAWSを最優先に学習します。
まずはオンプレ環境をクラウドにリフト(単純移行)するための構成を学びます。主なサービスとして、VPC、EC2、ELB、RDS、S3が使えれば十分です。
クラウドをフル活用した環境にシフト(アーキテクチャの最適化)するために必要なサービスは、分野ごとにたくさんの種類があります。この時点では必須では無いので、まずは自身の興味のある分野について学べばOKです。
クラウド (SaaS)
SaaSは様々な種類がありますが、ここではどの企業でも使われることの多いコミュニケーション・コラボレーション系のSaaSを学習します。インフラエンジニアの観点として、メール機能(セキュリティやメール配送制御)、クライアント拠点からのネットワーク接続方式、ID管理はよく対応が求められます。
特に携わっている案件が無ければMicrosoft 365を優先して学習すれば良いかと思いますが、G Suiteを使用している案件に携わるのであれば同サービスを学習しても構いません。SaaS自体の機能の学習というよりは、上記に挙げたインフラエンジニアとして対応が求められる分野に限定して学習すればまずはOKです。
Fluentd, Kibana等が入るのであれば、ロギング、モニタリングは1つのカテゴリとして切り出して良さそうだなぁ、と思いました。また、Prometheus, GrafanaなどもOSSとしては成熟しつつありますし利用が広がっていると思います。
Docker, Kubenetesは仮想化ではなくコンテナ + 仮想化っていう比べ方するのであればVirtualboxとvSphereとかのほうがよさそうです。
Ansible, GitLab, Docker等が入るのであれば、何らかのCIツール(Jenkins, CircleCI, GitHub Actionsなど)までカバーしておいたほうが良さそうに思います。
参考になるコメント、ありがとうございます。
確かに、モニタリングは一つの独立したカテゴリにしても良いかもしれないですね。
Prometheus, Grafanaは入れるべきか結構悩みました。。。
最近Web系のセミナー資料では結構見かけますが、SI案件での導入事例があまり見当たらず、需要と学習コストの釣り合いが取れるのか気になっています。
すごいわかりやすいロードマップですね。
最近インフラの世界に足を踏み入れたので参考にさせていただきます。
ちなみにネットワークエンジニアとして働き始めたのですが、CCNAとネットワークスペシャリストどちらの資格を取得すべきか悩んでいるのですがSI業界的にどちらが良い等あるのでしょうか?
コメントありがとうございます。
もし、現在の業務でCisco機器を使用したオペレーションが多いのであれば、CCNAの取得がお勧めです。ネットワークの知識と、Cisco機器の設定方法が同時に学べるからです。
逆に、機器を全く触らない業務をしているのであれば、ネットワークスペシャリストを先に取得しても良いかもしれません。特定メーカーの製品に依存しない試験なので実装スキルは身につきませんが、CCNA以上に広範囲の分野について学ぶことができます。