23年2022月XNUMX日

Elastic Beanstalk、EKS、ECS、EC2、Lambda、Fargateの違いは何ですか?

Elastic Beanstalk、EKS、ECS、EC2、Lambda、Fargateの違いは何ですか?

コンテナ化前の生活は、開発者にとって悩みの種でした。 コードを書くことの満足感は、コードを本番環境に強制しようとする欲求不満によって常に影を落としていました。 多くの場合、デプロイメントとは、各環境のライブラリと依存関係を何時間も再構成することを意味していました。 それはエラーを起こしやすい退屈なプロセスであり、多くのやり直しにつながりました。

現在、開発者は、クラウドコンピューティング、コンテナー、コンテナーオーケストレーションなどの新しいテクノロジーを使用してコードをデプロイできます。 このガイドでは、これらの各テクノロジーについて説明します。 また、「Elastic Beanstalk、EKS、ECS、EC2、Lambda、Fargateの違いは何ですか?」という質問にも答えます。

Contents [show]

AWSクラウドコンピューティングの概念

クラウドコンピューティングとは、インターネットを介してITリソースにアクセスすることを指します。 リソースには、サーバー、ストレージ、展開ツール、アプリケーションなどが含まれます。 クラウドコンピューティングのAWS用語は「コンピューティング」であり、開発者がコードを配置する仮想サーバーを指します。 AWSでは、開発者は次のようなサーバーの仕様を選択します。

  • オペレーティングシステム
  • CPU
  • メモリ
  • ストレージ

クラウドコンピューティングには、次のようないくつかの利点があります。

  • コスト削減性:企業は、アプリケーションを実行するためにサーバーを購入する必要はありません。 
  • 時間の節約:開発者はサーバーの管理について心配する必要はありません。 クラウドコンピューティングベンダーは、すべてのメンテナンスタスクを処理します。
  • セキュリティ:クラウドベンダーは、リソースのすべてのセキュリティタスクを実装および管理します。
  • スケーラビリティ:リソースはオンデマンドでアクセスされます。 開発者がより多くのリソースを必要とする場合、クラウドコンピューティングプラットフォームは必要なものを自動的に割り当てることができます。
  • 柔軟性:開発者は、ニーズに最適な構成オプションを選択できます。
  • 信頼性:コンピューティングベンダーは、アプリケーションが常に利用可能であることを保証するために、可用性保証(通常は99.99%)を提供します。

コンテナ化 

コンテナ化とは、コードをデプロイ可能なユニットにパッケージ化するプロセスを指します。 このユニットはコンテナと呼ばれ、そのコードを実行するために必要なすべてのものを保持します。 アプリケーションのコードから依存関係やOSライブラリまで、各ユニットには、開発者がアプリケーションを実行するために必要なすべてのものが含まれています。 最も広く知られているコンテナテクノロジーは、幅広いコミュニティをサポートするオープンソースツールであるDockerです。 コンテナ化の利点は次のとおりです。

より簡単なアプリケーション展開

アプリケーションの展開は、最も基本的でありながら効果的なメリットのXNUMXつです。 コンテナを使用すると、以前は数時間かかっていたものが今では数分かかるため、開発者はアプリケーションのデプロイにはるかに簡単に時間をかけることができます。 さらに、開発者はコンテナーを使用して、ホストサーバー上の他のアプリケーションに影響を与えることを心配することなくアプリケーションを分離できます。

より良いリソース使用率

アプリコンテナを使用すると、リソースの使用率を高めることができます。 コンテナーをデプロイする主な理由のXNUMXつは、使用する物理マシンの数を減らすことができるためです。 XNUMX台のマシンで多数のアプリケーションを実行している場合、XNUMXつ以上のアプリケーションが十分に活用されていないことに気付くことがよくあります。

コンテナ化は、開発者がアプリケーションごとに分離された環境を作成できるようにすることで、この問題に対処するのに役立ちます。 このアプローチにより、各アプリに、同じホスト上の他のアプリに影響を与えることなく効果的に実行するためのリソースが確保されます。 また、悪意のあるコードが本番環境に導入される可能性も低くなります。 

パフォーマンスを向上させた

コンテナは軽量の抽象化レイヤーを提供し、開発者が基盤となるオペレーティングシステムに影響を与えることなくアプリケーションコードを変更できるようにします。 さらに、コンテナー内のアプリケーションの分離属性により、あるコンテナーのパフォーマンスが別のコンテナーに影響を与えないことが保証されます。 

アプリケーションの分離

アプリのコンテナ化の最も重要な利点のXNUMXつは、アプリケーションを分離する方法を提供することです。 これは、同じサーバーで複数のアプリケーションをホストする場合に特に重要です。 

コンテナ化はまた、それらをアトミックにすることにより、デプロイメントと更新を簡素化します。 コンテナーを使用すると、開発者は同じサーバー上の他のアプリケーションを壊すことなくアプリケーションを更新できます。 コンテナを使用すると、開発者は更新されたバージョンをデプロイし、必要に応じてロールバックすることもできます。 その結果、開発者はアプリケーションを迅速にデプロイおよび更新し、ダウンタイムや予期しない問題なしにアプリケーションを拡張できます。

強化されたセキュリティ

コンテナはアプリケーションを相互に、またホストシステムから分離するため、XNUMXつのアプリケーションの脆弱性が、同じホストで実行されている他のアプリに影響を与えることはありません。 開発者が脆弱性を見つけた場合、同じサーバー上の他のアプリケーションやユーザーに影響を与えることなく、脆弱性に対処できます。

コンテナ画像

イメージは、コンテナーの作成に使用されるテンプレートであり、コマンドラインまたは構成ファイルから作成されます。 このファイルは、イメージを作成するための手順のリストを含むプレーンテキストファイルです。 ファイルの指示は、レジストリからイメージをプルして実行するなどの単純なものから、依存関係をインストールしてからプロセスを実行するなどの複雑なものまであります。

コンテナはイメージを実行するものであるため、イメージとコンテナも連携して機能します。 イメージはコンテナーなしで存在できますが、コンテナーを実行するにはイメージが必要です。 すべてをまとめると、イメージをコンテナーに取得してアプリケーションを実行するプロセスは次のとおりです。

  1. 開発者はアプリケーションをコーディングします。
  2. 開発者は、アプリケーションのイメージ(テンプレート)を作成します。
  3. コンテナー化プラットフォームは、構成ファイルの指示に従ってコンテナーを作成します。
  4. コンテナ化プラットフォームはコンテナを起動します。
  5. プラットフォームは、アプリケーションを実行するためにコンテナーを起動します。

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

アプリケーションが増えると、コンテナの数も増えます。 多数のコンテナを手動で管理することはほぼ不可能であるため、コンテナのオーケストレーションはこのプロセスを自動化するために介入できます。 最も広く知られているコンテナオーケストレーションツールはKubernetesです。 Amazonは、Kubernetesを実行するためのサービスを提供しています。これについては、この記事の後半で説明します。 Dockerは、DockerSwarmと呼ばれるものを介してオーケストレーションも提供します。

コンテナ化はどのように機能しますか?

プロセスの最初のステップは、構成ファイルを作成することです。 このファイルには、アプリケーションの構成方法の概要が記載されています。 たとえば、イメージをプルする場所、コンテナー間のネットワークを確立する方法、およびアプリケーションに割り当てるストレージの量を指定します。 開発者が構成ファイルを完成させると、コンテナーを単独で、またはクラスターにデプロイします。 デプロイされると、オーケストレーションツールがコンテナーの管理を引き継ぎます。   

コンテナーのデプロイ後、オーケストレーションツールは構成ファイルの指示を読み取ります。 この情報に基づいて、適切な設定を適用し、コンテナーを配置するクラスターを決定します。 そこから、ツールは以下のすべてのタスクを管理します。

  • コンテナのプロビジョニング
  • アプリケーションの構成
  • 展開
  • スケーリング
  • ライフサイクル管理 
  • 冗長性と可用性の管理
  • リソースの割り当て 
  • ロードバランシング
  • サービスの発見
  • コンテナのヘルスモニタリング

次に、Elastic Beanstalk、EKS、ECS、EC2、Lambda、Fargateの違いについて説明します。

弾性ビーンズトーク

上記の議論から続けて、 弾性ビーンズトーク 簡素化をさらに一歩進めます。 従来、Web展開では、サーバーのプロビジョニング、環境の構成、データベースのセットアップ、およびサービスが相互に通信するように構成するための一連の手動手順も必要でした。 Elastic Beanstalkは、これらのタスクをすべて排除します。

Elastic Beanstalkは、Java、.NET、PHP、Node.js、Python、Ruby、Go、Dockerで開発されたWebアプリケーションとサービスをApache、Nginx、Passenger、IISなどのサーバーにデプロイします。

