AWS ECSとAWS Lambda:違いと選び方

AWS ECSとAWS Lambda:違いと選び方

  • クラウド
6分で読めます 更新日 May 6, 2021

ポイント: AWS ECSとLambdaは、AWS上でのアプリケーションデプロイに不可欠です。ECSはDockerコンテナをオーケストレーションし、Lambdaはイベント駆動型アプリケーションのためのサーバーレス関数を可能にします。

  • ECSは、さまざまな環境でコンテナを管理する柔軟性を提供します。
  • Lambdaは、インフラストラクチャ管理なしで迅速なデプロイが必要な小規模なアプリケーションに最適です。

AWSエコシステムには、コードとアプリケーションのデプロイのための複数のオプションがあります。AWSアプリケーションデプロイメントの最も人気のある2つのオプションは:

  • Elastic Container Service (ECS)
  • AWS Lambda

今日はECSとLambdaを見て、それぞれのオプションが何をするのかを説明し、どちらのオプションを選ぶかに関する重要な考慮事項を議論します。

AWS ECS

Elastic Container Services (ECS):コンテナオーケストレーション

ECSは、スケールでDockerコンテナを管理し、デプロイするために使用されます(コンテナオーケストレーション)。ECSは、ECSアプリケーションを保存し実行するために次のAWSコンポーネントを使用します:

  • AWS ECR
  • ECSクラスター
  • タスク定義
  • ECSサービススケジューラ
  • 他のAWSサービス

見てみましょう。

AWS Elastic Container Repository (ECR)

ECRは、コンテナイメージを管理、保存、圧縮、保護し、アクセスを制御します。代わりに、Docker Hubを使用してコンテナイメージを保存し、アクセスすることもできます。

コンテナ化されたアプリケーションを実行するためのAWS ECSクラスター

クラスターは、複数の異なる起動タイプ(インフラストラクチャ)を使用して実行されるタスクとコンテナの論理的なグループです。クラスターには次のものが含まれます:

  • Elastic Cloud Compute (EC2)インスタンス
  • AWS Fargateを使用したAmazon管理のインスタンス
  • Amazon ECS Anywhereを使用してAmazonエコシステムの外部サーバー

EC2インスタンスをECSクラスターに追加する場合、クラスタ内のEC2サーバーを管理する必要があります。これには、EC2のセキュリティをロックダウンし、アクセスを管理し、オペレーティングシステムをパッチし、メンテナンスを行うことが含まれます。AWS Fargateは、ECSと連携するサーバーレスコンピューティング環境です。ECSクラスターにFargateタスクを追加すると、AWSがコンテナが実行されるEC2サーバーをプロビジョニングし、管理します。これにより、別のEC2インフラストラクチャを管理する必要がなくなります。Amazon ECS Anywhereは、AWSエコシステムの外部サーバーでコンテナ化されたアプリケーションを実行できるECSの拡張です。ECS Anywhereは、顧客管理のオペレーティングシステムにエージェントをロードし、それらを管理されたインスタンスにし、これらのインスタンスをECSクラスターに登録できるようにします。

タスク定義

タスク定義は、ECSアプリケーションを定義する1〜10のコンテナ(およびパラメータ)を説明します。タスク定義はJSONファイルとして保存されます。

AWS ECSサービススケジューラ

このサービスは、ECSクラスターインフラストラクチャ内で実行するためにタスク(タスク定義のインスタンス)をスケジュールします。これは、cronのようなスケジュールまたは独自のカスタムスケジュールでタスクを実行します。タスクスケジューラはまた:

  • クラスタサーバー間での負荷分散のためにAWS Elastic Load Balancers (ELBs)に対してタスクが登録されていることを確認します。
  • すべてのタスク配置戦略を処理します。

他のサービス

AWSは他のAWSサービスとも統合されています。

ECSの動作

まとめると、ECSサービススケジューラは、Elastic Container RepositoryまたはDocker Hubに保存されたDockerコンテナを参照し、使用するタスク定義を使用してECSクラスターにタスクを起動します。ECSを使用することは、独自のEC2サーバークラスターを定義し、AWSがEC2サーバーを管理およびデプロイする(AWS Fargateを利用する)、外部サーバーを使用する(ECS Anywhereを利用する)、またはその両方の組み合わせを使用できることが特筆されます。クラスターとECSタスクは、指定されたAWS Virtual Private Clouds (VPCs)とサブネット内で実行されます。

AWS Lambda:サーバーレス関数デプロイ

AWS Lambdaは、新しいイベントと情報によってトリガーされる小さなオンデマンドアプリケーションの実行に優れています。Lambdaは、インフラストラクチャをプロビジョニングおよび管理する必要なくコードを実行するAWSサービスです。EC2のプロビジョニングやクラスターを定義する必要はありません。Lambdaは、コードが実行されるEC2インスタンスを完全に制御し、必要に応じて自動でスケールします。Lambdaは、次のように関数とコードレベルで動作します:

実行したいコードを作成する

