これから始めるCloudRun(フルマネージド)

<h1>目次</h1>
* はじめに
* GCPのコンピューティングの歴史
* Runを使うモチベーション
* Runの弱点と対策

***

<h2>はじめに</h2>
CloudRunには、フルマネージド版とAnthos版があります。
ここでの説明は、フルマネージド版のみです。
また、以降の説明では、フルマネージド版のCloudRunを「Run」と表記します。

***

<h2>GCPのコンピューティングの歴史</h2>

GCPのコンピューティングサービスの一つであるGAE。

そもそも <b>昔はGAEしかなかった。:innocent:</b>

***
<h2>GCP年表</h2>
![スクリーンショット 2020-09-08 001207.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385683/c73cf734-258f-b28a-69ff-1677c0c62ec6.png)
画像は以下の記事から
(古い記事なので読まなくて良いです)
[GCP誕生から10年、その進化の歴史を振り返る](https://ascii.jp/elem/000/001/757/1757103/#:~:text=Google%20Cloud%20Authorized%20Trainer%E3%81%AE,10%E9%80%B1%E5%B9%B4%E3%82%92%E8%BF%8E%E3%81%88%E3%81%BE%E3%81%99%E3%80%82)

***

<h3>GAEしか使えないサービス、APIがたくさんあった。</h3>

***

一例を挙げると

* Cron
* TaskQueue
* Images API

などなど

***

しかし、今では、、

* Cron => Cloud Scheduler
* TaskQueue => Cloud Tasks
* Images API => 移行先なし :innocent:

<b>GAE以外のコンピューティングサービスから利用可能</b>

***

<h2>Runを使うモチベーション</h2>

* サーバーレス
* フルマネージド
* 従量課金制
* コンテナ

***

<h3>サーバーレスのメリット</h3>

* サーバーの管理が不要
* 柔軟なスケーラビリティ
* 約束された高可用性
* 使った分だけの課金

***

<h3>サーバーレスのメリット</h3>

* サーバーの管理が不要！ => フルマネージド
* 柔軟なスケーラビリティ！ => サーバーレス
* 約束された高可用性！ => フルマネージド
* 使った分だけの課金！ => 従量課金制

***

<h3>サーバーレス</h3>

Q. GCPのサーバーレスのサービスってどれ？

***

<h3>サーバーレス</h3>

Q. GCPのサーバーレスのサービスってどれ？

A. GAE, Run, Cloud Functions

***

<h2>じゃあ GAE で良くね？なんで Run 使うの？</h2>

***

<h2>コンテナ使えるのは Run だけ</h2>

***

<h3>コンテナ</h3>

詳細は省くので、ちゃんと知りたい人は各自で調べて！！
![仮想化とコンテナの違い](https://thinkit.co.jp/sites/default/files/article_node/bft_container_ojisan_02_03.jpg)
コンテナは起動しているホストPCのOSの「カーネル」を使う

***

Docker コンテナは、アプリケーションの実行環境の構成を「Dockerイメージ」として保存できる。
開発者は、DockerレジストリーからDockerイメージを取得し、実行環境を再現できるし、本番環境でも<b>同じように</b>再現できる。

***

<h3>コンテナが使えるメリット</h3>

自分の経験で言えば、GAE, Cloud Functions は 数年経つと、アプリで使ってる言語のバージョンアップをしないと、デプロイできなくなり、そして動かせなくなる。

そもそも、バージョンアップするしないは、アプリ側で決めることだと思う。サービス側で決められたくはない。

Run ならアプリ側で決められる。
これは、アプリを長期運用する上でかかる、保守の手間を考えると重要なことだと思う。

***

<h2>CloudRunの弱点と対策</h2>

***

<h3>弱点はないです。</h3>

***

<h3>弱点はないです。(嘘です:bow_tone1:)</h3>

***

<h3>コンテナの制限</h3>

* Linux x86_64 ABI
* PORTの環境変数をListenする
* リクエストを受信してから4分以内に立ち上げる
* リクエストタイムアウトは Max 15分(短くない？:no_good_tone1:)

***

<h3>コンテナの制限</h3>

* Linux x86_64 ABI
* PORTの環境変数をListenする
* リクエストを受信してから4分以内に立ち上げる
* リクエストタイムアウトは Max 15分(短くない？:no_good_tone1:)

ただし、βで既にリクエストタイムアウトの Max は 1h :heart_eyes: です。

つまり、弱点はない。:sunglasses:

***

<h3>コールドスタート問題</h3>

立ち上げに時間がかかる。今の自分達のプロダクトだと 3分くらい

解決策: Cloud Scheduler を使い、定期的にリクエストを送る。
ちなみに、Cloud On Air を見たら Googleの人曰く、体感5分くらいで 0になるらしいです。

***

<h3>コールドスタート問題</h3>

立ち上げに時間がかかる。今の自分達のプロダクトだと 3分くらい

解決策: Cloud Scheduler を使い、定期的にリクエストを送る。
ちなみに、Cloud On Air を見たら Googleの人曰く、体感5分くらいで 0になるらしいです。

ただし、βで既に Minimumインスタンスを設定できる:heart_eyes:
なので、今から開発するなら、気にしなくて良い。

つまり、弱点はない。:sunglasses:

***

<h3>GRPCのストリーミングに未対応</h3>

unary といって単発のリクエストとレスポンスを送る形式のみは、対応しているが、ストリーミングが使えません。

解決策: なし。GKE使え。:rage:

***

<h3>GRPCのストリーミングに未対応</h3>

unary といって単発のリクエストとレスポンスを送る形式のみは、対応しているが、ストリーミングが使えません。

解決策: なし。GKE使え。:rage:

ただし、βで既に対応済み。

つまり、弱点はない。:sunglasses:

***

<h3>ロードバランサー繋がりません。CDN使えません。IAP使いたいです！！</h3>

解決策: なし。GAE使え。:rage:

***

<h3>ロードバランサー繋がりません。CDN使えません。IAP使いたいです！！</h3>

解決策: なし。GAE使え。:rage:

ただし、βで使えるようになりました。

つまり、弱点はない。:sunglasses:

***

<h2>まとめ</h2>

* コンテナをサーバーレスで使える
* GAEとかは、プログラミング言語縛り辛いぞ！
* まだ GAE で消耗してるの？:smirk: