【クラウド技術基礎知識】代表的な3つのクラウドタイプとその特性について
こんにちは、コル(@bravecol)です。
現場でクラウド開発経験のない方向けに開発及び利用ガイド作ることになりまして本日もクラウド解説です。
「クラウド技術に手を出す前に基本的な違いを知っておきたい」
「結局どのクラウドサービスを選ぶのがいいのか?」
「実現できることやスピードに差はあるの?」
という悩みがこの現場に来る前の僕自身にはあったので本日も備忘録として残しておきます。
本記事は下記の続編になります。
【なぜクラウドへの移行を推奨するのか】DXと現状の問題点
「クラウドって何?」「なんでクラウド必要なの?」っていう人は上記をご参照ください。
代表的なクラウドのサービスタイプ
代表的なクラウドのサービスタイプとして主に下記3つのタイプがあります。
- IaaS(Infrastructure as a Service)
- PaaS(Platform as a Service)
- SaaS(Software as a Service)
逆にクラウドではない従来の提供方法をオンプレミスと言います。
言葉だけ言っても分からないと思うので違いを図に示します。
はい。「CaaS、FaaSって何?」「3つじゃないじゃん?』と思った方、多分僕と性格似てます(笑)
とりあえず3つと思ってください、詳細は後で記載します。
オンプレミスと上記のクラウドタイプの違いは主に管理領域の違いです。
例えば従来の方法のオンプレミスの場合、社内システムとして何かを構築するにも、ExcelやPowerPointを使うにも社内でPC、OS(Windowsなど)、Officeなどのソフトウェアといったもろもろを準備しなくてはいけませんでした。そして準備をしていざ仕事を開始したとしても、管理は会社だったり開発者だったりするため「PCが壊れました」「Excelが開けなくなった」とかその対応にまで時間と労力を割かなくてはなりませんでした。
クラウドのIaaS、PaaS、SaaSは資材の管理を自分たちではなくクラウドベンダー(MicrosoftやAmazonなど)にお任せして管理コストを削減することができます。
それぞれ違いや特徴があり、システムのニーズに合わせてどれが最適か変わるので合うものを選択しましょう。順番に特徴を解説していきます。
また今回はそれぞれのタイプに該当する例としてクラウドサービスとして3強になっているAWS、Microsoft Azure、GCPより対象のサービスも記載します。
IaaS(Infrastructure as a Service)
読み方は「イアース」「アイアース」と呼びます。(と呼ぶそうです、僕は現場で正直発音した事ないです^^;)
これは仮想化技術を利用してCPUやメモリ、ストレージなどのITインフラをインターネット経由で提供するサービスのことです。
- 仮想サーバーやインフラの管理が不要でOSより上の層をユーザーは利用
- OS上のソフトウェアはユーザー自身の管理のため自由度が高い
- 反面管理コストはオンプレミスとそこまで変わらない
という特徴があります。
これに該当するサービスの例としてAWS EC2、Google Compute Engineなどがあります。
正直最もクラウド開発としてのメリットを引き出せて、エンジニアの力をフルに発揮できるのはこのタイプです。管理コストは確かにありますが、テレワークの必要性を迫られる今の時代セキュリティ問題などありますがオンプレミスから柔軟に移行ができます。クラウドDBとオンプレミスDBの共存とかも可能なので、大企業のシステム移行にはこの形式が一番合致すると個人的には感じてます。
PaaS(Platform as a Service)
ソフトウェアを構築及び稼働させるための土台となるプラットフォームをインターネット経由で提供するサービスのことです。
- 開発者はアプリケーション作成に専念でき実行環境を意識する必要がない
- 言語のバージョンやミドルウェアの選択肢に制約がある
という特徴があります。
これに該当するサービスの例としてAzure AppService,AWS Beanstalk, Google App Engineなどがあります。
PaaSは開発で必要なものはクラウド環境にあるため、開発環境の構築が不要という点においてすぐに開発に入れます。
PaaSが開発に必要な機能を利用するサービスですが、先ほどのIaaSはサーバやネットワーク機器などのコンピューティングリソースやインフラ周辺も考える必要があります。
僕は以前の現場でSalesForce社のHerokuを触っていた時期がありまして、HerokuというクラウドサービスもPaaSにあたります。
SaaS(Software as a Service)
必要な機能を必要な分だけサービスとして利用できるようにしたソフトウェアもしくは提供形態のことです。すごーく簡単にいうとインターネット経由で提供されるパッケージ製品みたいなものです。
- サーバーなど管理の必要がない
- ソフトウェアのカスタマイズに自由度がない
という特徴があります。
これに該当するサービスの例としてはOffice 365,Github,Salesforceなどがあります。
開発者でなくとも最も身近なクラウドサービス例として挙げられるのではないかと思います。
コンテナ技術とサーバーレス
さて、きました。先程の図の3種類以外の子達^^
上記のIaaS ,PaaS,SaaSとは別に
- CaaS(Container as a Service)
- SaaS(Function as a Service)
という技術が存在します。これはCNCF(クラウドネイティブを推進するいろんな企業が集結した財団)において重要な技術の一つです。
CaaS
コンテナ技術を使用したコンテナオーケストレーションプラットフォームを提供するものです。
コンテナは箱のイメージだと思いますが、ITのコンテナはOS上に切り離された環境を構築する技術のことです。
このコンテナを理解する上でDockerという技術が存在します。Dockerは軽量なコンテナ型のアプリケーション実行環境を作成でき、よく仮想マシン(Mac上でWindows動かすとかのVirtualBoxなど)と比較されますが、ご存知ない方はここでは簡単なニュアンスとして起動、停止がすごーくお手軽に軽量になった仮想マシンと捉えてください。Dockerに関しては調べたらめちゃめちゃ記事出てきますので、調べた方が理解は早いです。
- コンテナ上のPodsを管理するクラスターはユーザーが構築
- 各ノードを管理するコントロールプレーンをクラウドベンダーが提供
- コンテナは内部にアプリケーションサーバーを持っているため自由度が高い
という特徴があります。これに該当するサービスの例としてはAKS ,GKS,EKSなどがあります。コンテナオーケストレーションシステムであるkubernetes関連です。内部でDockerを利用したアクセス負荷分散とかスケーリングできる子です。
FaaS
イベントドリブン方式でサービス(機能を実現するプログラム)のコードを書き、それを連携させることで一連の業務処理を実行可能です。
- アプリケーションの構築なくコードのアップロードとイベントを定義することで実現可能
- サービスが実行に必要なサーバを自動割り当て、必要に応じてスケーリングする
- 実行数(リクエスト数)によって課金となる
という特徴があります。これに該当するサービスとしてAzureFunction ,AWS Lamdba, GCP Cloud Functionsなどがあります。
FaaSはクラウドベンダーがサーバの管理をすべて担うため、開発者がサーバの存在を意識する必要がない点(サーバレス)がメリットです。このサーバレスによりサーバの導入・保守が不要になり、アプリ開発に専念できるため開発工数が減少します。
まとめ
今回はクラウド開発におけるクラウドタイプについて解説しました。
IaaS、PaaS、SaaSは主流であり知っておかないとエンジニアとして使い物にならないと思います。
この記事自体当たり前の事なので正直書こうか悩んでしまったところはあるので^^;
それに加えて昨今ではKubernetes(CaaSの技術)が各所で騒がれています。
実際僕もクラウド開発現場にいてKubernetesを触らせていただいてますが、デプロイとかスケーリングとかもろもろ便利やなぁと毎度思います。
この流れに沿って次回はクラウド開発のマイクロサービスの考え方について
また現場で扱っているクラウド技術のMicrosoft Azureについて深掘りをしていけたらと思います。
ご一読ありがとうございました。