クラウドサービスとは ~若手クラウドエンジニアが語るクラウド基礎の基礎~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363360/0ae176b8-5b20-be64-b03a-1a4cf960d138.png)

##はじめに
どうも、Ryoです。
突然ですが先日高校時代の友人に会った時に彼がクラウドサービスについて学んでいると聞き衝撃を受けました。
彼はIT企業の社員でもITエンジニアでもなく大手食品メーカーの企画担当の社員です。彼の会社ではとにかくIT人材を募集しており特に**クラウドエンジニアや機械学習エンジニアには積極的なアプローチをしているとのことでした。**
IT界隈ではエンジニアだけでなくビジネス側（企画、営業、マーケティングなど）の人材にもITの知識が求められるといわれて久しいですが、ついにその流れがメーカーや金融業界などにまで及んでいるのだと実感しました。

とはいえクラウドサービスはIT初心者には難しい概念であり専門用語も多いので勉強のハードルも高いと思います。
そこで今回はIT初心者の方にもわかりやすいようにクラウドサービスについて従来のシステムと何が違うのかという観点をメインに解説します！
こちらの記事を理解いただければクラウドという言葉だけをふわふわ振り回してしまう~~(クラウドだけに)~~こともなくITの世界に一歩踏み出せるはずです。
それではお付き合いください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363360/daf0225b-951e-91a3-36d9-f94d7a95037c.png)
※途中でITの専門用語を使う際には注釈を入れますのでご確認ください。

##システム開発・保守の難しさ

クラウドサービスについて学ぶ前に従来のシステム開発の課題について解説します。
システム開発・保守における解決困難な課題を解決するために生まれ、普及したのが現在のクラウドサービスなのでその経緯を把握することでクラウド技術のメリットをしっかり把握できるはずです。

+ 保守：完成したシステムにメンテナンスをしたりシステム障害が発生した際に復旧作業を行ったりして安定稼働を維持すること。


