LoginSignup
3
1

More than 1 year has passed since last update.

【AWS】ECS構築の基礎 −タスク定義・サービス編−

Last updated at Posted at 2021-07-03

はじめに

前の記事で簡易的なECSクラスタを作成しました。
その続きとして、今回はタスク定義やサービスについて学びました。

タスク定義とは

タスク定義はDockerコンテナの実行方法や起動タイプなどをECSに伝えるために必要なJSON形式のメタデータです。
タスク定義に基づいて実行されるコンテナ群のことをタスクといいます。

タスク定義には以下の情報が含まれます。

  • コンテナイメージ名
  • コンテナとホスト間のポートマッピング
  • 必要CPU/RAM
  • 環境変数
  • ネットワーク情報
  • IAMロール(タスクごとに定義)
  • CloudWatchなどのログ設定

サービスとは

サービスは以下の内容を設定する役割を持ちます。

  • タスク定義のコピー数を指定(何個のタスクを実行すべきかを補助)
  • ELBとの連携(受信トラフィックを各コンテナに分散)

実装

Fargate起動タイプ、EC2起動タイプでそれぞれタスク定義とサービスの設定を行います。

Fargate起動タイプ

タスク定義、タスク実行、サービスの順に触っていきます。

タスク定義

ECS > タスク定義 > 新しいタスク定義の作成からタスク定義を作成します。
まずは"起動タイプの互換性の選択"からFargateを選択します。
スクリーンショット 2021-06-23 7.31.39.png

タスク定義名、タスクロール、タスクサイズを設定します。
タスクロールについては前の記事で作成したecsTaskExecutionRoleを適用します。
このロールには、ECRからコンテナイメージをプルしてCloudWatchにログを発行する権限が付与されています。
スクリーンショット 2021-06-23 7.38.57.png

作成したタスク定義の画面から"コンテナの追加"を選択します。
コンテナ名、イメージ、ポートマッピングを設定します。

スクリーンショット 2021-06-23 7.40.38.png

今回は以下のhttpサーバのイメージを使用します。

タスク実行

タスク定義をもとにタスクを実行してみます。
タスクを実行したいクラスターを選択して、起動タイプ、タスク定義、VPC、サブネット、セキュリティグループなどを設定します。
スクリーンショット 2021-07-03 9.34.05.png

セキュリティグループの設定では、インバウンドルールとしてカスタムTCPタイプでポート範囲8000を設定します。
スクリーンショット 2021-07-03 9.34.21.png

このようなタスクが実行されます。
スクリーンショット 2021-07-03 9.40.31.png

[パブリックIP]:8000にアクセスすると正しくレスポンスを返します。
スクリーンショット 2021-07-03 9.41.40.png

サービス作成

次にサービスを作成します。

起動タイプ、サービス名、タスクの数などを設定します。
今回、タスクの数は2にします。
スクリーンショット 2021-07-03 10.04.37.png

ネットワーク構成(VPC、サブネット、セキュリティグループ、ロードバランシングなど)の設定を行います。
スクリーンショット 2021-07-03 10.07.54.png

セキュリティグループには"タスク実行"で作成したsimplehttp-accessを指定します。
スクリーンショット 2021-07-03 10.06.43.png

Auto Scaling(サービスの必要数の調整)の設定も行うことができますが、今回は"調整しない"設定にします。
スクリーンショット 2021-07-03 10.10.10.png

これで指定したタスク数(2)の分タスクが実行されます。
スクリーンショット 2021-07-03 10.11.52.png

EC2起動タイプ

Fargate起動タイプと同様に、タスク定義、タスク実行、サービスの順に触っていきます。

タスク定義

起動タイプの互換性でEC2を選択します。
スクリーンショット 2021-07-03 10.18.54.png

タスク定義名、タスクロール、ネットワークモードなどを設定します。
スクリーンショット 2021-07-03 10.26.46.png

"コンテナの追加"でコンテナ名、イメージ、ポートマッピングなどを設定します。
ホストポートにポート0を指定することで、ホストポートはコンテナインスタンスのポート範囲から動的に選択されます。
スクリーンショット 2021-07-03 10.42.28.png

タスク実行

EC2起動タイプで作成したクラスターを指定します。
スクリーンショット 2021-07-03 11.00.56.png

以下のタスクが実行されます。
スクリーンショット 2021-07-03 11.16.40.png

外部リンクをクリックしても開けないので、EC2インスタンスのセキュリティグループでインバウンドルールのタイプを"すべてのTCP"にします。
またSSH接続できるように、SSHのインバウンドルールも追加します。
スクリーンショット 2021-07-03 13.06.13.png

これでパブリックIPにアクセスできるようになります。
スクリーンショット 2021-07-03 12.59.20.png

以下のコマンドで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起動タイプのときと同様に、起動タイプなどを設定します。
スクリーンショット 2021-07-03 13.24.21.png

ロードバランサーやAuto Scalingの設定はそのままでサービスを作成すると、以下のようにタスクが実行されます。
スクリーンショット 2021-07-03 13.38.25.png

マニュアルで実行したタスクと異なり、サービスで実行したタスクを停止すると、再度タスクが実行されます。

参考資料

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1