GCPの主要サービスをAWSに当てはめて考えてみた。

## 前置き
マルチクラウド体制でサービス運営されている会社さん、増えていますよね。
ご縁があってGCPを利用することとなり、焦って各サービスで実現できることを調べています。
考えているうちに、**「これAWSのサービスに当てはめて考えたら、理解が早いんじゃないか。」**
と思い至りました。
AWSとGCP、登場するサービスを紐づけて解説してみます。

## Google Compute Engine

<font color="red">AWSで言うところのEC2(Elastic Compute Cloud)に当たる。</font>

仮想マシンサービス。(VM)Googleの強固なインフラ環境で動作するため高いネットワーク機能が担保されている。
セキュアに利用できる点も利点の一つ。
後に紹介するGAEと比較して、OSやミドルウェアを選択して、細かい設定を入れることができる。
インスタンスサイズのレコメンド機能が搭載されており、利用状況に応じて適切なインスタンスサイズをレコメンドしてくれるため、オーバースペックなサーバを契約してしまって、無駄なコストをかけるといった心配をしなくて良い。
他のGCPサービスとの連携に優れており複雑で高度なアプリケーション構成も作成可能である。
またGCEでは、物理サーバーがメンテナンスに入ったり、障害が起きたりした場合でも、稼働中の仮想マシンは別の物理サーバーに無停止で自動的に移行する。
したがって障害発生時やメンテナンス時にも仮想マシンの再起動を考慮する必要なく、快適に運用できる。

- 柔軟な構築が可能
- セキュリティ性が高い
- 自動スケーリングが可能
- 他の Google 提供サービスとの統合可能
- 障害時の仮想マシン再起動が不要



## Google Cloud Storage

<font color="red">AWSで言うところのS3(Simple Storage Service)に当たる。</font>

Cloud Storage は、GCP のオブジェクトストレージ。
指定した条件に達した場合に、より低料金のストレージクラスに自動的に移行されるよう構成できたり、データを場所と方法を自由にカスタマイズできる。（Standard Storage,Nearline Storage,Coldline Storage,Archive Storageの４種のストレージクラスから選択可能。）
またオブジェクトのライフサイクル管理（OLM）を使用して、特定の期間が経過したときや、新しいバージョンのデータを保存したときなど、指定した条件に達した場合にデータがより低料金のストレージクラスに自動的に移行されるよう構成できる。（無駄に高いストレージを契約して料金がかさむことを防げる。）
高い耐久性を誇り年間耐久性は99.999999999%。15分以内にリージョン間で100%のデータを複製する。

- 低料金のクラスに簡単に移行
- 複数の冗長化オプションの中から選択可能
- 複数のストレージクラスから選択でき、状況に応じて性能が切り替わる
 

## Cloud SQL

<font color="red">AWSで言うところのRDS(Relational Database Service)に当たる。</font>

MySQL、PostgreSQL、SQL Server 向けのフルマネージドリレーショナルデータベースサービス。
難しい設定や管理の手間をGoogle側で責任持ってやってくれる。
保守費用の削減を見込めるほか、データベースのプロビジョニング、ストレージ容量の管理、バックアップを自動化できる。また、高可用性と障害復旧やフェイルオーバーがはじめから備わっている。

- 操作が簡単
- 柔軟なスケーリング
- 高いセキュリティレベル
- バックアップ、冗長化の自動化
- フルマネージドのため保守コストを削減できる

## Cloud Load Balancing

<font color="red">AWSで言うところのELB(Elastic Load Balancer)に当たる。</font>

分散型ロードバランシングサービス。
ユーザーのトラフィックを複数のバックエンドにバランスさせ、輻輳の回避、レイテンシの低減、セキュリティの向上、コストの削減を実現する。
要するに大量のアクセスがあった場合、背後に設置されたGCEにアクセスを分散させることで負荷分散を実現する。
またサーバが動いているのか、ダウンしているのかをCLBが判定して、ダウンしているサーバにはアクセスを向けないようにする。

- 複数のSSL証明書をサポート（通信の安全性を確保できる）
- 自動マルチリージョンフェイルオーバーを含むクロスリージョンロードバランシングを提供
- ユーザーやトラフィックの増加に合わせて自動でスケーリング
- CloudCDNとの統合（GCPの他サービスと手軽に連携できる）

## Cloud DNS

<font color="red">AWSで言うところのRoute53に当たる。</font>

CloudDNSは、Googleと同じインフラストラクチャで動作する低レイテンシのマネージドDNSサービス。
数百万のDNSゾーンとレコードを簡単に公開して管理可能。
あるIPアドレスに対して独自のドメインを使って、開発したサービスを公開したりメールサーバーを運用する際に利用する。
CloudDNSは他のGCPのサービスと同様、コマンドラインやAPI経由でDNSレコードの作成や編集を行うことが可能。
プログラマブルにDNSのレコードを編集可能なため、アプリケーションが自動的にDNSの設定を行うようなケースにも対応している。

- マネージドDNSサービスであるため、DNSサーバの管理が不要
- １００％の可用性を強みにしており、サービスが利用できなくなる心配がない、アクセスが集中しても安心
- VPC、社内のみで利用するDNSも作成できる
- DNSレスポンスに作用する改ざん等に耐性がありセキュアである

## Cloud Functions

<font color="red">AWSで言うところのLambdaに当たる。</font>

サーバレスコード実行サービス。
サーバーレスでアプリケーションを実行できるため、サーバーの構築や保守、スケールアップやスケールダウンなどの管理・メンテナンスが不要となり、コードの記述に集中できる。（アクセスの増加でインフラを強化する等の状況を考慮する必要がない。）
対象となる言語はGo、Python、Java、Node.js、PHP、Ruby、.NET の7つで、Cloud StorageへのファイルアップロードやPub/Sub、Firebaseのイベントなど、任意のサービスのHTTPリクエスト経由でコードが実行される。
また、Cloud Functionsでは利用状況に応じて、基盤となるインフラストラクチャの管理とスケーリングが自動的に行われる。
制限を設けることで稼働するインスタンス数に最大・最小を設定できる。
GCPが提供する各種機能やサードパーティのクラウドサービスを構成要素として取り扱い、コードで接続および拡張可能。
別サービスで発生したアクションをトリガーとしてCloud Functionsを発火するといった用途がある。

- サーバーの管理が不要
- 自動スケーリングが可能
- 支払いは従量制
- 各種機能・サービスとの統合が可能

## Google App Engine

<font color="red">AWSで言うところのElastic Beanstalkに当たる。</font>

サーバレスPaaSサービス。
Python、Java、Node.js、PHP、Ruby、Goの６種類の言語で作成されたアプリケーションであれば、あらかじめ用意されたサーバ環境で実行することが可能で、管理に関する諸問題の多くをGoogle側で管理してくれる。
**「スタンダード環境」**と**「フレキシブル環境」**　の２種類の環境でアプリケーションを動作させることが可能。
スタンダード環境では細かい設定を省いてアプリ開発に専念できる一方、フレキシブル環境では設定項目が多く用意されており、アプリケーションがDockerコンテナ上で実行される。

- 自動スケールが可能(アクセスに応じてサーバのスペックを自動で変更)
- 便利な管理コンソール
- 従量課金制

## Cloud Datastore

<font color="red">AWSで言うところのDynamoDBに当たる。</font>

GCPが提供するNoSQLデータベースサービス。
リレーショナルデータベースではデータを表形式で管理するのに対して、NoSQLデータベースでは１つのキーに対して１つのデータを紐付けて管理する。
文字通りSQL言語を使用せずにデータの出し入れや整理ができる。

- 可用性の高い読み取り・書き込み処理
- 自動スケーリング
- フルマネージドであるためDBの管理不要
- 自動的に暗号化されるためセキュアに運用可能

## 終わりに
いかがだったでしょう？
GCPの存在は知っていても、サービスの概要まで抑えている方は少ないのではないでしょうか？
GCPのサービスに興味を持ってもらえる一助となれば幸いです。
ご存知の方も多いかもしれませんが、**GCPは$３００まで無料で利用することができます。**
ぜひこの機会に実際に手を動かして各サービス触ってみてもらえますと、私としても嬉しいです。