コンテナとコンテナオーケストレーション

参考サイト AWS Fargateとは?Amazon ECSとの関係性やメリット・デメリットを解説|コラム|クラウドソリューション|サービス|法人のお客さま|NTT東日本

コンテナ

そもそもアプリケーションが実行されるには、ソースコードの他にもgemのようなライブラリやパッケージ、ミドルウェアなどが必要になる。それらにはバージョンの依存性があって、開発者が各自で実行環境を整えようとすると、環境の違いなどから各々の不整合などが起きやすい。

そこで、ソースコードやライブラリ、ミドルウェアなどをまとめコンテナに詰め込み、このコンテナで運用することで開発環境も本番環境も同じ環境にすることができる。各自の開発者の環境の違いも影響しなくなる。

ローカル・本番・ステージングによって異なる値、例えばDBのユーザー名やパスワード、外部APIのURLなどは外部から環境変数として渡すのがよいとされている。それぞれの環境にenvファイルを置いて、そこに書き込むなどがあるだろう。

なお、1つのDockerの管理するスコープとしては単一のホストマシン上となる。ゆえに、複数のホストマシンにまたがるような配置などの場合は別の仕組みとして実装しなければならない。

コンテナオーケストレーション

複数のホストマシンにまたがるコンテナの配置やコンテナのアップデート、ロードバランサーへの紐付けなどを管理する。ECSは代表的なツールである。「あのEC2インスタンス上でコンテナを実行したい」「このコンテナとあのコンテナをロードバランサーにつなぐ」といった指示を出すことができる。

Fargateの登場

ここである問題が発生する。コンテナとそのホストマシン両方を管理しなければならないという問題である。この二重管理の問題を解決すべく、Fargateがある。FargateはAmazon Elastic Container Service (ECS) と Amazon Elastic Kubernetes Service (EKS) で動作する、ホストマシンを意識せずにコンテナを実行できる環境である。Fargateを利用すれば、コンテナとホストマシンの2重管理が不要になる。また、ローカルで利用したコンテナをそのまま本番環境に適用できる。

AWS FargateとAmazon ECSの違いと関係性

ここで気になることがある。ECS, Fargateはどう違うのかという疑問である。双方は連携している。ECSでコンテナを実行する方法として、Fargateを使うというのがある。

ECSではコンテナを起動する手段として、

  • EC2
  • Fargate

の2つがある。EC2では、ホストマシン上でコンテナが起動するので、コンテナのOSやDocker Engineの管理する必要がある。Fargateではそれが不要。

Fargateのメリット

  • ホストマシンOSやミドルウェアの構築が不要・・・ホストマシンOSやミドルウェアのアップデート・設定などに気を使う必要がなくなる。コンテナだけに集中することができる。

  • EC2インスタンスクラスターの管理が不要。・・・EC2インスタンスクラスターの管理が不要になる。実行時に必要なCPUやメモリの組み合わせだけ意識すればいい。

  • オートスケーリング・・・サーバーを自社運用していると、ユーザーからのアクセスが増えた時に、自分たちでサーバーの増築などをしなければならない。fargateでは自動的にコンテナ数を増やしてくれる。

Fargateのデメリット

  • パブリックIPの固定割り当てができない・・・FargateではEC2インスタンスへのIPが自動割り当てのため、パブリックIPアドレスの固定割り当てができない。これは外部アクセスのIP許可などでは不便である。

  • sshが使えない・・・sshコマンドを使ったコンテナアクセスが使えない。EC2を意識しないようにするためである。