【AWS】 ECS解説
AWS ECS(Amazon Web Services Elastic Container Service)
コンテナ化されたアプリケーションを簡単にデプロイ、管理、スケールできるマネージドサービスです。ECSを使用することで、開発者やシステム管理者はアプリケーションのインフラストラクチャを気にすることなく、コンテナオーケストレーションのタスクに集中できる。
また、需要に応じて自動的にスケールアップおよびスケールダウンする機能(キャパシティープロバイダー)を持っているため、トラフィックの増加にも柔軟に対応可能。IAMと統合されているため、各コンテナとリソースへのアクセスを細かくコントロールできる。複数のサーバーまたはFargateのリソースを使用することで、単一障害点のリスクを減らし、アプリケーションの可用性を向上。
クラスター
コンテナ化されたアプリケーションを実行するためのリソースグループのこと。コンテナのデプロイメント、管理、スケーリングなどが行われ、物理的なサーバーや仮想マシンを超えてコンテナをオーケストレートするための論理的な構造体。
EC2クラスター: EC2インスタンスを利用して、自分でサーバーの設定やスケーリングを行うタイプのクラスター。より細かなリソースの制御が必要な場合に適しています。
Fargateクラスター: サーバーレスのオプションで、AWSが全てのインフラを管理。ユーザーはコンテナのスペックを指定するだけで、残りはAWSが自動で処理する。
名前空間
リソースやオブジェクトを隔離し、管理するための論理的な区分けのこと。ECSでは、特にタスクやサービス、コンテナインスタンスなどが同じクラスター内で稼働していても、異なる名前空間に属することによって互いに干渉しないように管理される。これにより、異なる環境やプロジェクトのリソースを効果的に分離し、セキュリティと管理の複雑さを低減、また名前空間はアクセス権限の設定やポリシーの適用にも利用されるため、セキュリティを強化しやすくなる。
タスク定義
コンテナをどのように実行するかを指定するための設定する JSON 形式のテキストファイル。タスク定義に基づいてタスク(コンテナのインスタンス)が起動され、実行するコンテナのイメージ、使用するCPUやメモリの量、環境変数、ログの設定などの情報が含まれる。
タスク定義は、コンテナの起動パラメーターのテンプレートのようなものであり、特定のコンテナセットのデプロイメントを再現可能にするために使用されます。これにより、同じ設定でコンテナを何度も簡単にデプロイすることが可能になります。タスク定義を更新することで、新しいコンテナイメージに基づいた更新や設定変更が新たなタスク起動時に反映されます。
Docker Hub でホストされている httpd コンテナイメージを使用して PHP ウェブアプリケーションを作成するシンプルなタスク定義例
{
"family": "sample-fargate",
"networkMode": "awsvpc",
"taskRoleArn": "arn:aws:iam::aws_account_id:role/execCommandRole",
"containerDefinitions": [
{
"name": "fargate-app",
"image": "public.ecr.aws/docker/library/httpd:latest",
"portMappings": [
{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
],
"essential": true,
"entryPoint": [
"sh",
"-c"
],
"command": [
"/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\""
]
}
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "256",
"memory": "512"
}
family: タスク定義の名前を識別します。ここでは"sample-fargate"と設定されています。
networkMode: ネットワークモードを指定します。"awsvpc"は、タスクが自身のElastic Network Interfaceを持つことを意味し、VPC内のリソースにプライベートIPアドレスでアクセスできます。
taskRoleArn: タスクに割り当てるIAMロールのARNです。このロールによって、タスクはAWSのリソースに対して特定の操作を許可されます。
containerDefinitions: タスク内で実行されるコンテナの設定です。
name: コンテナの名前。
image: コンテナイメージのURI。ここではApache HTTPサーバーの最新版が指定されています。
portMappings: コンテナがリッスンするポートとその設定。
essential: このコンテナが失敗すると、タスク全体が失敗します。
entryPointとcommand: コンテナ起動時に実行されるコマンド。ここではカスタムHTMLページを作成してApacheサーバーを起動しています。
requiresCompatibilities: タスクが要求する互換性。"FARGATE"は、このタスクがFargateでのみ実行されることを指定します。
cpuとmemory: タスクに割り当てるCPUとメモリの量。
ECSのプロビジョニング
コンテナ化されたアプリケーションをECS環境で実行するために必要なリソースと設定を準備するプロセス。具体的には、コンテナを運用するために必要な仕様をタスク定義で設定し、それを元にサービスを作成してクラスター内でコンテナが適切に実行されるように管理する。
適切なコンピューティングリソースの割り当て、ネットワーク設定、ロードバランサーの統合、および必要に応じた自動スケーリングなどが含まれま、ECSを使用してアプリケーションをスムーズにデプロイし運用するための一連の準備作業を指す。
Fargate
サーバーレスコンピュートエンジンで、ECSやElastic Kubernetes Service(EKS)と統合して使用されます。このサービスを使用すると、ユーザーはサーバーのプロビジョニングやクラスターの管理を気にすることなく、コンテナ化されたアプリケーションを直接デプロイして実行することができる。従量課金制。
ECR(Elastic Container Registry)
コンテナイメージを安全に保存、管理、デプロイするためのフルマネージド型のDockerコンテナレジストリサービス。AWS上で容易にコンテナイメージを共有し、ECSやEKS(Elastic Kubernetes Service)などのAWSのコンテナ管理サービスとシームレスに統合される。
コンテナイメージのセキュリティを強化するために、イメージのスキャンを提供している。このスキャンによって、イメージ内の脆弱性が自動的に検出される。また、IAMを通じたアクセス制御が可能で、特定のユーザーまたはロールに対してレジストリへのアクセス権を管理できる。
イメージのビルドからテスト、デプロイメントまで、CI/CDパイプライン(継続的インテグレーション/継続的デリバリー)と連携しやすい。ストレージとデータ転送に対して料金がかかりますが、データ転送料は同じAWSリージョン内であれば無料。
AWS ECS Anywhere
ECSの拡張機能の一つで、ユーザーが自分のオンプレミスのサーバーや他のクラウド環境にあるサーバー上でECSを利用してコンテナを実行できるようにするサービス。これにより、任意の場所にある物理的、仮想的なインフラ上でも、ECSの管理機能を使用してコンテナアプリケーションをデプロイし、運用することが可能になる。
AWSのクラウドサービスを利用しつつ、自社のセキュリティとコンプライアンスの要件を満たしながら、アプリケーションのデプロイメントと管理の柔軟性を大幅に向上させることができる。
よろしければサポートお願いします!よりいい情報を発信します。