100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて

本日はクラウドサービスについてです。

昨日までのはこちら

[100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1](https://qiita.com/otupy/items/cd2315dcb38671cfded0)

[100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1](https://qiita.com/otupy/items/61a97863f6df14171994)

[100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1](https://qiita.com/otupy/items/2f71d5f9c754b29d9555)

[100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1](https://qiita.com/otupy/items/6d1e5453f530e07b7aec)

[100日後にエンジニアになるキミ - 37日目 - データベース - SQLの環境構築](https://qiita.com/otupy/items/a0896107989805abc71d)


## クラウドサービスについて

**クラウドサービス**

クラウドサービスとは何でしょうか？

クラウドサービスはインターネットを通じて
サーバーなどのコンピューター資源を提供するサービスの事です。
![alt](https://www.soumu.go.jp/main_sosiki/joho_tsusin/security/basic/service/img/ill13_01.jpg)
参考：総務省
https://www.soumu.go.jp/main_sosiki/joho_tsusin/security/basic/service/13.html

**オンプレミス**

`クラウド`の対義語として`オンプレミス`という言葉があります。
これは自社でサーバー資源などを保有してデータセンターなどに配置し
それらのリソース管理を主体的に行う運用形態のことを言います。

いわゆる自社運用型です。

この場合は新しいサービスを始めるのに
1.サーバーを用意して
2.データセンターを建てるか契約を結び
3.インフラエンジニアなどの管理要因を雇ってサーバーを設置
4.OSやミドルウェアのインストール作業
5.ネットワークの開通作業

などかなりの手間とコストがかかります。

これに対してクラウドサービスはすでにデータセンターに配置された
サーバー群を借りる契約形態になります。

主に2010年頃からこのような形態と区別するために
`オンプレミス`という用語が生まれた形になります。

**メリットデメリット**

2010年代後半はクラウドサービスでの開発が主流となってきました。

オンプレミスでなくクラウドサービスを使う主なメリットデメリットは以下の通りです。

| 考慮点 | クラウドサービス | オンプレミス |
|:--|:--|:--|
|課金体系|従量課金|一定額|
| 初期コスト | 安く抑えられる | かなり掛かる |
| 開発コスト | 安く抑えられる | それなりに掛かる |
| 運用保守コスト | それなりに掛かる | それなりに掛かる |
| 撤退費用 | 安く抑えられる | それなりに掛かる |
| セキュリティ | 気をつけないと危ない | 自社管理できていれば安全 |
| カスタマイズ性 | 柔軟 | 大変 |
| 可視性 | 気をつけないと低くなる | 自社管理なら高い |
| 拡張性 | 高い | 低い |

費用の面ではクラウドサービスは簡単に始めることが出来て運用コストも圧倒的に安いです。
サーバー1台を1月借りても数千円〜です。
一方でサーバーを買うとなると数十万円からです。

コスト面では初期コスト、運用コスト、撤退コストには大きなメリットがありますが
金融業や防衛産業など、ビジネスモデルによってはセキュリティーを重視するために
オンプレミスの方が望ましいと考えられる事もあります。

また、クラウドサービスは従量課金性であるので、うっかり利用などによる
加重課金の発生による`クラウド破産`という点も気をつけるべき点です。

例をあげると：
BigQueryのクエリの書き間違えによるデータベース総ナメによるハイパー課金
テストで利用したサーバーの立ち上げっぱなし千台分の鬼課金
lambdaのin-out設定の間違えによるうっかりイベントの悲しい課金

慣れていないと従量課金による事故が多発するのがクラウドサービスの特徴でもあります。

DeepLearningなどでGPUサーバーをフル稼働させ続けるような用途だと
`オンプレミス`の方が安くつく事もありますし
たまにしか稼働しないGPUサーバーであればクラウドサービスの方が安くつき
常に新機種を用いることができるというメリットもあります。

ものすごく大量のデータをフル稼働で検索しまくるといったシステム要件を鑑みて
`クラウドサービス`の方が料金が高くなるという場合は`オンプレミス`に切り替えるなど
システム要件やコスト感を見極めた上で柔軟なシステム設計が出来るように考える必要があります。

## 主なクラウドサービス

国内外でたくさんのプレーヤーがおりコストや機能面で選択することになります。

主なクラウドサービス事業者などは下記の通りです。

| 事業者 | サービス名称 |
|:--|:--|
| アマゾン | AWS(Amazon Web Services) |
| グーグル | GCP(GoogleCloudPlatform) |
| マイクロソフト | Azure |
| アリババ | Alibaba Cloud |
| オラクル | OCI(Oracle Cloud Infrastructure) |
| IBM | IBM Cloud |
| NTTコミュニケーションズ | Cloud n |
| 富士通 | Fujitsu Cloud Service S5 |
| ニフティ | ニフティクラウド |

この他にもたくさんの事業者が存在しますが
国外では`AWS`が圧倒的に強く、国内では`富士通`が頑張っているようですね。

機能面では`AWS`の充実度は素晴らしく、ない機能がほとんど感じられないほど
逆に機能があり過ぎて困るほどです。

とは言え全てのクラウドサービスを使えるようになる必要はなく
抑えておくのは`AWS`,`GCP`だけで良いのではないかと思います。

社内政治などでどのクラウドを使うのか、というのは変わってきますし
自分で勉強するのであれば、よく使われる頻度の高い`AWS`,`GCP`だけで十分です。

それ以外は使う羽目になったらお勉強するか逆に使うのやめましょうと提案しましょう。

## クラウド関係の用語について

抑えておきたい用語がいくつかあります。

**SaaS**
`Software as a Service`の略でサースやサーズなどと呼びます。
いわゆるクラウドベースで提供しているソフトウェアのサービスです。
電子メールやグループウェア、管理会計ソフトなどがこれに当たります。

**PaaS**
`Platform as a Service`の略でパースと呼びます。
インターネット経由での、仮想化されたアプリケーションサーバや
データベースなどアプリケーション実行用のプラットフォーム機能の提供を行うサービスのことで
`AWS`や`GCP`などはこれに当たります。

**IaaS**
`Infrastructure as a Service`の略で、インターネット経由で
デスクトップ仮想化や共有ディスクなど、ハードウェアやインフラ機能の提供を行うサービス。
HaaS（Hardware as a Service）と呼ばれることもあります。

あまり利用する機会はないかもしれません。

**DBaaS**
`Database as a Service`ディービーアースとか呼ぶようです。
インターネットを通じてオンライン上のデータベースを利用することができる提供形態です。


**BaaS**
`Backend as a service`バースト呼び
モバイルアプリのバックエンド機能ををインターネットを通じて提供する形態です。

**MBaaS**
`MobileBackend as a Service`エムバースと呼び、BaaSと同義となります。
MobileのMを付け加え、スマートフォン用サービスであることを強調しています。


**インスタンス**
クラウドサービス上で借りられるサーバーのことです。
基本的にはサーバーそのものを借りるのではなく、仮想的なコンピュータとして
サーバーのメモリやCPUの一部分を間借りする形になります。
この借りたコンピューター資源のことをインスタンスと言っています。

インスタンスはプラットフォーム、CPU、メモリ、ストレージの４項目で
スペックが値として示され、利用者は要件にあったインスタンスを選択して借ります。

コストは従量課金で、時間分の課金がされることがほとんどです。

**リージョン**

クラウドサービスのデータセンターが存在する地域のことを指します。
世界で展開しているサーバーは様々な国の各地域にデータセンターを立てているため
リージョンは複数存在します。

`AWS`などでは国内では`東京`リージョンなどがあります。


**ゾーン**
リージョン内の地域を細かく分けた概念になります。
クラウドサービスでは障害が発生することがあり
このゾーンの設計の仕方などで、障害に対する耐性が変わってきます。

`AWS`では全世界にたくさんのリージョンがあり
その中に`アベイラビリティーゾーン（AZ）`と呼ばれるデータセンターが複数カ所存在します。

システムの冗長性を保つために、ゾーンを分けてシステム構成を考えたりする形を取っています。


![alt](https://image.itmedia.co.jp/news/articles/1908/28/ki_1609376_aws03.jpg)

参考：
https://www.itmedia.co.jp/news/articles/1908/28/news127.html

**オートスケール**
サーバーの負荷状況に応じ、自動でサーバーの割り当て数の増減を行う仕組みのことです。
最近のクラウドサービスではこの仕組みにより、稼働状況やイベントに応じて
サーバーの台数を増減させる運用をしています。




## まとめ

クラウドサービスの概念や主要な用語などを押さえておこう。
クラウドの開発に興味があるなら実際に試し借りしてみよう。
`AWS`,`GCP`は無料お試しクーポンをよく発行しているよ。



君がエンジニアになるまであと58日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython