#はじめに
前の記事で簡易的なECSクラスタを作成しました。
その続きとして、今回はタスク定義やサービスについて学びました。
#タスク定義とは
タスク定義はDockerコンテナの実行方法や起動タイプなどをECSに伝えるために必要なJSON形式のメタデータです。
タスク定義に基づいて実行されるコンテナ群のことをタスクといいます。
タスク定義には以下の情報が含まれます。
- コンテナイメージ名
- コンテナとホスト間のポートマッピング
- 必要CPU/RAM
- 環境変数
- ネットワーク情報
- IAMロール(タスクごとに定義)
- CloudWatchなどのログ設定
#サービスとは
サービスは以下の内容を設定する役割を持ちます。
- タスク定義のコピー数を指定(何個のタスクを実行すべきかを補助)
- ELBとの連携(受信トラフィックを各コンテナに分散)
#実装
Fargate起動タイプ、EC2起動タイプでそれぞれタスク定義とサービスの設定を行います。
##Fargate起動タイプ
タスク定義、タスク実行、サービスの順に触っていきます。
###タスク定義
ECS > タスク定義 > 新しいタスク定義の作成
からタスク定義を作成します。
まずは"起動タイプの互換性の選択"からFargateを選択します。
タスク定義名、タスクロール、タスクサイズを設定します。
タスクロールについては前の記事で作成したecsTaskExecutionRole
を適用します。
このロールには、ECRからコンテナイメージをプルしてCloudWatchにログを発行する権限が付与されています。
作成したタスク定義の画面から"コンテナの追加"を選択します。
コンテナ名、イメージ、ポートマッピングを設定します。
今回は以下のhttpサーバのイメージを使用します。
###タスク実行
タスク定義をもとにタスクを実行してみます。
タスクを実行したいクラスターを選択して、起動タイプ、タスク定義、VPC、サブネット、セキュリティグループなどを設定します。
セキュリティグループの設定では、インバウンドルールとしてカスタムTCPタイプでポート範囲8000を設定します。
[パブリックIP]:8000
にアクセスすると正しくレスポンスを返します。
###サービス作成
次にサービスを作成します。
起動タイプ、サービス名、タスクの数などを設定します。
今回、タスクの数は2にします。
ネットワーク構成(VPC、サブネット、セキュリティグループ、ロードバランシングなど)の設定を行います。
セキュリティグループには"タスク実行"で作成したsimplehttp-access
を指定します。
Auto Scaling(サービスの必要数の調整)の設定も行うことができますが、今回は"調整しない"設定にします。
##EC2起動タイプ
Fargate起動タイプと同様に、タスク定義、タスク実行、サービスの順に触っていきます。
タスク定義名、タスクロール、ネットワークモードなどを設定します。
"コンテナの追加"でコンテナ名、イメージ、ポートマッピングなどを設定します。
ホストポートにポート0を指定することで、ホストポートはコンテナインスタンスのポート範囲から動的に選択されます。
###タスク実行
EC2起動タイプで作成したクラスターを指定します。
外部リンクをクリックしても開けないので、EC2インスタンスのセキュリティグループでインバウンドルールのタイプを"すべてのTCP"にします。
またSSH接続できるように、SSHのインバウンドルールも追加します。
以下のコマンドでEC2インスタンスにSSH接続します。
$ ssh -i ~/.ssh/udemysample.pem ec2-user@ec2-13-114-33-141.ap-northeast-1.compute.amazonaws.com
実行されているコンテナが2つあることがわかります。
[ec2-user@ip-172-16-1-109 ~]$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e9c78ecc79e9 gkoenig/simplehttp:latest "/simpleHTTP" 2 hours ago Up 2 hours 0.0.0.0:32768->8000/tcp ecs-td-simplehttp-ec2-1-simplehttp-container-b8d997e9d4d1938e5900
4b198bf1e129 amazon/amazon-ecs-agent:latest "/agent" 2 hours ago Up 2 hours (healthy) ecs-agent
###サービス作成
Fargate起動タイプのときと同様に、起動タイプなどを設定します。
ロードバランサーやAuto Scalingの設定はそのままでサービスを作成すると、以下のようにタスクが実行されます。
マニュアルで実行したタスクと異なり、サービスで実行したタスクを停止すると、再度タスクが実行されます。
#参考資料
https://www.udemy.com/share/103fe82@PkdKZFlYTFYJcEBSOGJNfT1t/