このサービスは、サーバー、コンピューティングリソース、データベースなどを自動的にプロビジョニングし、コードをデプロイします。 そうすれば、開発者は環境の構成に数え切れないほどの時間を費やすのではなく、コーディングに集中できます。 

ElasticBeanstalkアーキテクチャ

Elastic Beanstalkにアプリをデプロイすると、サービスは以下を作成します。

  • ElasticBeanstalk環境:これは、アプリケーションのランタイム環境です。 このサービスは、アプリケーションにアクセスするためのURLとCNAMEを自動的に作成します。
  • EC2インスタンス:これらはアプリケーションの計算ノードです。 
  • 自動スケーリンググループ:計算ノードのスケーリングを処理します。 自動スケーリンググループはプロビジョニングを処理しますが、開発者は確立する数を構成できます。 また、自動スケーリングをいつ開始できるかを指定することもできます。
  • 弾性ロードバランサー:計算ノード全体にWeb要求を分散します。
  • セキュリティグループ:アプリケーションに出入りできるネットワークトラフィックを指定します。
  • ホストマネージャー:ホストマネージャーは、パフォーマンスの問題についてノードを監視する各計算ノード上のサービスです。

労働者環境

Webリクエストの処理に時間がかかりすぎると、パフォーマンスが低下します。 Elastic Beanstalkは、サーバーの過負荷を回避するためにリクエストを処理するバックグラウンドプロセスを作成します。 コンピューティングリソースの個別のセットであるワーカー環境は、実行時間の長いタスクを処理して、Webサイトにサービスを提供するリソースが引き続き迅速に応答できるようにします。

Elastic Kubernetes Service(EKS)

コンテナ化により、開発者の多大な負担がなくなります。 ただし、コンテナのプロビジョニング、スケーリング、構成、および展開という、彼らが直面する追加の課題があります。 アプリケーションのサイズによっては、これらのタスクを手動で処理するのは大変です。 ソリューション? 容器 編成

アマゾンEKS 管理されています Kubernetes 開発者がコンテナ化されたアプリケーションを大規模に簡単にデプロイ、保守、およびスケーリングできるようにするサービス。 Amazon EKSは、Kubernetesコンポーネントの手動構成と管理の必要性を置き換え、クラスター操作を簡素化します。

Kubernetesとは何ですか?

Kubernetesは、コンテナの大規模な管理に関連するすべてのタスクを自動的に処理するオープンソースのコンテナ化プラットフォームです。 KubernetesはK8sとも呼ばれ、次のことを行います。

  • サービスディスカバリー:Kubernetesは、ドメインネームサービス(DNS)またはIPアドレスを介してリクエストを受け入れるためにコンテナを公開します。
  • ロードバランシング:コンテナリソースの需要が高すぎる場合、Kubernetesはリクエストを他の利用可能なコンテナにルーティングします。
  • ストレージオーケストレーション:ストレージのニーズが高まるにつれて、K8sはワークロードを処理するために追加のストレージをマウントします。
  • 自己回復:コンテナに障害が発生した場合、Kubernetesはそのコンテナをサービスから削除し、新しいコンテナと交換できます。
  • シークレットマネジメント:このツールは、パスワード、トークン、およびSSHキーを保存および管理します。

EKSアーキテクチャ

Amazon EKSインフラストラクチャは、コンテナオーケストレーションを実行するために相互作用するいくつかのコンポーネントで構成されています。 具体的には、EKSアーキテクチャは次のもので構成されます。

マスターノード

マスターノードは、リソースの可用性やCPU /メモリの制限に基づいてワーカーノードでコンテナーをスケジュールするなど、いくつかのタスクを担当します。

EKSコントロールプレーン

コントロールプレーンはKubernetesリソースを管理し、ワーカーノードで実行する作業をスケジュールします。 これには、クライアント(kubectlなど)との通信を処理するAPIサーバーと、作業を監視するためにループ内でXNUMXつ以上のコントローラータイプの操作を実行するAPIサーバープロセスが含まれます。

EKSワーカーノード

ワーカーノードは、VPCのEC2インスタンスで実行されます。 クラスタは、アプリケーションのコンテナを実行するワーカーノードのグループであり、コントロールプレーンは、ワーカーノード間の作業を管理および調整します。 組織は、XNUMXつのアプリケーションにEKSを展開することも、XNUMXつのクラスターを使用して複数のアプリケーションを実行することもできます。

