AWS vs Google Cloud 徹底比較ガイド

現在の会社に入社して初めて`Google Cloud`を触って、かれこれ半年近くが経ったのですが、それまで利用していた`AWS`と比較して色々気付かされることがあったので一通りまとめてみました。

これからどのクラウドソリューションを利用するかを検討している方や各クラウドの違いが気になっている方の参考になれば幸いです。

## 前提事項

最初に私の経歴をざっと話すと`AWS`が3年、`Google Cloud`が半年です。そのため`AWS`に知識が偏重している傾向があります。一方で業務として`AWS`を最後に触っていたのが2020年3月頃までなので、それ以降にアップデートされた情報については知見がありません。

こうした事情があるため公正さと正確性が不充分であることをご了承ください。

## 各サービスの違い

### EKS vs GKE

`GKE`にかなり分があると思います。流石に`Kubernetes`の本家だけあって機能が充実しています。

特に便利だと思うのが**オペレーション スイートのネイティブ結合**と**ノードの自動アップグレード**です。`GKE`では`Cloud Monitoring`および `Cloud Logging`という2つの機能がデフォルトでインテグレーションされており、`GEKクラスタ`を作成すると自動的にモニタリング ダッシュボードが作成され、標準出力したログが`Cloud Logging`というサービスに転送されるようになります。

※`Cloud Logging`については後述します

`EKS`ではノードを`EC2`と`Fargate`の2つから選択できます。`Fargate`を選択するとノードの管理からは開放されるのですが、`Kubernetes`の幾つかの機能に対応していなかったりと、自分が知っている範囲では運用面ではまだまだ使いづらい印象でした。

ちなみに私は以前の職場でオンプレで`Kubernetes`を使っていたのですが、`GKE`だとこんなに簡単に運用できるのだとかなり感動しました。

### RDS vs Cloud SQL

`RDB`に関してはAWSのほうが良いと思います。`MySQL`や`PostgreSQL`など基本的なRDBは両者揃っているのでおおきな差はないと思いますが、`AWS`だと`Aurora`を選択可能なので、幾らか分があると思います。エンタープライズだと`Aurora`はかなり利用価値があると思います。

一方で`RDB`以外のDBに目を向けると`BigQuery`や`Spanner`を擁する`Google Cloud`に分があると思います（`DynamoDB`も良いサービスですが）。

### Elastic Load Balancing vs Cloud Load Balancing

反論はあるかもしれませんが、私は`Elastic Load Balancing`を推します。`Cloud Load Balancing`を使って思った不満が以下の通りです。

- セルフ証明書からマネージド証明書に変更しようとすると接続できない時間帯が発生してしまう
- リソースとしての抽象度が低い

最後の「リソースとしての抽象度が低い」ですが、`Cloud Load Balancing`は「フロントエンド」、「URLマップ」、「バックエンド」の3つのリソースの集合体として定義されています。コンソール画面から手動で作成する場合には気にならないのですが、`terraform`のような`IaC`で管理しようとするとこの辺りを明確に理解していないとコーディングができず辛いです。

`Google`としては「`Load Balancing`ってそういうものだよね？」という事なのかもしれませんが、`Elastic Load Balancing`と比べると扱いづらい感じは否めません。

一方で`Cloud Load Balancing`は静的IPを設定でき、この点で優位は確かにあります。ですが個人的には上記の運用上の不便さを補うほどのメリットではないと感じています。

### S3 vs Cloud Storage

`S3`のほうが良いと感じています。大きな違いとしてはオブジェクトに対するIP制御を設定できる点です。`S3`と違い、`Cloud Storage`はオブジェクトに付与されたURLへのアクセスをIPで制御することができません。

`VPC Service Controls`というサービスを使うことでIP制御することができますが、`GCP`プロジェクト全体に影響のあるサービスなので場面によっては使うことが難しく、`Cloud Storage`の機能不足を完全に補っているとは言い難いです。

### Cloud Watch Logs vs Cloud Logging

`Cloud Logging`のほうが良いと思います。私が利用経験のある`Google Cloud`のサービスのなかで最良のサービスは`GKE`、`Cloud Run`そして`Cloud Logging`の3つです。

ログ エクスプローラの画面はUIがスッキリとしていて分かりやすく、フィルタリング機能も直感的でほとんど学習せずに使えるようになっています。

### Lambda vs Cloud Function

`Lambda`のほうが良いです。サポートされている言語が多いのもそうですが、Lambda レイヤーが顕著な差だと思います。`Cloud Function`にはLambda レイヤーのようなライブラリ層の概念が存在しないので、インフラレベルで個々のサービスの共通部分を管理することが出来ません。

## コンソール画面の使いやすさ

圧倒的にAWSだと思います。UIの使い勝手は人それぞれなので置いておくにしても（個人的には断然AWSが使いやすいです）、そもそもレスポンス時間が目に見えて違います。またどちらのコンソールも比較的短期間でアップグレードされるのですが、AWSでは必ず一つ前のバージョンに戻るナビゲーションが付いています。

こうした細やかなユーザへの配慮はUIだけでなく、AWSのサービス全体に渡って息づいているように思います。

## サポートの品質

サポートでも大きくAWSがリードしていると思います。というよりGoogle Cloudのサポートは控えめに言っても低品質です。Google Cloudでサポートを利用する場合は、状況をきちんと整理してあらかじめ関連ドキュメントに一通り目を通しておく必要があります。そうでないと数日後にドキュメントのリンクが貼られただけの返答が返ってきます。これはかなり酷い例ですが、決して稀なことではありません。

私はより長い期間AWSを利用していましたが、似たような品質のサポートを目にしたことはありませんでした。

## ドキュメントの品質

これはどちらも充実しているので良い勝負だと思います。ただやはり`AWS`のほうが量は多いと思います。また、Qiita等の非公式のドキュメントも合わせるとシェアの差がドキュメントの量に跳ね返ってくるので、この点でも`AWS`に分があると思います。

## 結局どちらが良いのか？

ありきたりの答えで恐縮ですが、どちら素晴らしいサービスで、優れた点があるので利用する方の状況によります。

例えばあなたが最初のクラウドサービスを選ぼうとしているのなら`AWS`をおすすめします。`AWS`はサービスとして初学者に理解しやすいよう配慮がなされており、サポートやドキュメントの品質でも充分なサポートをしてくれます。

またある程度クラウドの経験がある方でも引き続き`AWS`を使うのは良い選択です。`AWS`は主要クラウドのなかでも最も幅広い領域をカバーしていて、恐らくほとんどのユースケースに耐えられます。

では`Google Cloud`を使うほうが望ましい状況とはどのような時なのでしょうか？

一つはあなたのワークロードを`Kubernetes`で動かしたい場合です。`GKE`とその周辺のエコシステム（`Cloud Logging`や`Cloud Monitoring`等...）は非常に洗練されています。`AWS`で同じ事をやるのは可能ですが、より多くの事を考慮する必要があるでしょう。

確かなことは、どちらのサービスを選ぼうとも魅力あるクラウドの旅が始まるということです。インフラエンジニアから見て、オンプレにはオンプレの良さがありますが、クラウドにも特有の良さがあります。是非あなたに合ったクラウドサービスを選択して、その魅力に触れてみてください。