###1. システム開発の流れとシステムインフラ
<code>システム開発のV字モデル</code>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363360/7686572b-ae5f-221c-b5d8-bca658648a94.png "V字モデルとは？")
>資料出所：[V字モデルとは？](https://webrage.jp/techblog/v_shaped_mode/ "V字モデルとは？")

まずシステム開発について説明します。基本的にシステム開発は図のようにV字モデルを描いて順番に進められていきます。
図には専門用語が多いので簡単に言ってしまうと
**顧客の要望を聞く⇒設計する⇒作る(プログラミング=コーディングやサーバーのセッティングなど)⇒テスト⇒一般公開**
という感じです。

こうしたシステム開発を始めるにあたって絶対に必要なのがサーバーやネットワーク機器などのハードウェアと呼ばれる機械の数々です。
個人で言うならパソコンとネット回線を買ってくることに相当しますが**大規模システムにおいてはアプリの安定稼働とセキュリティのために高性能で高額な機器を大量に購入する必要があります**。
高価な機器を買いそろえて専門のエンジニアがセッティングを行って初めてスマホアプリやWebサイトの開発が始められる、というわけです。
自社でシステムを買いそろえて保守まで行う企業もありますが多くの企業はデータセンターと呼ばれるシステム機器管理の専門業者（国内では富士通、IBM、日立、NECなどが有名）と契約して保守作業を外部委託しています。こうした保守費用も高額になることが多いです。
このように実際に機器を購入して社内やデータセンターでシステムを動かす形態のことを**オンプレミス型**と言います。

+ インフラ：インフラストラクチャーの略で主にシステムを支えるサーバーやネットワーク機器のことを指す。インフラエンジニアと呼ばれる作業員が設定を行うが、極めて高度な知識が必要。

###2. キャパシティ予測
機器を買いそろえる際に絶対に必要な情報があります。それは[キャパシティ](https://www.itmedia.co.jp/im/articles/0908/24/news084.html#:~:text=capacity&text=IT%E8%83%BD%E5%8A%9B%E6%8C%87%E6%A8%99%E3%81%AE1,%E3%81%A7%E3%81%8D%E3%82%8B%E6%9C%80%E5%A4%A7%E5%80%A4%E3%81%AE%E3%81%93%E3%81%A8%E3%80%82&text=%E3%81%93%E3%82%8C%E3%81%AF%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89%E3%81%AE,%E5%A2%97%E6%B8%9B%E3%81%95%E3%81%9B%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%E3%80%82 "キャパシティとは")です。
キャパシティとはシステムの許容量を図る指標のことで多くの人がアクセスするシステムには大きなキャパシティが必要です。
例えばベンチャー企業が初めて作ったアプリであれば1日当たり数百~数千アクセスで済むため比較的安価で性能の低い=少ないキャパシティのシステムで十分です。
しかしYoutubeやFacebookなど1日当たり数億~数百億のアクセスが発生するような大規模システムではこうはいきません。巨大なキャパシティを有するシステムを構築する必要があります。
こうしたキャパシティは開発の段階である程度見込みを予測し、**予測される最大アクセス数に耐えられるようなキャパシティを持つシステム**を作り上げる必要があります。後から高性能なコンピューターに切り替えることもできますがテストをやり直したり、作業の際にサーバーを一時停止したり、データセンターの作業員に高額な作業費を払ったりする必要があるので簡単ではありません。
アプリにどれだけ需要があるかは企画チームやマーケティングチームが行うことが多いですが**どんなにしっかり予測してもぶれが生じます**。結果として無駄に高性能なシステムを作ってしまって保守費用が払えなくなったり**予想外のアクセス数でシステムがダウンしてサービス停止(これがエンジニア的には最悪)に追い込まれてしまったり**するのです。
これがキャパシティ予測とシステム開発の難しさです。

###3. システム障害対応
世界最大のサービスであるGoogleであろうが国内最大手の金融機関であろうが、どんなに優れたシステムでも必ず障害は発生します。
通常障害を回避するためにはサーバーやネットワークを複数準備しておいて1つのサーバーがダウンしても別のサーバーが処理を継続し、システム全体としては停止しないように設計を行います。
しかしどれだけ策を講じても障害には無数のパターンがありすべてには対応しきれません。例えば「サーバーが大丈夫でもアプリの画面表示が崩れてしまう」「予備のデータベース用意していたのに非常時に切り替わる機能が作動しなかった」「すべて正常に稼働しているけど画面の表示に3分かかる」といったような形です。
こうした障害対応は原因究明のために高度な知識が必要なので調査が長期化してしまうこともありますし、社内の一部の人にしか調査できなくなる**「属人化」**を引き起こしやすいです。

###4. ソフトウェア、OS、機器の更新作業
システムを開発してもメンテナンスに終わりはありません。
なぜならシステム上で動いているソフトウェアやOSは日々セキュリティ対策やツールの開発が行われておりversion 2.0.2のように更新があります。スマホアプリも定期的に更新がかかるのでイメージできるかと思います。
大規模なシステムの場合複雑にソフトやOSが関連しあっているので、なんの調査もなしにバージョン更新を行うとシステム停止してしまうことも多くあります。影響調査には膨大な時間と費用が掛かりテストにも人員が必要です。
加えてサーバー機器本体にもディスクやCPUの劣化が起こるので定期的に交換する必要があります。こう言った更新作業を影響なしに完遂するのは至難の業です。

###5. アーキテクチャ更改
システムによっては「アーキテクチャ更改」と言ってサーバー数を増減させたり回線を効率化して通信速度を向上させたりする大規模な作業を行う場合もあります。
こうした作業はアプリが人気になってユーザー数・アクセス数の増加に耐えられなくなった場合や外部委託先の交代によって半強制的にシステムを移行しなくてはいけない場合などがあります。
物理的なサーバーを多数抱えていた場合アーキテクチャ更改には多くの費用と労力がかかるだけでなくセキュリティ面での検証も十分に行わなくてはいけません。アーキテクチャ更改を先延ばしにしてしまった結果アクセス増に耐えられずにシステム停止したり機能が拡張できずにビジネスチャンスを失ったりしてしまいます。

##クラウドサービス
###1. クラウドサービスの概要
**クラウドサービスは前述のようなシステム開発・保守の課題を解決するべく生まれました。**
クラウドサービスを使うと、物理的な機器を購入する代わりにAmazonやMicrosoftなどのクラウドプラットフォーム企業が用意した仮想のコンピューター（Virtual Machine）をインターネット経由で借りてシステム構築ができるようになります。
例えば今まで**「コンピューターを買う⇒設置する⇒電源と回線を確保する⇒OSの設定をする⇒・・・」という形で準備していたマシンセッティングが「画面上で選んでクリックする」で完了します。**しかも日本だけでなく世界中にリアルタイムで展開できるので予備のマシンを用意するのも一瞬です。
<code>Amazonが展開するクラウドサービス「AWS」のコンソール画面</code>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363360/5d79f8e6-31da-093e-b1c1-5003665e022d.png)
> マシンの性能やOSを設定するだけで数分でサーバーを全世界に展開できる。

+ コンソール画面：クラウドサービスを管理する管理画面のことですべてのサービスはコンソール画面から起動できる。

**つまり従来専門の人材が何日も何週間もかけて行っていた作業を普通の人間が数分で完了できるということです。**
コマンドにももちろん対応しています。
例えば「Webサイト用にアメリカにサーバー1台ほしい」と思ったらコンソールからこのようなコマンドを実行するだけで数分で完了します。

```
aws ec2 run-instances --image-id AMI ID --count 1 --instance-type t2.micro --key-name key-pair-name \
--security-group-ids ID of the security group created for EC2 instance \
--region us-west-2
```
> 資料出所：[Amazon EC2 リソースを作成する](https://docs.aws.amazon.com/ja_jp/efs/latest/ug/wt1-create-ec2-resources.html "Amazon EC2 リソースを作成する")

クラウドサービスはよく3つの特徴で表されます。
これらの特徴が生むメリット・デメリットについては次のトピックで解説しますのでもし「クラウドサービスってなに？」と誰かに聞かれたら以下の3点を得意げに話してください(笑)

+ **プラットフォーマー（Microsoft、Amazon、Googleなど）が提供**
+ **インターネット経由でITリソース（サーバー、ネットワーク、データベースなど）を利用できる**
+ **従量課金であること**

###2. クラウドサービスのメリット

1. **固定費の変動費化**
企業がオンプレミスで物理的なマシンを保有した場合それらの設備は初期投資及び月々のメンテナンス費用などが固定費としてのしかかります。システムを使おうが使うまいがほぼ一定してかかる費用だからです。
これらは特に新規にシステムを作ってサービスを展開しようとしているベンチャー企業などの場合大きなハードルとなります。
しかしクラウドサービスを使用した場合固定費は不要となりサービスを使用した分だけ従量課金でクラウド企業に支払うことになります。
ベンチャー企業も大企業も提供するサービスの規模に応じた費用になるのでシステムを運営しやすくなります。

1. **水平オートスケーリングによるコスト削減**
クラウドサービス最大の長所ともいえるのが**オートスケーリング**です。
オートスケーリングとはアクセスが増えるとサーバー数が増加してアクセスを処理し、アクセスが減ると減少して元に戻るという仕組みのことです。
オンプレミス型システムではアクセスが増えたからと言ってすぐにサーバーを増やすのは不可能です。サーバー構築には数日かかるので秒単位のアクセス増減に対応するのは現実的ではありません。
しかし**クラウドサービスであれば瞬時にサーバー数を増減させられるのでシステムがダウンするリスクを減らすことができます**。
<code>スケーリングの概要</code>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363360/5a532251-1d1b-056f-516b-44582f36787f.png)
<code>オートスケーリングのイメージ</code>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363360/38f55755-548b-c039-4f6b-44c8afb037a3.png)
そして何より瞬時に増減が可能ということは、**サーバーを最大アクセス数に合わせて構築する必要がなくなる**ということです。
前のトピックで物理的なサーバーは最大アクセス数に合わせた規模の機器を用意しなければダウンする、と説明しました。これを行うとアクセスが少ないときは無駄に高性能ということになり固定費として経営を圧迫します。クラウドであればこうした心配はありません。

1. **キャパシティ予測が不要に**
同様に最大アクセス数に合わせる必要がなければシステムのキャパシティを予測する必要もなくなります。
厳密にはクラウド上でもキャパシティによって使うべきサービスは微妙に異なりますが、オンプレミスでシステムを作るよりもはるかにコストを削減できる上にシステムの増強も容易です。企業はシステムの不確定要素を削減しサービス自体の改善に集中することができます。

1. **速度と俊敏性の向上**
クラウドサービスであればサーバーやネットワークだけでなく今ではデータ分析基盤まで瞬時に用意できます。
これにより新規事業を始める際にテストサーバーをすぐに構築して実験したり分析基盤の構築改善サイクルを高速で回したりすることができビジネスをすぐに軌道に乗せることができます。

1. **保守運用費の削減**
物理的なサーバーの管理はクラウド企業がすべて行ってくれるため利用企業は作業費用を大幅に削減できます。
さらに最近流行りのサーバレスサービスを利用すればOSやソフトウェアの更新管理やセキュリティ対応まで不要となり従来に比べて極めて低額・少人数で大規模システムを運用できます。

1. **数分で世界中に展開できる**
例えばAWSは2021年現在21か所のリージョンを利用することができます。
つまり日本とアメリカで1つずつサーバーを持っておきどちらかが災害などでダウンした際に即時切り替える、といった地域分けによる障害対策が世界規模で行えます。
また税金や利用状況によって同じサービスでも料金が違うこともあるので安い地域で展開するという戦略も可能です。
<code>AWSは世界中に拠点がある</code>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363360/e915c312-8a62-9516-5ff0-fcc26ab8dcb7.png)
>資料出所：[リージョンとゾーン](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html "リージョンとゾーン")

###3. クラウドサービスのデメリット
1. **ベンダーロック**
クラウド企業にシステムの中枢を任せきりにすることになるため他のサービスに移行するのが難しくなります。
こういった状況をベンダーロックと言い、価格交渉や条件交渉などの際に不利に働くことにもなります。
ただこれは旧来のデータセンターでのオンプレミスシステムでも問題になっていることなのでクラウド独自のデメリットではないです。

1. **エンジニア不足**
クラウドは世界中で普及していますがまだまだクラウドエンジニアは不足しています。
現代のITにおいてクラウドを扱えないことはビジネス上の大きなロスにつながるため今後もクラウドエンジニアの獲得競争が続くと考えられます。

1. **クラウド側の障害の際は復旧を待つしかない**
システムを任せている以上クラウド側で障害があった場合復旧を待つ以外にありません。
良くも悪くもまかせっきりにするのがクラウドサービスの特性です。これを防ぐためにはオンプレミスで予備システムを構築する必要があるでしょう。

###4. オンプレミスとクラウドサービスの比較まとめ
分かりやすく図にまとめました！
これを覚えていただければとりあえずOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363360/f6947276-ce70-4d7b-e864-dfb6bb292b0e.png "picture_01")

##クラウドサービスの未来
ここまでご覧いただいてクラウドサービスのメリット・デメリットがなんとなくつかめていただけたと思います。
クラウドサービスが本格的に普及し始めた結果その形態は変化を遂げています。
現在の流行りは

+ **AWSとGCPを組み合わせるといったクラウド企業をまたいだシステム開発である「マルチクラウド」**
+ **クラウドとオンプレミスを組み合わせた「ハイブリッドクラウド」**

など組み合わせによっていいとこどりをする構築です。
このいいとこどりには**アーキテクチャが複雑になりすぎる**という欠点もありますがクラウド界隈が日々進化していることを感じられるでしょう。
将来確実に求められるスキルですので皆さんもぜひクラウド技術の勉強や業務への導入にトライしてみてください！！
それではご覧いただきありがとうございました！