この記事は、CAST AI社により公開されたブログ記事を元に翻訳・作成したものです。
元の記事については以下をご覧ください。
(記事最終更新日:2022年3月9日)
ECSからEKSへの移行方法とEKSを簡単に構築するための1つのコツ
公開日:2023年3月27日
更新日:2023年3月27日
Amazon ECSからEKSへの移行は、一番時間をかけたくない作業だと考えることができます。

にもかかわらず、この記事を読んでいます。ということは、ECSが充分に役に立っていないと考えているかもしれません。または、移行を計画するべきかどうか、移行にどれくらいの時間がかかるのかを気にしているのでしょう。
この記事ではEKSを検討するべきかどうかから、EKSへの移行、EKSの管理に関する実践的なヒントまで、ほとんどの質問にお答えします。
ECSからEKSに移行する理由は?
Kubernetesを推進したい企業は、EKSを使うのが得策です。Amazon、HSBC、JP Morgan Chase、Delivery Heroなどの巨大企業は、EKSが提供する制御と柔軟性を理由に、EKSを使用しています。

1.ポータビリティ
ECSがAWS独自の技術であるのに対し、EKSは基本的にAWSが開発・保守するKubernetes-as-a-platformのサービスです。EKSクラスターは実はポータブルで、バニラK8を使ってローカル環境、開発環境で同様の体験を再現できます。したがって、どのシナリオでクラウドベンダーロックインのリスクに直面するかがわかります。
ECSでアプリケーションを構築・運用していると、長期的にはベンダーロックインの問題に遭遇する可能性があります。ほかのプロバイダーを使うことになれば、プロバイダーに合わせてアーキテクチャー全体を定義しなければならなくなります。
そのため、EKSで動作するようにアプリケーションを設計することで、より柔軟性を確保できます。EKSの抽象化レイヤーは、コンテナーをパッケージ化して別のプラットフォームに素早く移動させるのに役立ちます。オンプレミスや、よりよい取引を提供してくれるクラウドプロバイダーなどの、ほかのKubernetesクラスターでワークロードを実行できるようになります。
そのうえ、さまざまなマネージドKubernetesサービスをシームレスに切り替えることができるソリューションが市場に出回っています。
ソリューションに関連する重要なポイントとして、オープンソースとコミュニティーがあります。
EKSでは、多くのツールが構築されており、コミュニティー自体も急速に成長しています。多くの問題が既に解決されているため、多くのサポートを受けることができます。
オープンソースの場合はツールを選ぶことができますが、ECSの場合はすべてが独自で、最終的な自由度はあまり残されていません。
2.ネットワークの制限
Amazon ECSでは、awsvpcという1つのネットワークモードだけを使用して、タスクにエラスティック・ネットワーク・インターフェース(ENI)を割り当てることができます。通常、EC2インスタンスあたり8から15個のネットワークインターフェースしか取得できませんが、ECSでは(特定の前提条件を満たす場合は)それ以上の制限を持つコンテナーもサポートします。合計で、EC2インスタンスあたり最大120タスクまでであれば、実行できます。
EKSでは、ネットワークの柔軟性が大きく向上します。複数のポッド間でENIを共有し、インスタンスごとにより多くのポッドを配置できます。
3.Namespaces(名前空間)
名前空間は、同じKubernetesクラスター内で動作するワークロードを分離するために便利です。1つのクラスターに開発環境、ステージング環境、本番環境を置くことができます。これらはすべて、クラスターのリソースの共有ができます。
困ったことに、ECSでは名前空間は使うことができません。このソリューションには、概念として含まれていないのです。対してEKSでは、セルフマネージドKubernetesと同じように名前空間を使うことができます。
4.構成の柔軟性不足
多くの人がECSを選ぶのは、とても簡単だからです。しかし、その代償として、設定オプションが制限されます。クラスターノードにアクセスできないので、トラブルシューティングの能力が制限されます。
また、ECSをFargateと一緒に使う場合は、さらに、多くの制限を覚悟しておく必要があります。EKSのように、環境固有の設定をコンテナーイメージから簡単に切り離し、移植性を高めるというオプションはありません。
ECS to EKS用語集
ECSからEKSに移行する前に、Kubernetesに関連するいくつかの用語を理解しておく必要があります。
- ECSとK8sのビルディングブロック - ECSとKubernetesのビルディングブロックを確認することは、これら2つの違いの理解を始めるのに最適です。
- EKSワーカーノード - ワークロード(ポッド)が実行されるEC2 インスタンスです。
- IaC - Infrastructure as Code - Gitリポジトリーにコミットするコードでインフラストラクチャーを定義できるツールです。加えて、コードとクラウド内のインフラストラクチャーとの間に、不一致がある場合は、Git のような差分出力が得ることができます。例としては、Pulumi、Terraform、AWS CloudFormationがあります。
- Helm - Kubernetes の世界で最も人気があるパッケージングソリューションです。
- ALB - アプリケーションロードバランサー。
- NLB - ネットワークロードバランサー。
- インターネットゲートウェイ - インターネットゲートウェイは、VPCとインターネット間の通信を可能にする、水平方向に拡張でき、冗長性があり、可用性が高いVPCコンポーネントです。
- VPC - Amazon Virtual Private Cloud(Amazon VPC)は、定義した仮想ネットワークにAWSリソースを起動できます。この仮想ネットワークは、お客様が自社のデータセンターで運用する従来のネットワークに酷似していますが、AWSのスケーラブルなインフラを利用できる利点があります。
ECSには独自の用語があり、皆さんもよくご存じでしょう。ここでは、ECSのさまざまな概念をEKSの世界に置き換えて説明します。
- ECSタスク定義<>EKS Kubernetes Deployment YAML
- ECSタスク<>EKS Kubernetesポッド
- ECSクラスター<>EKSクラスター
ここでさらにガイダンスが必要な場合は、ECSワークショップとEKSワークショップがよい情報源となります。
EKSで得られるもの
実行中のすべてのワークロードにポッドが必要とはかぎりません。しかし、Podの配置とリソースの共有について、比類ない制御を提供できます。このことは、ほとんどのサービスベース・アーキテクチャーを扱うときに、本当に貴重なものです。
EKSは、基盤となるリソースを管理するための柔軟性をはるかに高めています。EC2インスタンス、Fargate、さらには、オンプレミス(EKS Anywhere経由)でクラスターを実行できます。
Kubernetesに精通していて、Kubernetesが提供する柔軟性と機能を手に入れたい場合は、EKSを選ぶとよいです。
ECSからEKSへの移行方法