ワーカーノードは、会社の仮想プライベートクラウドのEC2インスタンスで実行され、コンテナー内のコードを実行します。 これらのノードは、KubeletサービスとKubeプロキシサービスで構成されています。

  • Kubeletサービス:Kubeletサービスはクラスター上で実行され、クラスター間の通信を処理します。 APIサーバーからの命令の受信を待機し、それらの命令を実行します。
  • 久部プロキシサービス:Kubeプロキシサービスは、クラスタ内のサービス間の通信を確立および構成します。

EKS VPC:仮想プライベートクラウド

これは、クラスターのネットワーク通信を保護するためのサービスです。 開発者はこのツールを使用して、VPC環境内で本番環境グレードのアプリケーションを実行します。

Elastic Container Service(ECS) 

ECS AWS独自のコンテナオーケストレーションサービスです。 これは、AWSでDockerコンテナを実行するためのフルマネージドサービスであり、Amazon EC2、Amazon S3、ElasticLoadBalancingなどの他のAWSサービスと統合されます。 ECSはEKSに似ていますが、ECSはプロセス全体を自動化しません。 

ECSアーキテクチャ

ECSの主なコンポーネントは次のとおりです。

コンテナ

ECSコンテナーは、アプリケーションの実行に必要なソフトウェアを使用して事前構成されたLinuxまたはWindowsサーバーイメージです。 これらには、オペレーティングシステム、ミドルウェア(Apache、MySQLなど)、およびアプリケーション自体(WordPress、Node.jsなど)が含まれます。 AWSのElasticContainerRegistryにアップロードされた独自のコンテナを利用できます。

コンテナエージェント

ECS Container Agentは、EC2インスタンスで実行され、ECSサービスと通信するデーモンプロセスです。 これは、AWSCLIを使用してAPIリクエストとDockerコマンドを送信することで行われます。 ECS Container Serviceを使用するには、ユーザーはVPCのEC2インスタンスで少なくともXNUMXつのコンテナーエージェントを実行している必要があります。 このエージェントは、AWS APIおよびDockerコマンドを呼び出してコンテナをデプロイおよび管理することにより、ECSサービスと通信します。 

タスク定義

ECSタスクは、コンテナーイメージと構成のペアです。 これらはクラスター上で実行されるものです。

ECSクラスター

ECSクラスターは、コンテナーを実行するEC2インスタンスのグループです。 ECSは、クラスター内の利用可能なEC2インスタンス間でコンテナーを自動的に分散します。 ECSは、必要に応じてスケールアップまたはスケールダウンできます。 新しいDockerコンテナを作成するときに、開発者はCPU共有の重みとメモリの重みを指定できます。 CPU共有の重みは、同じノードで実行されている他のコンテナーと比較して、各コンテナーが消費できるCPU容量を決定します。 値が大きいほど、クラスター内のEC2インスタンスで実行されるときに、このコンテナーに割り当てられるCPUリソースが多くなります。 

タスク定義ファイル

ECSでアプリケーションをセットアップするには、タスク定義ファイルが必要です。 このファイルは、アプリケーションを構成する最大10個のコンテナー定義を指定するJSONファイルです。 タスク定義は、開くポート、使用するストレージデバイスなどのさまざまな項目の概要を示し、アクセス管理(IAM)の役割を指定します。

タスクスケジューラ

ECSタスクスケジューラは、コンテナのスケジューリングタスクを処理します。 開発者は、特定の時間または特定の間隔の後にタスクを実行するようにECSタスクスケジューラを設定できます。 

Elastic Compute Cloud(EC2) 

EC2 サーバー、ストレージ、データベースなど、強力なアプリケーションやWebサイトの構築に役立つさまざまなオンデマンドコンピューティングリソースを提供します。 

EC2アーキテクチャ

EC2アーキテクチャは、次のコンポーネントで構成されています。

アマゾンマシンイメージ(AMI)

AMIは、コンピューターの状態のスナップショットであり、何度も複製できるため、同一の仮想マシンを展開できます。 

EC2の場所

AWS EC2の場所は、コンピューティング、ストレージ、およびネットワーキングリソースを含む地理的領域です。 利用可能な場所のリストは、AWS製品ラインによって異なります。 たとえば、北米の地域には、米国東海岸(us-east-1)、米国西海岸(us-west-1)、カナダ(ca-central-1)、およびブラジル(sa-east-1)が含まれます。

