AWSはIaaSでAzureはPaaSという観点で違いを説明
海外ベンダーの資料にAWSはIaaSでAzureはPaaSって書いてて面白いなと思うと同時に、妙に腑に落ちる分類だなと思いました。それをツイートしたところ、どういうことか書けよとばかりに拡散されたので書きました。
もちろんそんなにバッサリ区分けできるものじゃないし、AWSにはlambdaとかRDSとかPaaSの人気サービスがたくさんあります。逆にAzureにだってIaaSはあります。
でも、そういう区分けをしていることに納得できる理由。それは、設計思想が違うからです。
なお、本記事は私の偏見のみで構成されております。
2020/12/23追記
lambdaは2010年ではなく2014年開始との指摘を多数いただいたので修正いたします。調べもせずに適当に書いてすみませんでした。また他にも「GCPこそPaaSでは?」「GCPはSaaS」などGCPを比較する声がものすごくたくさんありましたが、私の手元にある海外セキュリティベンダーの資料ではGCPはIaaSと書いてます。その部分を私は説明できませんし、本記事は「AWSとAzureの話」ですのでご容赦ください。また、GCPとの比較や私と全く異なる解釈をお持ちの方はぜひ書いてください。読みに行きます。
理解できなかったという声も少なくなかったので、全体的に微修正して具体例を追加します。言い訳すると、僕が1時間くらいで思うままに書いたnoteが3日で6000ビューもされるなんて思ってませんでした。仕事ではないので、落書きに毛の生えたようなレベルの話だと思ってお読みください。
IaaSではじまったAWSと、PaaSではじまったAzure
AWSはS3やEC2などを初期からサービスとして提供して、クラウド基盤の先駆者として走り出しました。MicrosoftやGoogleがその未来を理解できずに静観してた頃ですね。
S3はともかく、EC2は「これぞIaaS」というキングオブIaaSです。3大クラウドの中でももっとも仮想マシンらしい仮想マシンです。優秀すぎて後発にも負けない、それどころかAmazon linux2なんかは無料で使えるLinuxで使いやすく、「え?こんなに使いやすくていいのAWS?」って思うほど優秀です。
このEC2が、AWSのアイデンティティの一つになっています!
他方でAzureは当初からPaaSを売りにしていました。仮想マシンをいきなりPaaSにしてしまったのです。ここが大きく違います。ちょっと文字にするとややこしいので覚悟して読んでください。
AzureでサーバをPaaSにしたものを「App Service」と名付けました。このApp Serviceの中にさらにいくつか種類があるのです。
WindowsだけでなくLinuxベースの環境をホストし、Webアプリケーションを自由に開発することができるもの、これを「Web Apps」と言います。そして小規模なアプリに特化したFaaSを「Function Apps」と言います。
AWSのlambdaに相当するFaaSが、AzureだとFunction Appsになります。
ややこしいんですけど、メインで使うサービスはPaaSの塊です。
App Serviceっていえば、Web Appsを指すことが多いですが、全部まとめてApp Serviceなのでややこしいです。(省略してるけど、この二つだけじゃない)
さらに、ややこしい罠はこれだけじゃなく、表記割れがすごく多いです。
「Function Apps」は「Functions」とか「Azure Functions」とか言ったりします。全部同じものです。罠なので惑わされないでください。
(ややこしすぎて、Azure使っててもApp ServiceとWeb Appsの違いがわからない・混同してる人はたくさんいます。理解しなくても違和感なく使えるくらい良いサービスなのです)
とまあ、こんな感じに、Azureって「App Service」というPaaSサービスに色々乗っけてるという感じです。「Function Apps」だけを切り出せば、FaaSですが、全部等しくPaaSと表現する方がAzureらしいです。乱暴に言ってしまえば、PaaS群のサービスがAzureなのです。
一応今の画面くらい見ておこうと思ったら、こんな表示に・・・。え、「Webアプリ」とは・・。
えっと、Webアプリを開くと「App Service Web Apps」です。関数アプリは開いても関数アプリって書いてないけどFunction Appsです。「Function App」って入れると検索で出てきますね。
Azureにとってはサービス名称は重要ではないのかもしれません。手順書で運用する人は泣きますね。
異なる進化をしたクラウド基盤
AWSが2006年にサービス開始して、4年遅れてAzureがスタートしました。そして2014年にAWSはlambdaを開始しました。だから、AzureがPaaS基盤に特化したのはかなり早い段階だったと言えます。
今でもEC2のPaaS相当のものはAWSにありません。一部はlambdaが該当するのかもしれないですが、FaaSなので限定的です。なので、EC2からクラウド基盤をより深く使うためにはCaaSに移行するしかありません。
そのコンテナすら、AWSのECSはEC2で動いています。つまり、IaaSの上で動いてます。FargateみたいにPaaSで動くものもあり、マネージドの恩恵を享受することもできます。
ですが、Azureは最初からコンテナはサーバレスです。PaaSで動かすものしかありません。
もう少し深堀すると、ECSはコンテナのIaaSと呼ばれることが多く、AzureやGCPには該当するサービスがありません。なぜならAzureやGCPはPaaSのコンテナという立ち位置です。(コンテナがIaaSかPaaSってのは矛盾する表現の気がしますが、深く気にしてはいけません)
よく言われるのが、FargateがAWSにおけるPaaSのコンテナ(AzureやGCPで提供されているもの)に相当という書き方です。
しかし、Fargateという独立したサービスは存在しません。ECSというサービスの中から、クラスタータイプをFargateを選択することができるのみです。
検索すると、ECSに飛ばされます。
Fargateを使用してECSを開始する、こういう作りがIaaSが元になってるAWSだけの思想だなと感じるわけです。
Azureなら、似たような感じでPaaS推ししてくるというとイメージが近いかもしれません。
繰り返しになりますが、IaaSの上でコンテナを動かすことがAWSらしい。この部分は私と意見が違う諸先輩にも理解しやすい特徴ではないでしょうか。
一方でAzureは、というかMicrosoftの思想がPaaSに向かってると言ってもいいのかもしれません。最近ではMicrosoft365を契約すると、Microsoft Power Apps で本当にいろんなことができて(特化した開発基盤が別にある辺りが、GCPとFirebaseの関係に似てきた)、AIチャットボットなんかを作れたりするのですが、そういうサービスもPaaSの上で動いています。PaaSだから最初の立ち上がりが遅いです。
ちょっと脱線して解説すると、普段からリソースを占有しているIaaSに比べてPaaSは必要なときだけ起動するので、若干立ち上がりが遅いです。
そういう意味では使い分けるべきなのでしょうが、僕はIaaSよりPaaSに適応すべきだと考えています。IaaSは基盤の面倒を見る負担が大きく、クラウドの長所を殺すデメリットが多いからです。
ちょっと強引にまとめると、EC2というIaaSの上に色々乗っけているAWSと、PaaSの上に色々乗っけているAzureは、異なる思想を持っています。
CaaSはどうなの
ここで気になるのはコンテナです。AWSは昔、lambda+DynamoDBの組み合わせがイケてなかったことがあって、早い段階でコンテナへの移行が盛んになりました。AWSを使いこなすなら、コンテナは間違いなく終着点の一つです。とはいえ、コンテナ基盤はGCPがもっとも優れているという評価もあるのでそっちも触りたいなと思ってますが、知らないのでここでは深入りしないでおきます。
じゃあ、Azureのコンテナはどうなのか。あまり評判を聞きません。情報を持ってる方は、他のクラウド基盤と比較してどうなのか教えてください。
3年くらい前にAzureでコンテナを検証で使ってみましたが、非常に使いやすかったです。GitHubみたいなリポジトリにpushしたら自動的にAzureのコンテナがビルドデプロイされる。めちゃ簡単に使えます。
でもイマイチAzureでは流行ってる感が薄い(気がする)。
これも、ひとえにPaaSが優秀だからだと思います。
AzureのPaaSは、IaaSとCaaSの中間くらいの使い勝手の良さがあります。マネージドなので足回りは見なくていいですし、デプロイ周りの良さが速い段階から揃っており、リーズナブルな価格です。CaaSに向かう動機がAWSより薄いのは間違いありません。lambdaより早くPaaSでコンテナを使えたこともあり、サーバレスの選択肢が広いことも影響があるかもしれません。
特に感動したのが、ブルーグリーンデプロイの簡単さです。
Web Appsをリリースする際に、スロットを入れ替えるような手軽さで瞬間的にリリースすることができます。不具合があったときの戻しも恐ろしいほど瞬殺です。
たぶん何を言ってるのかわからないと思いますが、文字で詳しく説明してもますますわからなくなると思うので適当に調べてください(放棄)。
まとめ
脈絡なく話を広げると、畳むのが大変になるのでこの辺にしておきます。
なんでこんな話を書いたかというと、思想が違うクラウド基盤を同列に比較してほしくないからです。
「オンプレのWindowsを移すからAzure」みたいに考える人もいますが、別にそれはならAWSでもいいわけです。SQLサーバならAzureでいいかなって個人的に思いますが。
そうじゃなくて、そもそもの思想が違うという視点も持ってほしいです。
Azureの推しはPaaSで、AWSの推しはIaaSなのです。
ちょっと我ながらいろんな人に怒られそうなことを書いてるような気もしますが、「こうした方がいいよ」という指摘があればぜひコメントください。それどこから完全に根本から違うなどありましたら、正確な情報をお待ちしています。
また、クラウド基盤ベンダーはPaaSとかIaaSとか気にしてサービスを提供しているわけではないと思います。おそらく目指すものが少しずつ違うだけで、細かいことを気にせずに便利に使ってほしいと願っているのではないでしょうか。