なんとなくわかるインフラ構築 〜物理インフラ編
はじめに
社内向けに今まで構築してきたインフラ構成を伝えようと思ったが、そもそもインフラについて知らない人が構成図見てもなんのこっちゃという気持ちになるだろうと思ったので、インフラ構築ってこういうことしてるんだよ〜となんとなく知ってもらうために、物理的なインフラ構築を例に説明していく。
インフラ構築前の説明
インフラって何?
- Infrastructureの略称
- 社会や経済、あるいは国民生活が拠って立つ基盤となる、必要不可欠な施設やサービス、機関、制度、仕組みなどのこと
- ITにおけるインフラとは、システムを構成するサーバ、ソフトウェア、ネットワークなどのこと
- 皆が開発したアプリケーションを動作させて、HTTPリクエストがきたらHTMLとかJsonをレスポンスとして返すような環境のこと
インフラ構築に必要なものは?
- サーバ機器
- サービスを提供するコンピュータのこと
- 普段使ってるPCもサーバとして動かせるよ
- ミドルウェア
- サーバにインストールして使う、色んな機能を提供してくれるやつ
- ミドルウェアってなに??って聞かれるとちょっと説明に困る
- nginx(Webサーバ)、mysql(DBサーバ)など
- ネットワーク
- ネットワーク回線、インターネットプロバイダ、ドメインなど
- 同一ネットワーク内の機器や、外部ネットワークにつながるために必要
実務でよく聞く○○環境って何?
- 本番環境
- サービスが動いている本番の環境
- prd環境、production環境などと言われたりする
- ステージング環境
- 本番環境にデプロイする前に検証目的で使用される環境
- 本番環境とほぼ同じ構成になることが多い
- stg環境、staging環境などと言われたりする
- ローカル環境
- ローカルで開発する使用する環境
- dockerを使って動かすことが多い
インフラ構築の流れ
企業Aに物理的なインフラを構築し、アプリケーションを動作させる環境を作る例を考える。
実務では要件や予算に合わせて構成を考えるが、今回は省略して最低限の構成で考える。
サーバを設置する
企業Aのサーバルームにサーバを設置する。
設置スペースの確保、電源ケーブルやLANケーブルの配線など地味に面倒臭い。
サーバ設置後は電源を入れ、キーボードとモニタを繋げてポチポチと後述の作業を行っていく。
ミドルウェアをインストールする
アプリケーションの動作に必要なミドルウェアをサーバにインストールする。
今回の例だとWebサーバにnginx、Appサーバにphp-fpm、DBサーバにmysqlを使用している。
上記例だとnginxがリクエストの窓口になり、nginxからphp-fpmにリクエストを渡し、php-fpmで処理を実行して必要あればmysqlにアクセスする、という流れになる。
なお、この時点ではまだ社外からはサーバにアクセスすることができない。
ネットワークの設定をする
社外からのアクセスを会社Aのサーバに流すようルーターを設置し、ルーティングの設定を行う。
このあたりはネットワークの知識がないと設定するのが難しいかも。
ここまで設定して、上記例のユーザが会社Aのサーバにアクセスすることができるようになる。
DNSの設定をする
ネットワークの設定を行えば会社Aのサーバにユーザがアクセスすることはできるようになったが、このままだとブラウザのアドレスバーに会社AのIPアドレスを打ち込まないとアクセスはできない。そこで、https://example.com のようにドメインを用いてアクセスできるよう、DNSの設定を行う。
DNSの設定はドメイン管理サービス(お名前.comやVALUE-DOMAINなど)で行い、ドメイン(上記でいう example.com)を取得し、そのドメインを会社AのIPアドレスに紐づける。
インフラの構成について
上記のインフラ構築の流れで説明した構成は、あくまでもアプリケーションを動作させるために必要な最低限の構成になっている。
そのため実際に運用する場合は、信頼性や可用性などといったRASISを考慮して構成を考える。
たとえば上記の例でいうと、サーバへのアクセス数が増えてきた場合にサーバが処理しきれず、サーバーダウンする可能性などが考えられる。
それを回避するために、入り口部分になるWebサーバを冗長化し、負荷を分散させたりする。
アプリケーションからDBサーバにアクセスする頻度が高かったり、クエリの実行時間が長い場合などはDBサーバに負荷がかかる場合は、DBサーバを冗長化したりする場合もある。
おわりに
「インフラは難しそうだから触りたくない」とよく言われる。確かにインフラ全体で見ると何やってるか分からんし萎縮する気持ちも分かるが、インフラの要素を一個ずつ見ていくと割と理解が容易だったりする。プログラムもそうだけど、実際に触って動かす方が理解しやすかったりするので、興味がある人はインフラ触ってる人に声かけて一緒に動くものを作ってみたりするといいかもしれない。
次回はAWSでの構築や、Terraformを用いたインフラの管理について説明する予定。
参考
なんとなく理解したい人向け
- サーバ - 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
- ミドルウェア - 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
- ネットワーク - 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
もう少し知りたい人向け
※アフィリエイトリンクだよ
Discussion