AWSは、EKSへの移行に関するよいヒントをいくつか提供しています。
しかし、ECSからEKSへの移行の前に注意することが少しあります。
1. ECSタスク定義ファイルをK8s deployment YAMLに書き換える
最初に、ECSタスク定義ファイルをKubernetes deployment YAMLに書き換える必要があります。この部分は避けることができず、ECSとEKS(またはバニラKubernetes)で最大の違いの1つに関連するものです。

2. 環境のスピンアップ
また、EKSにあるそれぞれの環境のバージョンをスピンアップする必要があります。通常、Terraform、CloudFormation、またはPulumiによる、Infrastructure as Code(IaC)を使用します。よいニュースです。これらの最も人気があるIaCツールは、EKSをサポートしています。
既にDockerに慣れており、アプリケーションイメージをパッケージ化して利用できる状態であれば、
- Terraform(または代替のIaCツール)のKubernetesプロバイダーを使用して、deployment YAMLをIaCフローの一部としてディプロイできます。
- アプリケーションパッケージがHelmを使用している場合は、Helmプロバイダーを利用できます。
- または、アプリケーションがHelmを使用してパッケージ化されている場合、ワークロードをEKSクラスターにディプロイできるCloudFormationを使用できます。
このほかにもさまざまな方法で上記を実現でき、それぞれに長所と短所があります。しかし、始めはこの簡単な方法で充分です。
3. CI/CDパイプラインの構成
アプリケーションをEKSクラスターにディプロイするために、必要な作業となります。
4.ネットワーキング
ECSとEKSはどちらも同様のネットワーク機能をサポートしています。ALBとNLBです。現在ECSで慣れ親しんでいるネットワークの基本的な構成を使用できます。ALBを使用したingressの詳細を知りたい場合、この記事が役に立つと考えることができます。
5.テストを実行
新しい構成に対してテストスイートを実行して、すべてが適切に機能することを確認します。
6.トラフィックをEKSクラスターに切り替える
トラフィックの切り替えは構成により異なることがありますが、何する必要があるかを理解するための記載となります。
- ドメインが指すIPを切り替えて、EKSクラスターが使用するロードバランサーを指すようにできます。このようにして、アプリケーションのトラフィックがEKSクラスターを指していることを確認できます。
- ステートフルなアプリケーションの場合、K8sベースのアプリケーションがデータベースのメインユーザーとして移行するようにするなど、いくつかのことを考える必要があります(ECSが書き込みにデータベースを使用している状態から、EKSアプリケーションが書き込みにデータベースを使用する状態にスムーズに切り替わるかなど)。
自動化でEKSジャーニーをより簡単に
EKSの設定と実行は難しいことではありません。マネージドKubernetesは、元来そのためのツールです。
CAST AIには独自のKubernetes実装が付属しており、複雑なインフラをすべて管理するのに役立ちます。
- 自分が一番興味のあるハイレベルな仕事に集中する。
- CAST Alのコンポーネントの作成と管理は簡単です。APIとTerraformで行うことができ、インフラのライフサイクル管理を自動化できます。
- 突然の需要急増に対応するためのヘッドルームポリシーで、オートスケールを効率化できます。
- また、スポットインスタンスの利用を自動化することで、さらなるコスト削減を実現します。スポット稼働率が低下した場合、ワークロードは自動的にオンデマンドインスタンスに移行され、停止しません。
- このプラットフォームは、最も費用対効果が高いAWSインスタンスの種類とサイズを選択し、詳細なコストレポートを提供するため、クラウドコストの自動最適化の恩恵を受けることができます。
実際にどのように機能するかをご覧になりたい方は、Eコマース代理店のSnow CommerceがEKSに移行し、完全自動化環境でシームレスにアプリケーションを公開する様子をご覧ください。
CAST AIのケーススタディ

E-Commerce
How Snow Commerce automated deployment for a dramatic speed increase

彼は、ベストプラクティスを活用しながら、さまざまな種類のシステムのバックエンドとフロントエンドを実装した経験があります。
彼は、常に進化し続けるソフトウェア開発の世界に追いつくように努めています。営業時間外、彼はランニングに出かけ、マウンテンバイクに飛び乗って、ポッドキャストを聴き、新しいことを学びます。
タグ一覧