アベイラビリティーゾーンは、十分にネットワーク化されたリージョン内の個別の場所であり、複数のアベイラビリティーゾーンにまたがるサービスの信頼性を高めるのに役立ちます。

EC2はどのタイプのストレージをサポートしていますか?

EBS – Elastic Block Storage

これらはEC2インスタンス自体の外部に存在するボリュームであり、さまざまなインスタンスに簡単に接続できます。 それらはEC2インスタンスのライフサイクルを超えて存続しますが、インスタンスに関する限り、 と思われる 物理的に接続されたドライブのように。 2つのECXNUMXインスタンスに複数のEBSボリュームをアタッチできます。

EC2インスタンスストア

これは、EC2インスタンスに物理的に接続されたストレージボリュームです。 一時ストレージとして使用され、他のインスタンスに接続することはできません。データは、インスタンスが停止、休止、または終了すると消去されます。

ラムダ 

AWSラムダ は、イベントに応答してコードを実行するサーバーレスコンピューティングプラットフォームです。 これは、Amazon Web Services(AWS)が導入した最初の主要なサービスのXNUMXつであり、開発者は仮想マシンをインストールしたり事前に構成したりせずにアプリケーションを構築できます。 

ラムダはどのように機能しますか?

関数が作成されると、 ラムダ それを新しいコンテナにパッケージ化し、AWSクラスタでそのコンテナを実行します。 AWSは、必要なRAMとCPU容量を割り当てます。 Lambdaはマネージドサービスであるため、開発者は構成を変更する機会がありません。 トレードオフは、開発者が運用タスクの時間を節約することを意味します。 その他の利点は次のとおりです。

セキュリティとコンプライアンス

AWS Lambdaは、サーバーレスコンピューティングプラットフォームの中で最も高いセキュリティとコンプライアンスを提供します。 PCI、HIPAA、SOC2、ISO 27001などの規制順守基準を満たしています。Lambdaは、送信中および保存中のすべてのデータをSSL/TLS証明書で暗号化します。

スケーラビリティ

このサービスは、すべてのサーバーとハードウェアを自動的に管理することにより、ダウンタイムやパフォーマンスの低下なしにアプリケーションを拡張します。 Lambdaを使用すると、企業は関数の実行時に使用されたリソースに対してのみ料金を支払います。 

コスト効率

プラットフォームはアプリケーションが使用するコンピューティングパワーに対してのみ課金するため、コスト効率はAWSLambdaの最も重要な利点のXNUMXつです。 したがって、使用されていない場合、Lambdaは何も請求しません。 この柔軟性により、限られた予算のスタートアップや企業に最適なオプションになります。 

既存のコードの活用

場合によっては、既存のコードをそのまま使用できます。 フラスコ アプリケーション、ほとんど適応なし。 

Lambdaを使用すると、レイヤーを作成することもできます。レイヤーは、多くの場合、依存関係、アセット、ライブラリ、またはそれらがアタッチされているLambda関数からアクセスできるその他の一般的なコンポーネントです。

ラムダアーキテクチャ

Lambdaアーキテクチャには、トリガー、関数自体、および宛先のXNUMXつの主要コンポーネントがあります。 

トリガー

イベントプロデューサーは、Lambda関数をトリガーするイベントです。 たとえば、開発者がAmazon DynamoDBテーブルの変更を処理する関数を作成する場合は、関数構成でそれを指定します。

上記のDynamoDBの例のように、AWSによって提供される多くのトリガーがあります。 その他の一般的なトリガーには、APIゲートウェイへのリクエストの処理、S3バケットにアップロードされているアイテムなどが含まれます。 Lambda関数は複数のトリガーを持つことができます。

ラムダ関数

Lambda関数は、イベントを実行または応答するために登録できるコードの断片です。 AWS Lambdaは、複数のサーバー間でコードの実行を管理、監視、スケーリングします。 開発者は、これらの関数を任意のプログラミング言語で記述し、Amazon S3、AmazonDynamoDBなどの追加のAWSサービスを利用できます。

AWS Lambdaは従量制で動作し、月額1万リクエストを提供する無料枠があります。 開発者は、容量を事前に購入するのではなく、使用した分だけ支払います。 この従量課金制のセットアップは、未使用の容量を支払うことなくスケーラビリティをサポートします。

宿泊施設

