前提
- Dockerについてある程度理解がある
- 初学者(むしろ私が初学者)向け
ゴール
AWSでDocker環境を立ち上げるためにどのような方法があるのかを知り、
次のステップへの足がけになる。
なぜAWS?
別にAWSにこだわりがあるわけではなく、自社サーバーでDockerを動かす時のつらみです。
本番環境でアプリケーションを動かす場合には冗長構成を取ることが多いです(取られていないとなかなか...)
これを手動で行う場合、Dockerをn回起動して、プロセスが死んだらまたsshしてDocker起動して...みたいな運用が始まります。
そこでオーケストレーション層を入れることが検討されます。
この層ではDockerをnプロセス立ち上げてバランシングする。もしもプロセスが死んだら新しいプロセスを起動する。デプロイの時にはローリングアップデートしてといったことをやってくれます。
ここで一つの問題に当たります。
「オーケストレーションしてくれているプロセス(マスター)が異常をきたした時、サービス全体のデリバリーが危うくなる。」
なので手動でオーケストレーションを行う時にはマスターを冗長構成にして...ということが必須になります。
AWSではこのマスターの管理をフルマネージドでやってくれるサービスが複数出ているので、どんなDockerをいくつどういうふうに配置するのかということだけに集中できます。
Dockerを稼働させるための候補
- EB (AWS Elastic Beanstalk)
- ECS (Amazon Elastic Container Service)
- EKS (Amazon Elastic Kubernetes Service)
EBとは?
お客様はコードをアップロードするだけで、Elastic Beanstalk が、キャパシティのプロビジョニング、ロードバランシング、Auto Scaling からアプリケーションのヘルスモニタリングまで、デプロイを自動的に処理します。
production環境で利用するためにはいくつか検討する必要がありますが、
コードをデプロイ(マネコンからアップロードも可能)するとネットワーク上にいい感じにEC2の配置・ロードバランシング・スケーリングなどをやってくれます。
個人的メリデメ
- メリット
- 学習コストが一番少ない(個人的感想)
- インフラ要件が低い・インフラに強いエンジニアがいない場合において、バックエンドエンジニアでも管理がしやすい
- デメリット
- EB依存のコードを一部書く必要がある
- EC2の管理が必要になる
ECSとは?
フルマネージド型のコンテナオーケストレーションサービス
AWSが提供しているフルマネージド型のコンテナオーケストレーションサービスです。
AWS純正なので他のAWSサービスと親和性高くシームレスな連携がしやすい。
逆にいうとAWSの他のサービスを利用しないと要件満たないケースが多い印象。。
「Dockerを動かすこと」をしてくれるサービスなのでバッチの定期実行やデプロイ時にバッチを動かすなどはある程度自前でやる必要がある。
起動タイプとしてEC2とFargate(コンテナ向けサーバーレスコンピューティング)がある。
個人的メリデメ
- メリット
- ECSを利用するための固定費がない(EC2やfargateの値段のみ)
- EKSより簡単(とよく言われる)
- 設定項目が少ないのは事実
- デメリット
- アプリを動かすことしかサポートしていないのでデプロイやバッチを流すといったことに対して周辺のシステムの知識が必要
EKSとは?
AWS クラウドまたはオンプレミスで Kubernetes アプリケーションを開始、実行、スケーリングする柔軟性を支援します。
ossのKubernetesのマスターノードをAWSマネージドで提供されているサービスです。
KubernetesはDockerオーケストレーションのデファクトになるのではと言われているサービスで、カスタマイズ性が高く、アプリ起動やデプロイなどもKubernetesで提供されています。
EKS自体に毎月8千円くらい(毎時課金 0.10USD)かかる
起動タイプとしてEC2とFargateがある。
個人的メリデメ
- メリット
- Kubernetesがオープンソースなのでエンジニアからは割と好かれている印象(Dockerのデファクトスタンダードになるのではないかと言われている)
- Kubernetesが割と手厚くやってくれる
- カスタマイズできる範囲が広い
- Kubernetesに連携した各種サービス(oss)が割と多いイメージ(ECSはAWSロックなのでそう言うのが少ない)
- デメリット
- 固定費が馬鹿にならない
- 設定項目が多いので一定辛い
雑観
インフラ明るい人が少ないのであればEBで立ち上げ、インフラに興味がある・インフラエンジニアがいるならECS/EKSの導入検討かなと思ってます。(要件によりますが)
ECSとEKSに関してはECS->EKSに乗り換えた会社さんもあるし、逆もあるので一概にどちらがとはなかなかいえないかなと思いますが、
インフラの潮流に乗るのであればKubernetesが好かれているような気がします。
(とはいえ私が関わるスモール立ち上げでは毎月の固定費が気になる)