ECSタスクでHello Worldしてみた

AWS ECSとAWS Fargateを利用してhello-worldコンテナを実行してみました。
2020.05.07

AWS運用かんたん自動化ツール「opswitch」の開発・運用をしています、muroです。opswitchではAmazon ECSを利用しており、サービスとして常時サーバアプリケーションを起動させています。今回はECSを使って、常時起動させるアプリケーションの実行ではなく、処理が終わればコンテナが終了するようなタスクを実行してみようと思います。

はじめに

CLIを利用せずに、マネジメントコンソールから以下の手順で操作していきます。

  1. Dockerイメージの準備
  2. タスクの設定
  3. クラスターの設定
  4. タスクの実行

より詳細な手順や設定方法はAWS公式の開発ガイドもご覧ください。

Amazon Elastic Container Service とは - Amazon Elastic Container Service

Dockerイメージの準備

Docker Hubの公式イメージにちょうど良さそうなイメージがありました。

hello-world - Docker Hub

起動すると以下のメッセージを出力して終了します。

$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

今回はこちらを使ってみようと思います。

タスクの設定

それではタスクを作成していきます。

  • 起動タイプはFargateを選択し、次のステップに進みます。

  • 続いてタスクを設定していきます。フォームに沿って以下の通り入力、選択しました。

  • タスク定義名: helloworld-task
  • タスクメモリ (GB): 2GB
  • タスク CPU (vCPU): 1 vCPU

  • 続いてコンテナを設定していきます。

  • コンテナ名: helloworld-container
  • イメージ: hello-world

なお、コンテナイメージはDocker Hub レジストリのイメージを指定して利用できる他、Amazon ECRに格納した自前のイメージも利用できます。

  • 最後に作成ボタンをクリックしてタスク定義の作成を完了します。

クラスターの設定

次にクラスターを設定していきます。

  • クラスターテンプレートを選択します。先に作成したタスク定義の起動タイプをFargateにしたので、ここではネットワーキングのみを選択して次のステップに進みます。

  • 続いてクラスターを設定します。クラスター名を入力して作成します。

  • クラスター名: helloworld-cluster

  • クラスターを作成できました。

タスクの実行

さて、いよいよタスクを実行します。

  • タスク定義からhelloworld-taskを選択して、「アクション」から「タスクの実行」を選択します。

  • タスクの実行条件を設定します。

  • 起動タイプ: FARGATE
  • クラスター: helloworld-cluster
  • クラスターVPC: VPCを選択します。
  • サブネット: サブネットを選択します。

  • タスクの実行」をクリックして実行します。

  • クラスターのタスクタブにタスクが表示され、しばらくするとRunningからStoppedに変わります。

  • タスクの詳細でLogsタブを開くとhello-worldコンテナのメッセージがログに出力されています。

さいごに

AWS ECSとAWS Fargateを利用して、処理が終わったらコンテナを終了するタスクを実行できました。いわゆるバッチ処理の実行に利用できると思います。バッチ処理の実行にはAWS Batchも利用できますね。また15分未満の実行時間であればLambdaも選択肢の一つだと思います。

なお、同様の操作をCLIで試された記事がQiitaにありました。こちらも参考にどうぞ。

ecs-cliでHelloWorldしてみた - Qiita