Lambda関数の実行が完了すると、出力を宛先に送信できます。 現在のところ、XNUMXつの事前定義された宛先があります。

  1. SNSトピック
  2. SQLキュー
  3. 別のラムダ関数
  4. EventBridgeイベントバス

これらのそれぞれについて詳細に説明することは、この記事の範囲を超えています。

パッケージング機能

コードとその依存関係のサイズが10MB以上の場合、Lambda関数を実行する前にパッケージ化する必要があります。 

Lambdaが受け入れるパッケージには、.zipアーカイブとコンテナイメージのXNUMX種類があります。

.zipアーカイブはLambdaコンソールにアップロードできます。 コンテナイメージはAmazonElasticContainerRegistryにアップロードする必要があります。

実行モデル

関数が実行されると、その関数を実行するAWSコンテナが自動的に起動します。 コードが実行されると、コンテナは数分後にシャットダウンします。 この機能により、関数はステートレスになります。つまり、一度シャットダウンすると、リクエストに関する情報は保持されません。 注目すべき例外のXNUMXつは、/ tmpディレクトリです。このディレクトリの状態は、コンテナがシャットダウンするまで維持されます。

AWSLambdaのユースケース

そのシンプルさにもかかわらず、ラムダはさまざまなタスクを処理できる多目的なツールです。 これらのアイテムにLambdaを使用すると、開発者は管理アイテムに集中する必要がなくなります。 このツールは、開発者が通常コードを作成する必要があるアプリケーションの多くのプロセスも自動化します。 いくつかのケースは次のとおりです。

アップロードの処理

アプリケーションがストレージシステムとしてS3を使用する場合、オブジェクトを処理するためにEC2インスタンスでプログラムを実行する必要はありません。 代わりに、Lambdaイベントは新しいファイルを監視し、それらを処理するか、別のLambda関数に渡してさらに処理することができます。 このサービスは、ワークフローの一部として、あるLambda関数から別の関数にS3オブジェクトキーを渡すこともできます。 たとえば、開発者は、ある領域にオブジェクトを作成してから、それを別の領域に移動したい場合があります。

外部サービスコールの処理

Lambdaは、外部サービスでの作業に最適です。 たとえば、アプリケーションはこれを使用して、外部APIを呼び出したり、ExcelスプレッドシートからPDFファイルを生成したり、電子メールを送信したりできます。 もうXNUMXつの例は、信用報告書または在庫更新の要求を送信することです。 関数を使用することにより、アプリケーションは応答を待つ間、他のタスクを続行できます。 この設計により、外部呼び出しによってアプリケーションの速度が低下するのを防ぎます。

自動バックアップとバッチジョブ

スケジュールされたタスクとジョブは、ラムダに最適です。 たとえば、EC2インスタンスを24時間年中無休で実行し続ける代わりに、Lambdaは指定された時間にバックアップを実行できます。 このサービスは、レポートの生成やバッチジョブの実行にも使用できます。 

リアルタイムログ分析

Lambda関数は、アプリケーションが各イベントを書き込むときにログファイルを評価できます。 さらに、イベントが発生したときにイベントを検索したり、エントリをログに記録したりして、適切な通知を送信できます。

自動ファイル同期

Lambdaは、リポジトリを他のリモートロケーションと同期するための良い選択です。 このアプローチでは、開発者はLambda関数を使用して、個別のサーバーとプロセスを作成しなくてもファイル同期をスケジュールできます。 

ファーゲート 

AWSファーゲート はECSおよびEKSの展開オプションであり、サーバーまたはクラスターの管理を必要としません。 Fargateを使用すると、ユーザーはコンテナーの数と、各コンテナーに必要なCPUとメモリーの量を定義するだけです。

AWSファーゲートアーキテクチャ

Fargateのアーキテクチャは、クラスタ、タスク定義、およびタスクで構成されています。 それらの機能は次のとおりです。

クラスター

AWS Fargate Clustersは、コンテナーを実行するサーバーのクラスターです。 開発者がタスクを起動すると、AWSはコンテナを実行するために適切な数のサーバーをプロビジョニングします。 開発者は、Fargateでタスクとして起動する前に、ソフトウェアまたは構成の変更を使用してDockerイメージをカスタマイズすることもできます。 次に、AWSはユーザーのクラスターを管理し、必要に応じて簡単にスケールアップまたはスケールダウンできるようにします。

タスクの定義

