サーバー構成とは。サーバー構成を聞かれたら。(AWS編)

#はじめに
未経験でのエンジニア転職活動を初め、準備をしている中でよくある質問集をみていました。
その中の一つにこれは答えられないし、確かめないと！と思った内容がありました。

『ポートフォリオのサーバー構成を教えてください。』

サーバー構成？？？独学でもスクールで学んだ時も、サーバー構成なんて深く気に留めたことはなかったので、何をどう答えたらいいのかわかりませんでした。(お恥ずかしい)

サーバー構成を聞かれたら　で早速Google検索。以下のように同じような質問をなさっている方がいました。
https://teratail.com/questions/15235

回答として、
`自前/レンタル`
`OSとバージョン`
`CPUとメモリ（わかれば）`
`SSLの有無（場合により）`
`使用できる言語のバージョン （PHPなど）`
`データベースの種類`
などを意味しているらしく、この辺りを把握して答えられればいいらしい...らしい...

加えて、PCに詳しい父親にサーバー構成とはなんぞや。と尋ねたところ、
「どこの部分に対してのサーバー構成について尋ねられてるかによる。」
だそうです。

仮想サーバー内においてのCPUやメモリ、OSを尋ねられているのか、ハードウェアのCPUやメモリを聞かれているのか等々、逆に質問責めに合いました。
図にしてみると以下図のような感じとか。(適当に書いたから繋がり等には違いがあるかもと申しておりました)
![スクリーンショット 2020-09-04 11.18.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646665/ed76f49e-7ea1-a90b-1da9-02f93f244de0.png)

グレー部分について尋ねられているのか、ブルー部分を尋ねられているのかにもよるらしいです。
今回は『ポートフォリオの...』なので、ブルー部分になりますね。
※オンプレミスのサービスを提供しているような企業ですと、グレー部分に関する知識を問われるかもわかりません。

##サーバ構成について

※筆者はポートフォリオをAWSを用いて公開したので、それを元に書かせていただきます。

##`自前/レンタル`
これは、サーバーが自前のものかレンタルサーバーかを聞かれてますね。
レンタルサーバーとしてよく聞くのはheroku,AWS,さくらのVPSとかですかね。
レンタルサーバーの種類・選び方などは、下記Qiita記事がわかりやすいです。
[個人開発者向けサーバ環境の選び方まとめ（heroku,aws,firebaseなどなど）]("https://qiita.com/you8/items/670bfa6573cec2494c96")

##`OSとバージョン`
これに関しては各仮想開発環境やサーバー内で下記コマンドを実行していただくとわかります。
仮にvagrant環境のOSとバージョンを調べるのであれば、vagrantディレクトリで、
vagrant up → vagrant sshをした後に下記コマンドの実行。
AWSで公開しているポートフォリオなどであればec2にSSH接続し、アプリ直下で下記コマンドの実行。

```:ターミナル/開発or本番環境内にて
cat /etc/os-release
```

ちなみにAWSであれば、インスタンスを作成する際に、『Amazonマシンイメージ』の選択をする場面があるかと思います。これはインスタンスの作成に必要なソフトウェア構成(OS,アプリケーションサーバ等)を含むパッケージとなっています。
上記コマンド実行時に表示されるのは、この時選択した物が表示されます。
![スクリーンショット 2020-09-04 11.27.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646665/f88c7682-a50a-9bc5-a7aa-a355e6294e52.png)


##`CPUとメモリ`
ここの部分は正直理解したとは言えません。(難しい)
**「仮想サーバーでどれくらいのCPU、メモリを用いてサービスを運用した経験があるのかな？」**といった部分を知りたいのかもしれませんし、あくまで一つ質問の意図を考えただけなので必ずしもここが問われてるとは限りません。。。
筆者はインフラ部分はAWS１００％使用の企業の面接の際に、このような質問をされたので、
こういった意図なのかな？と捉えたに過ぎませんのでご了承ください。

用意できる回答としては、AWSのインスタンスタイプの時に選択した、t2.microとかt2.largeとかの部分に記載されているvCPU(仮想CPU)の数と、メモリの量(t2.microであれば1GiB)に着目してください。
![スクリーンショット 2020-09-04 11.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646665/a2284a4f-3cb2-94da-bdf2-4dbd85986a47.png)


また、CPUとメモリの役割については以下サイトを参照してみてください。
[・今さら聞けない、メモリ、CPU、ハードディスクの役割の違い]("https://koneta.nifty.com/koneta_detail/141009000021_1.htm")
[・CPUについて]("https://www.pc-master.jp/words/cpu.html")

【余談】メモリの量が小さすぎると、それを超える処理が来た時に処理が追いつかず、動画であればスムーズに再生されず、コマ送りみたいなったり...など端末でのあらゆる動作が遅くなるとか

##`SSLの有無`
筆者勉強中につき、現時点では割愛させていただきます。
SSLの有無を答えられればいいでしょう！(聞かれたら答えるくらいの準備でいいと考えています。)

##`使用できる言語のバージョン`
これも使用言語のバージョン確認ということで、おそらくインストール時に把握してると思われるので割愛します。
Rubyをインストールしたけどバージョンを忘れてしまった方は、ec2に接続した後に、**ruby -v**とコマンドを入力すれば確認できます。

##`データベースの種類`
データベースの種類は,RDSでデータベースの設定で選んだものになります。MySQLとかPostagreSQLとか...
![スクリーンショット 2020-09-04 13.06.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646665/430ed38c-1c43-1b3b-6c8b-9779a10b74c6.png)

設定後の確認はAWSコンソールのRDS → データベースから確認が可能です。(忘れる人がいないとは限らないので念のため)

#最後に
今回は面接で聞かれた場合を想定しての記事なので、質問に対して的確に答えられればベストですが、一番は**『知ったかぶらないこと』**ですね。
分からないことはどういう部分を知りたいのか聞いてみるといいでしょう！

筆者は、『WEBサーバーとかのことでしょうか？』と尋ねました。
(サーバーは何を使用しているかということでしたので、webサーバーはNginx、アプリケーションサーバーはpumaを使用、データベースはMySQL...等々答えました。)

AWSは極端にいえは、何も考えずともポチポチしていればなんでも設定できてしまいます。
カリキュラムやネット記事を利用して意識せずAWSを構成していると、結局のところ何を設定しているのか・設定の理由や中身を理解できないままで、能力も身につきません。

自分がなんの設定をしているのか、なぜそれを選択しているのか、サービスの中身に関して興味関心を持って扱えるようになるといいなと思いました。(私も頑張ります！)

ちなみにAWSの各サービスの理解用参考書籍として、**『図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書』**を読了しました。
とても分かり易かったので、書店に寄った際はぜひ手にとって見てみてください。初心者にはオススメだと思いました。