テクニカルディレクターのおきくです! 日々頑張っております。
最近クラウドコンピューティングの設計を任されることが多いのですが、ほぼ毎回のように「AWS」を選定している状況です。
理由はなぜかというと……それ以外のクラウドコンピューティングについてわからないからというのが本音です(笑)。
しかしながらこの記事に書いてあるとおり、ここ最近は「Azure」のシェアが伸びている状況にあります。なぜ伸びているのか、一エンジニアとして大変興味深いところ……。
そこで今回は、AWSとAzureについてさまざまな観点で研究し、どちらのクラウドサービスを選定するべきかをまとめてみました。
すべてのシーンを網羅しきれているわけではありませんが、これを読んでくれたクラウドエンジニアの皆さんの知見に少しでも役立てば嬉しいです。
目次
いきなり結論を伝えると……
この課題に取り組んだ当初は、なにかしら大きな違いがあると見込んでいました。
が、結論としては両クラウドとも大きな差がないということに気づきました。
AWSとAzure比較表
AWS | Azure | 備考 | |
---|---|---|---|
仮想マシン | EC2 | Azure Virtual Machines | |
ストレージ | S3 | Azure Blob Storage | |
データベース | RDS,Aurora | Azure Database | 両サービスともMysql、Postgres、Oracleなど選択が可能 |
PaaS | AWS Elastic Beanstalk | Azure App Service | |
CDN | Amazon CloudFront | Azure Content Delivery Network | |
Cache | Amazon ElastiCache | Azure Cache for Redis | |
kubernetes | Amazon EKS | AKS | |
mBaaS | AWS Amplify | Mobile Apps | |
API Gateway | Amazon API Gateway | Azure API Management | |
Server Less | Lambda | Azure Functions |
ご覧のとおり、ぶっちゃけて言ってしまうとWebアプリケーション、モバイルアプリケーションの構築は、どのクラウドサービスでもできてしまいます。
料金については採用するスペックによっても違うので単純比較することはできませんが、共通の従量課金型となっております。あくまでも私見にはなるのですが、料金体系もどちらかが極めて高いとか安いというものはないように見受けられました。
では差がないということでお終いにします。
・
・
・
というわけにもいかないため、いろいろな観点で差があるかどうか調べてみました。その結果、ようやく選定ポイントが見つかりましたのでまとめてみたいと思います。
Azureを使ったほうが良いケース
Azureを使った方が良いケースをまとめると、ご覧のとおりかなと考えております。
- Microsoft製品と連携したい場合
- さまざまなサードパーティ製品とのデータ連携したい場合
1. Microsoft製品と連携したい場合
率直に言ってしまいますと、なにかしらのWindows製品と連携する場合は、圧倒的にAzureを使った方が良いです。
AzureはMicrosoftが出している製品ということもあり、ソフトウェアのアーキテクチャ的に考えてみても、AzureとMicrosoft製品はホワイトボックス的に連携が可能な状況となります。
一方でAWSで連携しようとすると、別のサービス間の連携となるため、否応でもAPIないし外部連携が必要となる状況です。つまり連携自体の安定度並びに構築のしやすさの両方において、Microsoft製品との連携はAzureの方が圧倒的に優位ではないかと考えます。
一例を挙げると以下のとおりです。
- AzureとMicrosoft 365、Active Directoryの連携
- ハイブリットクラウドの実現
- Teamsアプリケーションの構築
AzureとMicrosoft 365、Active Directoryの連携
このユースケースは、Microsoft 365でSSOを実現して、Active Directoryのユーザーと連携することです。
想定されるのは、大手企業で各自従業員のPC管理をするケースです。中央であるWindowsサーバーのActive Directoryによって、ユーザー毎のロールやフォルダアクセス権を管理していきます。
MicrosoftのDocsに書かれているとおり、Microsoft 365 Enterprise および Office 365 Enterpriseの有料サブスクリプションを持っていれば、Azure ADのサブスクリプションを無料で利用できます。
設定も至ってシンプルで、ユーザー操作で簡単に構築できてしまいます。
またAKSとActive directoryの統合によるクラスタへのアクセス制御も可能になります。つまりMicrosoft 365、Active directory、AKSの連携も可能となるのです。
以下システム内容を構築した場合、ありとあらゆるロールに対してのアクセス制御、ライセンス管理を一次元的に行えるようになります。
- システム概要
-
- Active directoryで社員のロール等について管理する
- Microsoft 365で認証認可を行う(Active directoryと連携する)
- 社内システムのアプリケーションをAKSに展開し、ロールに基づいてクラスタへのアクセスを制御する
社内システムを構築する場合は、Azureは大変便利なインフラではないかと考えます。
ハイブリットクラウドの実現
ハイブリッドクラウドとは、オンプレミス、パブリッククラウド、プライベートクラウドによる合わせ技になります。
なぜわざわざハイブリッドクラウドを実現するかというと、(細かい話まではこの場では避けたいと思いますが)よくあるケースとしては社内システムを自宅からアクセスが可能なように、インターネット経由でクラウドにアクセスし社内システムにアクセスする場合です。
つまりもともとは社内システムだけで済ませていた内容を、テレワークの普及により自宅からアクセス可能としたい場合に対応する形になります。
前述のとおり、AzureはWindows製品との結合をホワイトボックス的に簡単に結合できるということがあります。たとえば社内システムをオンプレミスでWindowsサーバーで構築しており、一部の機能やシステムアクセスをパブリッククラウドで使えるようにしたい場合に、わざわざAWSを選びますか? ……というのはいわずもがなですよね。
こちらも細かい設定やロジック等について調べてはいないですが、Microsoft 365とAzureと同様にホワイトボックス的に連携が可能なことが予想されます。
Teamsアプリケーションの構築
Teamsアプリケーションで代表的な例として、入力されたメッセージや音声に対して自動的に応答してくれる、Botアプリケーションなどがありますね。
これらアプリは、Bot framework SDKを使って構築することが可能となりますが、このフレームワーク自体はAzureとして提供されている状況です。
つまりMicrosoftが提供しているアプリケーションやサービスにおいて、拡張的な機能を作りたい、アプリを作りたいとなった場合は、Azureを選定した方が良いかなと考えます。
2. さまざまなサードパーティ製品とのデータ連携したい場合
選定するうえでかなり大きいと思うのが、Data Factoryを使ったサードパーティ並びにオンプレミスとのデータ連携が容易に行えるということです。
このドキュメントを見る限りでは、以下の世界を代表するサードパーティシステムと連携ができる模様です。
- Salesforce
- Shopify
- Hubspot
その他にもExcelデータの連携等についても実施が可能になります。取得したデータをETLなどを使ってさまざまな形式でデータ抽出をしたりすることで、さまざまな範囲でデータ解析や分析も実施可能となるのではないでしょうか。
AWSを使ったほうが良いケース
AWSを使ったほうが良いケースをまとめると以下のとおりです。
- 仮想コンピューティングの構築や運用保守をスキップしたい場合
- ハイブリッドアプリケーションを構築したい場合
- とくに他のクラウドサービスを使いたい理由がない場合
1. 仮想コンピューティングの構築や運用保守をスキップしたい場合
AWSにFargateと呼ばれるサービスがあります。
このサービスによって、サーバーのスケーリング、パッチ適用、セキュリティ、管理などの運用上のオーバーヘッドが取り除かれます。つまり仮想コンピューティングの構築の責任については、AWS側で担うということになります。開発者がやるべきことはDockerイメージをPushするのみです。
実際のシステム構築でありうることは、運用保守においてサーバーのパッチ適用やライブラリのバージョンアップなど、定期的にサーバーのメンテナンスを行う必要があるということです。またサーバーに対するさまざまなセキュリティリスクへの対応についても検討が必要となり、それをやるだけで保守費用が発生したり、対応漏れによりセキュリティ事故というものも発生しかねません。
AWS Fargateを使うことによって、これらの管理系についてはすべてAWS側が責任をもって担ってくれるため、メンテナンスコストの削減や対応漏れのリスク軽減につながります。
EC2など仮想コンピューティングなどの運用保守もAWS側に担ってほしいということであれば、Fargateを提供しているAWSを使うことをおすすめいたします。
2. ハイブリッドアプリケーションを構築したい場合
ハイブリットアプリケーションとは、一つのソースコードでiOSやAndroid、Webアプリを構築できるものです。代表的なプログラミングコードとしては、FlutterやReact Nativeあたりではないでしょうか。
AWSですが、AmplifyとよばれているAWSの各種サービスをフロントエンドから呼び出しすることができるサービスを提供しております。これによってなにが実現できるかというと……
- フロントエンドからS3のバケットへファイルアップロードを実施
- フロントエンドからCognito認証機能の利用
などさまざまなAWSサービスを利用できます。つまり、iOS、Android、Webアプリを同時に開発ができて、なおかつAWSのサービスを少ない工数で利用できるということになります。
最近ですと、Amplify Studioと呼ばれている機能もリリースされており、これによってFigmaで作成した各種コンポーネントをReact化するみたいなこともできます。簡潔に早くアプリをリリースしたい、かつ水平展開したい場合は、AWSを使ったほうが良いかもしれないですね。
3. とくに他のクラウドサービスを使いたい理由がない場合
冒頭で述べたとおり、皆さんが考えているアプリやサービスについては、ぶっちゃけどのクラウドサービスを使っても実現できてしまいます(ただし、Microsoft製品との連携という観点では、圧倒的にAzureは優位ですが)。
ただAWS自体は、長い間クラウドサービスの多くのシェアを獲得している状況です。つまり多くの企業やエンジニアに慣れ親しみがあるということです。
急にインフラ構築が必要となり業務委託の方に依頼することになったという場合も見越して、特別な事情がなければ、AWSを選定しておくと無難な気がします。
結論
- Azureを使ったほうが良い場合
-
- Microsoft製品と連携したい
- オンプレミスと連携したハイブリッドクラウドを構築したい
- AWSを使ったほうが良い場合
-
- 仮想コンピューティングの構築と保守をAWS側に委ねたい場合
- インフラ人材を確実に調達したい場合
- ハイブリッドアプリケーションを短納期で構築したい場合