AWS ECS(Amazon Elastic Container Service)は、Amazonでdocker技術を使ってコンテナを実行するためのサービスです。
AWSのdocker実行はAmazon ECS コンテナアプリケーションをAWS環境で起動
Amazon ECSは、コンテナを起動するサービスです。AWS Fargateが組み込まれていて、デフォルトでサーバーレスでのコンテナアプリケーション実行が可能です。サーバーの管理や容量計画、安全性についてもAWSに任せることができるので使い勝手が良いです。
【関連記事】
▶AWSのFargateは、サーバーレスでコンテナを実行/EC2アプリのコンテナ化の方法
サーバーレス実行はコスト面で有利ですが、サーバー終了時にデータも消失してしまいます。永続的なデータの保存が必要な場合は、EC2インスタンスとEBSを使ってコンテナを実行することもできます。
Amazon ECSの料金
Fargate起動タイプモデルと、EC2起動タイプモデルとで料金が異なります。
Fargate 起動タイプモデルでは、コンテナアプリケーション用の vCPU とメモリに料金が発生。コンテナイメージ取得時点から、 Amazon ECS タスク終了までが課金対象となり、秒単位で切り上げられます。最低料金は1分です。
EC2 起動タイプモデルでは、ECS使用のための追加料金は発生しません。用意したEC2インスタンスやEBSボリュームについてのみ料金が発生します。支払いは実際に使用した分だけで、最低料金や初期費用は不要です。
Amazon ECSの使い方
AWSマネジメントコンソールまたは、ECS CLIからAmazon ECSの設定が可能です。
【関連記事】
▶AWSを集中管理したい!AWS マネジメントコンソールを使いこなそう!
マネジメントコンソールから、Amazon ECSの画面を開くと、「クラスターテンプレートの選択」画面が表示されます。
関連)Amazon ECS
テンプレートは、初期導入を簡単にするためのもので、あとからその他の設定などの追加することが可能です。
「ネットワーキングのみ」(Fargateによるサーバーレス実行)「EC2 Linux + ネットワーキング」「EC2 Windows + ネットワーキング」が選択可能です。
「ネットワーキングのみ」で作成するリソースは、クラスター、VPC(オプション)、サブネット(オプション)。AWS FargateかExternalインスタンスキャパシティーのいずれかで使用。
「EC2 Linux+ネットワーキング」「EC2 Windows+ネットワーキング」は、オペレーティング・システムがLinuxかWindowsかの違いはありますが、どちらも作成するリソースは、クラスター、VPC、サブネット。Linux AMI または、WindowsAMIを持つ Auto Scaling グループを作成します。
続いて、作成するクラスターの情報を設定します。以下はテンプレートで「ネットワーキングのみ」を選んだ場合の例です。
クラスター名、ネットワーキングでVPCを作成するかどうか、Tagsではタグを付与できます。タグはアクセス許可などの際に利用されます。CloudWatch Container Insightsは、コンテナアプリケーションの監視サービスです。
CloudWatch Container Insights はコンテナ化されたアプリケーションとマイクロサービス用のモニタリングおよびトラブルシューティングソリューションです。CPU、メモリ、ディスク、ネットワークなどの計算使用率や、コンテナー再始動失敗などの診断情報を、収集、集約、要約してクラスターの問題を切り分け、迅速に解決します。
引用:Amazon ECS CloudWatch Container Insights – Amazon Elastic Container Service
ECS CLIで、Fargateタスクのコンテナクラスターを作成する
AWS ECSには、ECS CLIというコマンドラインインタフェースが用意されています。awsからバイナリをダウンロードしてインストールします。Windows用、Mac用、Linux用が用意されています。
参考)Amazon ECS CLI のインストール – Amazon Elastic Container Service
設定には、AWS CLIを併用します。
【関連記事】
▶AWS CLIのインストール方法 AWSアクセスキーの登録と疎通確認
IAMのタスク実行ロールを作成するために、以下の内容でtask-execution-assume-role.jsonというファイルを作成します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
作成したJSONファイルを使ってロールを作成します。
# タスク実行ロールを作成 aws iam --region us-west-2 create-role --role-name ecsTaskExecutionRole --assume-role-policy-document file://task-execution-assume-role.json # タスク実行ロールのポリシーをアタッチ aws iam --region us-west-2 attach-role-policy --role-name ecsTaskExecutionRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
続いて、Amazon ECS CLIを設定します。
#クラスター設定を作成 ecs-cli configure --cluster tutorial --default-launch-type FARGATE --config-name tutorial --region us-west-2 #アクセスキーとシークレットキーでCLIプロファイルを作成 ecs-cli configure profile --access-key AWS_ACCESS_KEY_ID --secret-key AWS_SECRET_ACCESS_KEY --profile-name tutorial-profile
クラスターの作成とセキュリティグループの設定をおこないます。
# ECSクラスターを作成 ecs-cli up --cluster-config tutorial --ecs-profile tutorial-profile # VPCのデフォルトのセキュリティグループのIDを取得 aws ec2 describe-security-groups --filters Name=vpc-id,Values=VPC_ID --region us-west-2 # セキュリティグループルールを追加、ポート80でのインバウンドアクセスを許可する aws ec2 authorize-security-group-ingress --group-id security_group_id --protocol tcp --port 80 --cidr 0.0.0.0/0 --region us-west-2
docker構成ファイルを作成します。ファイル名は、docker-compose.ymlとしています。内容は、ウェブサーバーへのトラフィック用にポート80を開き、コンテナのログをCloudWatchロググループに移動するように設定しています。
version: '3' services: web: image: amazon/amazon-ecs-sample ports: - "80:80" logging: driver: awslogs options: awslogs-group: tutorial awslogs-region: us-west-2 awslogs-stream-prefix: web
続いて、ECS固有のパラメータ設定用のファイルを作成します。ファイル名は、ecs-params.ymlとしています。メモリやCPUの制限、VPC、サブネット、セキュリティグループを指定しています。
version: 1 task_definition: task_execution_role: ecsTaskExecutionRole ecs_network_mode: awsvpc task_size: mem_limit: 0.5GB cpu_limit: 256 run_params: network_configuration: awsvpc_configuration: subnets: - "subnet ID 1" - "subnet ID 2" security_groups: - "security group ID" assign_public_ip: ENABLED
設定ファイルをデプロイして、コンテナの実行を確認します。
# クラスターに設定ファイルをデプロイ ecs-cli compose --project-name tutorial service up --create-log-groups --cluster-config tutorial --ecs-profile tutorial-profile # クラスターの実行中のコンテナを確認 ecs-cli compose --project-name tutorial service ps --cluster-config tutorial --ecs-profile tutorial-profile
出力は以下のようになります。
Name State Ports TaskDefinition Health tutorial/0c2862e6e39e4eff92ca3e4f843c5b9a/web RUNNING 34.222.202.55:80->80/tcp tutorial:1 UNKNOWN
AWS ECSのまとめ
- AWS ECSはAWSでコンテナアプリケーションを実行するサービス
- Fargateによるサーバーレスか、EC2、EBSによるコンテナ実行環境を選べる
- AWS ECSは、AWSマネジメントコンソールと、ECS CLIというコマンドラインインタフェースから操作が可能