Lambdaは、Lambdaランタイムを通じて多くの言語をサポートしています。これには、nodeJS、Python、Go、Java、Ruby、.Net、およびC#が含まれます。

コードをパッケージ化してアップロードする

コードをzipまたはjarデプロイメントパッケージにパッケージ化し、LambdaコンソールまたはAWS CLIを使用してアップロードします。エントリポイントとして機能するファイルと関数名を指定します。アップロード後、Lambdaは関数に対するAmazonリソース名(ARN)を提供します。これは、作成した関数のIDとして機能します。Lambda関数は、次のようにいくつかの方法で呼び出されます:

  • Lambdaコンソール、Lambda API、AWSソフトウェア開発キット(AWS SDK)、AWS CLI、およびAWSツールキットから直接
  • Lambdaリソースまたは他のリソースのトリガーから
  • Lambda関数を呼び出すLambdaイベントソースマッピングから。Lambdaは、Amazon DynamoDB、Amazon Simple Queue Service (SQS)など、複数のAWSサービスからイベントを読み取ります。イベントソースは、AWS CLIまたはAWS SDKで作成されます。
  • AWS ELB、AWS Simple Notification Service (SNS)、Amazon API Gatewayなど、Lambdaを直接呼び出すAWSサービスから。

関数は次のように呼び出されることができます:

  • 同期的に、Lambdaは関数を実行後に応答を待ち、応答コードと追加データをクライアントに返します。これにより、再試行やエラー応答が可能になります
  • 非同期的に、クライアントがイベントをLambdaに渡し、応答コードとデータを待たない。

関数の初回呼び出し後、Lambdaはトラフィックが急増したときに毎分追加の500インスタンスをスケールできます。トラフィックを処理するのに十分なインスタンスがあるまでスケーリングが続きます。スケーリングは、Lambdaの同時実行制限に達するまで続きます。または、リクエストが関数がスケールできるよりも早く到着します。プロビジョニングされた同時実行を契約して、Lambdaのスケーリング待機を防ぐこともできます。トラフィックが減少すると、Lambdaは未使用のインスタンスを停止します。

Lambdaの動作

Lambdaは、サーバーレスアプリケーションデプロイメントをプロビジョニングします。これには、

  • EC2インスタンス設定
  • 負荷分散
  • ターゲットグループ
  • 自動スケーリング

あなたの主な責任は、関数と呼び出し設定を設定することです。Lambdaが残りを行います。Lambda関数は簡単に設定でき、インフラストラクチャに関して心配する必要がありません。

AWS Lambda

ECSとLambda:どちらがあなたに適しているか?

それぞれのアプリケーションデプロイメントオプションが何をするか、どのように機能するかを見た今、どちらかのオプションを選ぶ際の考慮事項をいくつか示します。

LambdaをECSよりも選ぶべき時

  • 15分以内にオンデマンドで実行される小さなアプリケーションがある。Lambda関数は、3秒から900秒(15分)まで設定できるタイムアウト値によって制限されています。Lambdaは、タイムアウト値を超えて実行されている関数を自動的に終了します。
  • 高度なEC2インスタンス構成を気にしない、または必要ない。Lambdaは、EC2インスタンスを管理し、プロビジョニングし、保護します。これにより、ターゲットグループ、負荷分散、および自動スケーリングを提供します。EC2インスタンスの管理の複雑さを排除します。
  • 使用した分だけの容量に対して支払いを希望。Lambdaの料金は、使用されたミリ秒数とコードがトリガーされた回数によって測定されます。コストは使用量に関連付けられています。Lambdaには無料の使用枠もあります。

ECSをLambdaよりも選ぶべき時

  • Dockerコンテナを実行している。Lambdaは現在コンテナイメージサポートを提供していますが、ECSはDockerエコシステムにとってより良い選択です。特にDockerコンテナを作成している場合は、特にそうです。
  • 管理されたEC2環境またはサーバーレス環境で実行する柔軟性が必要。自分のEC2インスタンスをプロビジョニングすることも、Amazonがそれらをプロビジョニングすることもできます。いくつかのオプションがあります。
  • 15分を超える長時間実行されるタスクやバッチジョブがある。上記のLambdaタイムアウト制限を回避するために、長時間実行されるジョブを処理する場合はECSを選択してください。
  • ジョブをスケジュールする必要がある。ECSは、長時間実行されるタスクとアプリケーションのためのサービススケジューラを提供し、タスクを手動で実行する能力も提供します。

一般的に、ECSはAWS上でクラスターユーザーのコンテナ環境を実行するのに最適です。Lambdaは、インフラストラクチャ管理なしで迅速に小さなオンデマンドアプリケーションをデプロイするのに最適です。

関連文献

これらの投稿は私自身の意見であり、必ずしもBMCの立場、戦略、または意見を代表するものではありません。

クラウドの関連記事

The Briefを購読する

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ありがとう

あなたはThe Briefに登録されました
The Briefはメインフレームとエンタープライズオーケストレーション—BMC AMIとControl-M—および、両者に関するアナリストの研究、顧客の展開、イベントをカバーしています。