私は初心者のソフトウェアエンジニアですが、IT界隈ではよく「インフラエンジニア」という名称を耳にします。
その名の通りインフラ周りを担当するエンジニアかと思いますが、具体的にはどのようなスキルが必要なのでしょうか?私としては、インフラエンジニアとしてのスキルも身に付けたいと考えており、どのような知識が必要か確認したい次第です。
最近のサービスでは、AWSなどのクラウドサーバーが普及し、インフラエンジニアが直接サーバ機器を触ることがなくなっているのではないかと思います。ですから私の理解としては、
- AWSなどクラウドサービスの機能を理解し運用できる
それに付随する
- コンピュータ自体の仕組みに関する深い理解
- サービスの耐障害性やセキュリティなど運用の知識
- ネットワークの知識
- LinuxなどOSの知識、操作
- MySQLなどDBの知識、操作
あたりが求められるかと思うのですが、いかがでしょうか。過不足があれば、ご指摘願います。
また、
- コンピュータ自体の仕組みに関する深い理解 - LinuxなどOSの知識、操作
あたりに関しては、今後深く学習を進めたいと考えており、本格的に学習するのに適した書籍などございましたら、ご紹介いただけると幸いです。
追記:
皆様ありがとうございました。
全てのご回答を読ませていただき、やはりインフラといっても範囲が広範にわたり漠然としていることがわかりました。該当分野を網羅的に教えていただき、今後の学習の参考になりました。
ベストアンサーとしては、単純に比較ができないのですがもっとも詳細にご説明いただいた方にいたしました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/08 09:41
回答7件
0
昨今のインフラでは、クラウド化がかなり進んでいますが、いまだにIAサーバ、ブレードもあります。
なんとかなくのイメージとして、インフラ全般には、ネットワーク,OS,ミドルウェア,ストレージ,DBがあるように思います。DBは異色ではありますが。
- IPAがスキル標準を用意しているので、それを参考にしても良いでしょう
https://www.ipa.go.jp/jinzai/itss/download_V3_2011.html
のITアーキテクト、ITスペシャリストが該当しています
挙げられているものの他に、固有名称や総称さまざまですが
- 仮想化(Hyper-V、VMWare、Xen)
- ミドルウェア設計や構築(Web AP DB系の nginx,apache, IIS,Tomcat,Oracle,MySQL,PostgreSQL,SQLServer メール関係のPostfix,sendmail,他にはmemcached、分散系のhadoopや全文検索エンジン)やプログラムが動く実行環境の整備(Java、python,gem,php・・・)
- ストレージ EMC/Netapp製品固有の機能やRAID・lun や 接続方式のDAS・NAS・SAN
- 機器選定や見積り(ネットワーク機器ファイアウォールやSSLアクセラレータ・負荷分散装置・L3スイッチ・、スイッチ、VPN・無線LAN・サーバのcpu,構成,メモリ,HDD/SSD、データセンターのラック設計、電源)
- Active Directory、LDAP、Unix・Linux系に限りらずWindowsサーバも
- バックアップ、災害用のBCP
- 監視 何でどう障害や不具合を検知していくのか(運用に近い)
投稿2017/11/07 10:50
編集2017/11/07 10:53総合スコア253
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
インフラエンジニアは極めようとすると多くの事を求められます。
しかし、初心者の内は多くのモノを広く浅く覚えるのではなく、
興味のある分野を絞って一気に学習した方が良いでしょう。
「知ってる」から「出来る」の間には大きな隔たりがあります。
プログラマが実際に動作するプログラムを提出出来る事が存在価値であるように、
実際にプログラムが動くサーバを提供出来ないインフラエンジニアに価値はありません。
その為、最初から風呂敷を広げすぎると価値を提供出来ない期間が長くなります。
先輩のインフラエンジニアがそばで教えてくれるという恵まれたケースならばゆっくり成長すれば良いと思いますが、そうでないなら最小限の項目に絞りましょう。
その他のジャンルは経験年数を重ねながら少しずつ広げていく感じになります。
というわけで、私の独断と偏見でこれは必要だという項目のみに絞りました。
(質問文ガン無視で申し訳ない)
- サービスをヒアリングしてサーバー+ネットワークの概算を出せる
- 実際にサービスを行う環境一式を構築出来る
- 構成管理ツールや仮想化ツールの理解
- デプロイの自動化
なお、私は開発環境を構築するのに頼れる人間が居なかったので、構成管理ツール周りに多少明るいですが本業はWebエンジニア(プログラマ)です。
優先すべき項目は会社や環境、その他諸々の事情で変わる可能性がおおいにあります。
他の回答者さんの意見も参考にしてくださいね。
1. サービスをヒアリングしてサーバー+ネットワークの概算を出せる
インフラエンジニアが何のために居るのかの大きなウェイトを占めるのがこれです。
仮に金がいくらでも使えるのであれば、AWSの一番高いインスタンスを気にせずボンボン建ててしまえばいいのです。
しかし現実は金がないから会社を立ち上げてみんなで利益を得ようとするわけで、金は常に足りません。
様々なサービスを比較検討して、動作させつつコストが安い構成を提示出来る人である事が望まれます。
これが大変であるのは匙加減が長く務めないとわからないという点にあります。
とはいえ、難しいからとサーバの調査しない人間は一生コストに対する意識や知識が付きません。
Linuxのサーバ負荷を確認するコマンドやツールを多く覚えましょう。
ユーザー数、CPUやメモリの負荷、回線使用率を常に把握というのは普段の業務も合わせると無理なので、
グラフにまとめた情報が一定期間毎に通知され、一目見ればなんとなくわかるという風に自動化を目指しましょう。
2. 実際にサービスを行う環境一式を構築出来る
LinuxマシンにSSHでログインしてシステムを動作させる事が仕事になります。
つまり一定以上のCLI操作能力が求められます。
ただし実際にシステムを作成した人(プログラマ)が構築手段に関しては一番知っているので、
教えてもらったり、手順書をもらいながらインストール出来れば十分です。
というわけで、CLIの基礎力の部分が一番重要です。
パッケージ管理ソフトを操ったり、より多くのコマンドを覚えたり、シェルスクリプトを自作出来る能力を養いましょう。
タイピング速度をアップさせると相乗効果で捗るので楽しくなります(typing.ioがオススメ)
セキュリティは必要ですが、今すぐ必要というわけではありません。
何故ならばお金さえ払えばハッカー集団が構築したサーバをテスト攻撃して、
その結果どういうセキュリティ対策が必要かをレポートしてくれるサービスが存在するからです。
頼れるインフラエンジニアの先輩が居たらへばりついて教えてもらうのも良いでしょう。
ゆくゆくはMySQLの初期設定は糞だからコンフィグのこの値を修正しておくべきとか、
php.iniはこの値にしておくとセキュリティ的に安全…などといった言語に対する知識を得ると付加価値的なところで重宝されるでしょう。
でもまぁ、付加価値ですね。
3. 構成管理ツールや仮想化ツールの理解
AnsibleやChef等の構成管理ツールを理解し、使いこなしましょう。
また仮想環境、特にDockerに関する知識も必要です。
半年前に貴方が構築したサーバがクラッシュしました。
どんな環境を構築しましたか?
そそそ、そんなの答えられるわけないだろ!!はいアウト
これで何日もの徹夜作業が確定、取締役は会見を開き頭を下げる事態に…
会社は信頼を失いボーナスもなくなります。
さくらインターネットでは、AnsibleのPlaybookというサーバーのレシピファイルを各作業担当者が作成、
実際にテストサーバに反映してチェックしながら上長がレビューを行い、
上長のレビューを通ったPlaybookのみが本番環境に適用されるというフローになっているようです。
(勉強会でさくらインターネットの中の人がヒューマンエラー対策として紹介していました)
何かしらのコード化されたコマンド実行内容を保存し、
どんなサーバを構築したか後から追えるようにしましょう。
致命的な状況に陥った時にすぐ復旧出来るようになりますし、致命的な設定を他のメンバーとダブルチェックやレビューで回避することが可能になります。
また、コンテナや仮想環境の知識も必要です。
今だと流行りのDockerに関しては職場の誰よりもあれこれ使って動作を調べてください。
なぜか?Dockerで不具合が出たらインフラエンジニアの責任ですが、これを見てもまだDockerを使いたいですか?
Dockerの本番運用 - POSTD
Qiitaや個人ブログではチュートリアルだけやって「便利そうだ!おしまい」な記事が散見されますが、実際に運用すれば罠が至る所に存在し、盲目的に信頼すると痛い目にあいます。
かといって何でもかんでも新しい技術を否定する老害になってはいけません。
例えばこのDockerはコンテナという思想でどのマシンでも同じ環境でアプリケーションを動かすためのアプリです。
このコンテナという設計は数多のインフラエンジニアが苦しめられた「俺の環境では動くけど本番環境では動かない」の銀の弾丸(になる予定)で、最終的なゴールにかなり近い存在だからです。
準備力を養うには、自分で使って動作を確かめるしかありません。
沢山の環境を考えながら作る事でハマリポイントが透けて見えるようになってきます。
4. 自動化
前項目では散々脅しましたが、
インフラエンジニアは覚えきれない程大量のサーバを面倒見ることになるでしょう。
自分の知識や出来る事が増えるに従って、
やらなければならないことが加速度的に増加しますので、手作業ではやってられなくなります。
抜け漏れの嵐に遭遇し、「新しいものには二度とチャレンジしねえ、枯れたら教えてくれ」に徹するインフラエンジニアも居ます。
最終的には他のエンジニアと同じく、自動化の為にどう動けば良いかが課題になるでしょう。
頑張れば頑張った分だけ自分が楽になるのでがんばってください。
【追記部分】
本格的に学習するのに適した書籍などございましたら、ご紹介いただけると幸いです。
2項目目のCLI力を養う際のバイブルです。
かわいい見た目とは裏腹に日経が出している硬派なムックです。
営業志望のパソコン触れませんなみんとちゃんが、手違いでシス管に配属され、
先輩に助けて貰いながらシス管としてたくましく成長していく物語です。
このGUI全盛期に、何故CLIなんぞという古臭いものと付き合わなければならないのか…
否!CLIってこんなに素晴らしいものだったのか…という情報処理の本質を教えてくれます。
情報処理の本質とはマウスをふりふりさせながら就業時間を潰したり、Excelの糞重い画面を前に矢印キーを必死連打し続けることではありません。
手は常にキーボードのホームポジションを維持、そしてコマンドを操り情報を左から右に一気に流し込むように処理するから情報処理なのです!
……熱くなりすぎました。
現在2巻まで発売されていますが、現段階のみんとちゃんの腕前は既に下手なエンジニアよりよほど上であり、現役エンジニアでも一度は読んでおくべき便利な必殺技が目白押しになっています。
投稿2017/11/08 01:04
編集2017/11/14 03:28総合スコア21158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
最も広義の意味でインフラと言ったら環境回り全てです。
例えば「クラウドサービスのインフラを構築する」っていったら施設などの準備から始まることがあります。
インフラとは単なる単語なのでそれだけで意味を解釈するのは不可能です。
前後の話をよく良く聞いて、分からない所は質問して正しく解釈して下さい。
ただしインフラに運用環境は含まれますが、運用技能や運用のノウハウは普通は含みません。運用環境を構築できれば十分です。
何を覚えるかではなく、とにかく何でもたくさん勉強することが必要です。
投稿2017/11/07 10:29
編集2017/11/07 10:30総合スコア4150
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
他の方も言っていられるようにインフラに関することを全般的にやっているエンジニアになります。
私もインフラ周りをやっていますが細かいことを挙げるとキリがないのでざっくり言うと、
「○○というWebアプリを使いたいから使える環境用意して!!」もしくは「○○がやりたいから出来る環境を用意して」と言われて自力で用意出来る人がインフラエンジニアかと思っています。
○○というWebアプリがRubyやPHPで動いていれば、RubyやPHPが動くサーバーが必要になりますし、
データベースを使用していればデータベースを載せる必要があります。
またアクセスやアプリの特定を考えてデータベースは別に構築することもあれば、障害時のことを考慮して複数構築することもあります。
アクセス数を想定して回線の太さも検討したり、Webの入り口を複数作成することもあります。
今は仮想環境で誰でも簡単に環境を作成できるので一度試してみるとよいかと思います。
インフラ側が見えてくるとソフトウェアの設計にも色々と考えるところが出てくると思います。
実際にはインフラエンジニアに向けてCiscoの資格やデータベース向けの資格などの取得を目標にされてみるのも良いのではないかと思います。
個人的には仮想化は進んできていると実感はしますが、まだまだオンプレが多く実際の物理サーバーを触ることも少なくありません。
その為、本当に幅広くなってしまうのでソフトウェアエンジニアと接点の多い部分(データベースや負荷など)から徐々に広げていくのが現実的かと思います。
投稿2017/11/08 00:58
総合スコア161
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
hihijijiさんの書いた通り「環境周り全て」が該当するかなと思います。
物を入れるとなると建屋やら電源やらもあり、工事屋さんとかCEさんも出てきますが・・・エンジニアはこの辺りの管理統制になる感じです。
エンジニアとしてみると何か色々ありますが、大きく以下の2つに分けられるかと思います。
※私はサーバエンジニア路線なので、そっちからの目線が多いです。
・ネットワークエンジニア
・サーバエンジニア
とりあえず大体上記に分けられて大分世界観が違います。どこの会社を見ても大体仲が悪いです(良いところの人スミマセン)
サーバエンジニアのうち特定製品や技術に特化していくとDBエンジニアとかになっていくのかなと
私もAWS等のクラウドをやりたいのですが、未だにオンプレ要求が強くサーバを触っています。
未だに物理製品の知識を求められますし、面倒なDCの調整や工事調整もしています・・・(やりたくないですが)
nameko_motoさんはソフト側のエンジニアと言うことであれば、ソフトが接している部分のミドルウェア⇒OSと知識を広げた方が良いのかなと思います。
投稿2017/11/07 23:58
総合スコア706
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
インフラエンジニアの定義が曖昧なので、最近企業の募集要項には、サーバーエンジニア、ネットワークエンジニア、データベースエンジニア、セキュリティーエンジニアなど詳細に記述される事が多くなりました。
何に特化したインフラエンジニアになりたいのか?は重要です。
インフラ知識と言う事であればインフラ系の資格を取るのが良いかと思います。
CCNA、LPIC、MCPなど
〉AWSなどのクラウドサーバーが普及し
のくだりですが、実は二極化して来ています。
クラウドサービスを使うのか、自前仮想サーバーを持つのか。
これは、経営層が思う以上にクラウドサービスが高価であったり、セキュリティーの観点からクラウドサービスを嫌ったり、また、クラウドサービスの定期メンテナンスによる数分の停止すら許されなくなって来た経緯があります。
なので、クラウドで良いサーバーはクラウドで、数分の停止すら許されなかったり、セキュリティー的にクラウドに置けないデータを扱う様なクリティカルなサーバーは、オンプレミスの仮想サーバー上でHA構成を組みつつコストダウンしたり、そのサーバーの性格により分けられていたりします。
ちなみに、ここ1、2年でクラウドのロケーションがやっと日本に出来始めていますが、例えば、アメリカにあるクラウドサーバーからログをローカルに持ってくるなど海底ケーブルを伝って来ますので、なかなか難儀な作業です。
クラウドで失敗した企業がオンプレミスに戻すと言う、本末転倒な事もおきていたりします。
ですので、必ずしもクラウドが万能なサービスとは言えなかったりします。
投稿2017/11/07 17:40
編集2017/11/07 17:48総合スコア86
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。