kawabatas技術ブログ

試してみたことを書いていきます

AWSのコンテナ関連サービスを調べる

概要

AWSのコンテナ関連サービスを調べた。

AWSのコンテナ関連サービス

AWSのコンテナ関連サービスの選定例の紹介

f:id:kawabatas:20190308133223p:plain

ECS/EKS/Fargate/EC2

コントロールプレーン

コンテナの管理:クラスターで Docker コンテナを簡単に実行、停止、管理できる

ECS

Cluster > Service > Task difinition > Container definition という概念がある。

Kubernetes の Cluster(Node) > Ingress(Service) > Deployment > Pod とよく似た概念と思われる。

EKS

Kubernetes を使用する場合はこれ。

標準的な Kubernetes 環境で実行されるアプリケーションは EKS と完全な互換性がある。

データプレーン

EC2(Fargate) を使用して ECSを使う、EC2を使用して EKS を使うという形になる。

Fargate

サーバーやクラスターの管理の必要なしにコンテナを実行できる。

-> コンテナを実行するために仮想マシンクラスターをプロビジョニング、設定、スケールする必要がない。

-> 従来のEC2の場合は、「これ以上コンテナを増やしたらメモリが不足しそうだから、EC2のインスタンスタイプを変えようかな」がある。

2019年2月現時点ではEKSには対応していない。

EC2

高スペックのEC2を事前に選んでおけば、Fargate より速度が向上できることもある。

Elastic Beanstalk

Elastic Beanstalk Multi-container Docker

Elastic Beanstalk は Amazon Elastic Container Service (Amazon ECS) を使用して、マルチコンテナ Docker 環境へのコンテナのデプロイを調整します。Amazon ECS には、Docker コンテナを実行するインスタンスクラスターを管理するためのツールが用意されています。Elastic Beanstalk は、クラスターの作成やタスクの定義と実行などの Amazon ECS タスクを処理します。

Elastic Beanstalk でも ECS を使っている

EC2でDocker

EC2 インスタンスに Docker をインストールして、Docker コンテナを実行することも可能。

GCE で Docker コンテナを実行できるのと同様。

所感

AWS でコンテナを実行する(k8sでない)なら ECS + Fargate が良さそう。

インフラを意識せず済み、冗長化・スケールなども問題なさそう。

で、Beanstalk Multi-container Docker がどうなのか...

ECS+Fargate vs ElasticBeanstalk

ネットより

http://labs.septeni.co.jp/entry/2016/04/05/105249

何がどう違うの?というところが解らなかったので、AWSのソリューションアーキテクトの方に弊社へ来ていただいてサービスのご紹介を頂きました。 Beanstalkの中でECSが動いているので大きな違いはありませんが、Beanstalkの方は元々PaaSなので、色々元々組み込まれて便利に使え、.ebextensionsというYAMLで管理できるようになっていいます。 ECSはdockerに特化したもので、最新機能はECSの方が組み込まれるのが早いそうです。 .ebextensionsを使っていくと何でもできちゃうので運用めっちゃ大変そうだなーと思って、シンプルにECSを試しました。

https://qiita.com/naomichi-y/items/d933867127f27524686a

Beanstalk Multi-container Dockerは、ECSを抽象化してRDSやログ管理の機能を合わせて提供してくれる。ボタンを何度か押すだけでRubyやNode.jsのアプリケーションが起動してしまう。 一見楽に見えるが、ブラックボックスな部分もありトラブルシュートでハマりやすいので、素直にECSを使った方が良いと思う

https://www.wantedly.com/companies/pring/post_articles/124469 f:id:kawabatas:20190308133517p:plain

両方試した

kawabatas.hatenablog.com

kawabatas.hatenablog.com

両方試してみて、最初、

  • ElasticBeanstalk の方が環境構築、デプロイが楽。
  • ElasticBeanstalk のコンソール画面で一括で確認できるのも良さそう。

と思ったが、、、

ecs-deployを使ってみたところ、ElasticBeanstalk のデプロイ面での優位はなくなった...

環境構築の手間もそんなに変わらないし、

ElasticBeanstalk のコンソール画面で一括で確認できる点、コード量が若干少ない点もどうだろう...

ECS Fargate を使うのが良さそうと思った。