タスク定義は、各タスクのDockerイメージ、CPU要件、およびメモリ要件を指定するJavaScript Object Notation(JSON)ファイルです。 また、環境変数やドライバーの種類など、タスクに関するメタデータも含まれています。

タスク

タスクは、タスク定義のインスタンスを表します。 タスク定義ファイルを作成した後、開発者はクラスターで実行するタスクの数を指定します。 

ファーゲートの利点は何ですか?

ファーゲートは使いやすいです。 アプリケーションのデプロイには、次のXNUMXつのステップが含まれます。

  • アプリの環境を構成します。
  • アプリの望ましい状態を説明してください。
  • アプリを起動します。

AWS Fargateは、Docker、AWS ECS Container Agent、AWS ECS Task Definition、またはAmazon EC2ContainerServiceテンプレートに基づくコンテナーをサポートします。 このサービスは、コードベースを変更することなく、自動的にスケールアップまたはスケールダウンします。 Fargateには、次のような多くの利点があります。

  • 簡単でスケーラブルで信頼性の高いサービス
  • サーバー管理は必要ありません
  • キャパシティプランニングに時間を費やすことはありません
  • ダウンタイムなしでシームレスに拡張
  • 従量課金制の価格設定モデル
  • 低遅延サービスであり、データ処理アプリケーションに最適です
  • Amazon ECSとの統合により、企業は両方のサービスをより簡単に使用できるようになります

サービスの比較

AWSの優れている点は、コンテナ化、オーケストレーション、デプロイのための複数のオプションのおかげで、開発者に柔軟性を提供することです。 開発者は、ニーズに最適なソリューションを選択できます。

ただし、オプションが非常に多いため、どのオプションを使用するかを判断するのが難しい場合があります。 これらのサービスのいくつかを決定する方法に関するいくつかのヒントを次に示します。

Elastic Beanstalk vs ECS

Elastic BeanstalkとECSはどちらもコンテナ化プラットフォームですが、利用可能な制御の程度は、両者の重要な違いのXNUMXつです。 Beanstalkを使用すると、開発者はリソースのプロビジョニング、構成、またはデプロイについて心配する必要がありません。 アプリケーションイメージをアップロードするだけで、残りはElasticBeanstalkに任せます。 一方、ECSは、環境をより詳細に制御します。 

どのオプションが最適ですか?

ECSを使用すると、開発者はアプリケーションアーキテクチャをきめ細かく制御できます。 Elastic Beanstalkは、コンテナを使用したいが、画像をアップロードしてアプリを簡単にデプロイしたい場合に最適です。 

ECSとEC2

AWS ECSは、コンテナ化されたワークロードのデプロイとスケーリングを容易にするコンテナオーケストレーションサービスです。 Elastic Container Serviceは、AmazonFargateの起動タイプをサポートしています。 AWS EC2を使用すると、AWSがクラウドクラスターでコンテナーを実行および管理するときに、ユーザーはコンテナー管理を構成または管理する必要がありません。

シナリオ例:ECSからEKSへの移行

開発者が8つのサービスから別のサービスに移行したい場合があります。 XNUMXつの例は、ECSからEKSへの移行です。 なぜ彼らはこれをしたいのですか? 前述したように、ECSはAWS独自のものであり、構成の多くはAWSに関連付けられています。 EKSは、オープンソースで大規模な開発コミュニティを持つKubernetesを実行しています。 ECSはAWSでのみ実行されますが、KXNUMXs(EKSで実行される)はAWSまたは別のクラウドプロバイダーで実行できます。

EKSに移行することで、開発者はクラウドプロバイダーをより柔軟に移行できるようになります。 次の手順に従うことで、ダウンタイムなしでECSで実行されている既存のワークロードをEKSに移動できます。

  1. ecs-to-eksツールを使用して、ECSクラスターをAmazonS3バケットにエクスポートします。
  2. AWS CLIを使用して、エクスポートされたJSONを入力パラメーターとして指定して、新しいEKSクラスターを作成します。
  3. kubectlを使用して新しいEKSクラスターに接続し、簡単なスクリプトを使用して、エクスポートされたコンテナーをS3から新しいクラスターにロードします。
  4. AWSelbv2update-load-balancersコマンドとawseksupdate-appコマンドを使用してアプリケーションのスケーリングを開始するか、この目的でAWS CloudFormationテンプレートを使用します(ここの例を参照)。
  5. ユーザーがアプリケーションをEKSに正常にデプロイすると、(必要に応じて)古いECSクラスターを削除できます。