GKE/EKS/ECSなど 使い始めるならどれがいいかを簡潔に 2019年版

こんにちは！
[Ateam Lifestyle Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ateam-lifestyle)の16日目は、株式会社エイチームライフスタイルでWebエンジニアをしているだびっつが担当します。

コンテナブームが引き続き来てますね！今年のGoogle NextやAWS Summitもコンテナの話題で持ちきりでした！
私の最近コンテナ周りばっかりやっていたので、自分の知識内でのマネージドコンテナサービスオススメを書き出してみました！

結構独断と偏見にまみれてると思うので(特にフローチャートの中身)、編集リクエストをバシバシください！

## TL; DR

以下のフローチャートを参考にしてね！

![20191210_advent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105037/9584de32-e634-07f0-8856-e985a46a1809.png)

## それぞれの特徴

### GCP GKE

- コンテナ管理 : Kubernetes(k8s)
- 強み
  - k8sのベースを元々Googleが作っただけあって、k8sに対するサポートが群を抜いて強い
  - KubernetesのダッシュボードがGCPの管理画面に埋め込まれているのでわざわざ別のツール使ったりせずともコンテナ周りにアクセス可能
- 弱み
  - (k8sの問題だけど)k8sそのものの概念を学びきって使えるまでに学習コストが非常に高い
  - (GCPの問題だけど)元々Iaasを触ってきた人たちにとってはネットワークが隠蔽されており、ガチガチにインフラカスタムが他クラウド環境に比べるとしずらい
- おすすめするケース
  - Dockerを中級くらいに使い続けており、これからk8sをガッツリ時間かけて勉強して、自身が携わる環境を1ステップ上の段階へ上げたい人

### GCP Cloud Run

- コンテナ管理 : Google社独自
- 強み
  - 複雑な概念抜きにgcloudコマンド一発でコンテナを使ったサービスを立ち上げることができる
  - サーバレスでスケールが柔軟、インフラ環境をあまり気にせずとも運用できる
- 弱み
  - VPC(内部ネットワーク)へのアクセスができないため、インフラをカスタムしたい人はそれなりに工夫する必要がある
- おすすめするケース
  - Docker初心者で、気軽にサービス立ち上げを試してみたい人
  - Dockerを使った本番環境での運用を目指しているが、サービス自体がまだ小さく、インフラをカスタムする必要がない人

### GCP Cloud Run on GKE

- コンテナ管理 : Google社独自+Kubernetes(k8s)
- 強み
  - Cloud RunとGKEの強みを足した感じで、gcloudコマンド一発で立ち上げできつつGKE内のコンテナやVPC内のサービスと連携できる
  - Cloud Runと比べるとマシンタイプのカスタムが可能で、GPUを追加したりスケール上限を定義できたりする
- 弱み
  - Cloud Runに比べると面倒を見るべき項目が増えてくる
  - k8sの知識なしに運用した場合素のCloud Runと比較するとメリットがあまり見いだせない
- おすすめするケース
  - すでにCloud Runを使っており、スキルやサービスが成熟してきたのでk8sへチャレンジしていきたい人
  - Cloud Runよりもう少しインフラよりにコンテナを管理したい人

### AWS EKS

- コンテナ管理 : Kubernetes(k8s)
- 強み
  - AWSの外に出ることなくk8sのあれこれを享受することができる
  - AWSのproduction運用でだいたい必要になるであろうオートスケーリングの技術などをk8sのクラスタに対して転用できる
- 弱み
  - GKE同様、k8sに対する学習コストが非常に高い
  - GUIのみでの完結は手数が多すぎて、基本的にはeksctlというOSSのツールを活用するのが前提
- おすすめするケース
    - AWSを使い続けてきてロックインされていたり現状構成では物足りず、どうしてもAWS内でk8sを組みたい人

### AWS ECS

- コンテナ管理 : AWS社独自
- 強み
  - k8sに比べると覚えるべき概念が少なく、そこそこの学習コストでコンテナ運用をすることができる
  - AWSの各種サービスに親和性が高く、様々な箇所においてAWSのマネージドなところにぶん投げしやすい
- 弱み
  - 独自の概念(タスク定義/サービスなど)が出てくるので、それらが何を指しているのかコツを掴むまではすこしかかりそう
  - aws cliでもコンテナリリース可能だが、色々面倒なのでOSSのツールやマネージドなデプロイサービスを活用することになる
- おすすめするケース
  - Docker初心者で本番環境での運用を目指しているが、k8sほど学習コストをかけずに運用を実現したい人

### AWS EKS on Fargate

- コンテナ管理 : Kubernets(k8s)
- 強み
  - k8sにおいてノードを完全に意識せず運用することができる(1pod1node)
  - VPC(内部ネットワーク)に接続できるので他インスタンスや内部向けマネージドなサービスと連携できる
- 弱み
  - k8sに対する制約がいくつかあり、完全にk8s互換と思って利用すると躓く(LB/root周り)
  - コンテナが立ち上がるまで約1分ほどかかるため、即時立ち上がってほしいようなニーズには弱い
- おすすめするケース
  - 社内ツールやバックエンドサービスなど、ノードを管理したくなくて立ち上がりの速さが求められない環境でk8sを小工数で使いたい人

### AWS ECS on Fargate

- コンテナ管理 : AWS社独自
- 強み
  - ECSとFargateの強みを足した感じで、AWSのマネージドなサービスなどと連携しつつサーバ管理なしにコンテナ運用できる
  - インターフェースがECSママなので、既にECSで運用していた場合の移行が楽ちん
- 弱み
　- 実行中コンテナの中身を触る手段がなく、コンテナ内でトラブルが起こってもログからしか追うことができない
  - コンテナ立ち上がりまでが遅く、即時立ち上がってほしいようなニーズには弱い
- おすすめするケース
  - 過去にECSを利用しており、リリース頻度が少ないようなサービスにおいてマネージドな環境に移していきたい人

## 感想

コンテナ管理初心者で学習コスト低く運用開始したいならCloud RunかECS、
もっとガッツリ運用したいなら、AWSならEKS、GCPならGKEといった感じでしょうか。
昨今ツイッターでも話題になっていますが、k8s自体の学習コストが高いので、あまり無理せずk8sからチャレンジせずとも、
低い階段であるCloud RunやECSでコツを掴んでからk8sに向かったほうが挫折することなくステップを踏めるのではないでしょうか。

かくいう私もECSから入り1年ほど運用してからk8sにチャレンジした身です。
奥が深いのでたくさん勉強のしがいがありますね！

みなさんも気軽に試してみて良きコンテナライフを！


[Ateam Lifestyle Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ateam-lifestyle)の17日目は、@seiraがお送りします。ナウな技術を紹介してくれるみたいなので楽しみです。

“挑戦”を大事にするエイチームグループでは、一緒に働けるチャレンジ精神旺盛な仲間を募集しています。興味を持たれた方はぜひエイチームグループ採用サイトを御覧ください。
https://www.a-tm.co.jp/recruit/