WS re:Invent にて、コンテナに関わる新機能の発表がありました。
先日、Amazon ECSとAmazon EKSというコンテナをデプロイするためのサービスに関して「Amazon ECS Anywhere」と「Amazon EKS Anywhere」の2つの機能が発表されました。
参考リンク
2020年12月現在では一般向けの正式提供にはなく、仕様としての発表に留まっていますが、2021年の提供を予定しているようです。
EKS Anywhereを例にとった簡略図になりますが「EKS、ECSともにデータプレーンがAWSのインフラを使ったものになる」という点があり、例えばデータ転送に関わる問題(他にオンプレミスのサーバーを保有していて、速度に課題や転送コストが課題になっている場合等)を抱えているユーザーにとってはマネージドのデータプレーンを利用する事とオンプレミスでデータプレーンを保有し、管理・運用する事のメリット・デメリットを比較して、最適な選択肢を選べるようになります。
ECS Anywhereに関して
現在ECS Anywhere, EKS Anywhereはいずれも提供予告にとどまっていますが、資料としてはECS Anyhereの方が充実しています。
ECS Anywhereとしては、通常のマネージドなデータプレーンを用いた構成に対して以下の違いがあるものとしています。
- Amazon ECS のコントロールプレーンは、引き続き AWS リージョン内で稼働する。
- アプリケーションのデプロイに関しては、通常の構成と同じ感覚で扱えるようになり、使い慣れたシンプルな Amazon ECSが利用できるとのこと
- データプレーンのヘルス・稼働状況等は通常通りECSのコントロールプレーンに送信される。
- Amazon ECS Anywhere は、サポートされているOSが存在していればRaspberry
Piであっても稼働させる事ができる。
- ただし、一般提供される際に何らかの制限が発生する可能性があると補足されています。
- AWSとECS Anywhereによって管理される外部サーバーの接続が切断される状況になっても、可用性を損なわないように稼働する。
- ただし、タスクの更新やスケーリング等のコントロールプレーンからの命令は切断される。
Fargate, EC2に次ぐ新しいデータプレーンの形式として「Anywhere」が追加される事となりますが、後述のEKS Anywhereと違ってECS自体は料金モデルを持たずにFargate, EC2の課金とその他の関連サービス(Cloudwatch等のモニタリングツール等)による課金となりますが、Anywhereを選択した場合、AWS側は「ほぼ無料でECSというコントロールプレーンを提供する」ような状態になるので、その辺りが少し気になる所です。続報を待ちましょう。
EKS Anywhereに関して(EKS Distroとの関係について)
EKS Anywhereは公開されている情報は少ないものの、ECS Anywhereと同じくコントロールプレーンはAWSに存在し、データプレーン(ワーカーノード)の選択肢としてAnywhereを利用できるようになるものと思われます。
(参考)
Amazon EKS Anywhere のよくある質問 (2021 年公開) – アマゾン ウェブ サービス
EKSはKubernetesを利用しているため、データプレーンとしてのノードグループを丸ごと外部のサーバーで動かす……という事自体が本当に安定稼働できるのかな?と疑問に思えてしまいますが、そこはやはりAWS、一般提供に先立ってEKS
DistroというKubernetesのカスタマイズ版のディストリビューションをOSSで公開しています。
https://github.com/aws/eks-distro
この中にはコントロールプレーンコンポーネント (kube-controller-manager、etcd、および CoreDNS) とワーカーノードコンポーネント
(kubelet、CNI プラグイン、CSI Sidecar イメージ、Metrics Server、および AWS-IAM-authenticator)それぞれが含まれているので、実際にEKS
Anywhereが提供される際にはユーザーはこれらのアプリケーションをサーバーにインストールして、Anywhereのデータプレーンとして利用する形になると思います。
これらを事前にOSSで公開してバグや改善点のフィードバックを受けて改善することで、一般向けの提供の際にはより洗練されたサービスとして使えるようになるでしょう。
活用することのメリットについて
「Anywhere」を提供する狙いとしては大規模なデータセンターやオンプレミス環境を保有している企業がAWSのコンテナ関連サービスを利用しやすくなることが主目的のように思われます。普通に使う分ならEC2, Fargateで事足りますからね。
とはいえECS/EKSのコントロールプレーンを利用する事によって個人レベルの開発者がEKS/ECSに関する経験を積んだり、Cloudwatch等のAWSの監視ツールをオンプレミスの環境に組み込めるようになるため、一般利用に関してもいくつか使い道が考えられます。
普通の開発者がECS Anywhere / EKS Anywhereを使えるシチュエーション
筆者の妄想で少し考えてみました。
- 自宅に余ってるサーバーを活用して、個人製作のシステムを格安で運用する
- サーバーの仕様に関する制約は少ないようなので、まっさらなLinux環境を用意する事さえできればAnywhereのためのデータプレーンとして利用でき、リソースのモニタリングやCI/CDはAWSの文脈によって運用できるため、単体のサーバーよりは手軽かつ安定した運用を実現できる
- 会社の余っているサーバーラックを活用して、開発者がECS/EKSの開発と運用に対して気軽に実験できる環境を構築する
- ECS・EKSの構成のアップグレードに関するテスト、サーバーリソースを消費しまくるカオスエンジニアリング、本番と同等の環境を用いたE2E環境等の、「リソースを消費する(=課金額が跳ね上がる)けど、可用性や保守は必要ない」タスクに関して、気軽に実験できるようになる
実際問題、本番運用までを考えるとAWS外のネットワークでデータプレーンを運用する事に関しては「オンプレミス環境のサーバー群を維持管理できる」事が前提になるため、これらのサービスをビジネスで利用するためには一定のハードルがあると思われます。
マネージド型インスタンスのメリットである「可用性の担保」を捨てるシチュエーションとしては、やはり格安のサーバー自宅サーバーをデータプレーンとして構築すれば、格安でアプリケーションの開発環境を構築したり、EKS/ECSの操作を覚えながら低コストで開発を行う事が出来ます。
ただし、Anywhereを使う事に関して2つの注意事項があります。
- EKSはコントロールプレーンあたりの課金になるため、気軽に使うには少し高い
- Anywhereは外部ネットワークになるため、関連サービスからAnywhereの稼働するサーバーへの通信がコストになる可能性がある
EKSのコントロールプレーンを新たに作る場合、1時間あたり0.1ドルの課金が発生するため、Anywhereを利用する場合でもKubernetesのコントロールプレーンをEKSとして動かすだけで月間72ドル(30日)のコストが発生します。Raspberry PiとEKSコントロールプレーンを使って「おうちKubernetes」環境を構築できなくもなさそうですが、遊びとしてはちょっと高くなりそう。
最安でAWSのコンテナ管理ツール群の恩恵を受けるためには、コントロールプレーン自体に課金されない(であろう)ECS Anywhereを選ぶ必要がありそうです。
もう一つ注意したいのは、「データプレーンがAWS外部に存在する」事によって、ECRからイメージをPullする場合にネットワークの転送料が発生します。
ECRとEC2が同一リージョンにある場合は転送料無料でデータを転送で出来るため普段はECRの課金について考えることはあまりありませんが、Anywhere環境を利用して頻繁にイメージをPullするようなシチュエーション(マイクロサービスとしてコンテナ環境を構築して、バッチやカオスエンジニアリングでコンテナが何度も建ったり落ちたりする状況)に関してはトラフィックの転送料に関して深く注意する必要があります。
まとめ
ECS Anywhere / EKS Anywhereの登場によってデータプレーンの選択肢が増え、AWSを利用したコンテナの管理運用がまた魅力的なものになりそうです。