タスク定義を作ろう
タスク定義ってなんだ?
ECS で Docker コンテナを実行するには、タスク定義が必要です。
タスク定義とは、複数のコンテナをグループにしたものです。
「コンテナをグループにしたもの?」なんだかフワッとしていて想像しにくいですよね。
そこで、実物を見てみましょう。たとえば今回作るのはこんなタスク定義です。
https://gyazo.com/b5dd0c572ecdf48a438e2fbe24efddd5
1つのインスタンスに「simple-app」というコンテナと「busybox」というコンテナを1つずつ載せるという設定です。
コンテナのイメージは、simple-appには先ほどECRにpushしたイメージを、busyboxにはbusyboxをそのまま使います。
CPUユニット数やメモリ制限もそれぞれ指定できます。
今回はCPUユニットはそれぞれ10、メモリ制限はそれぞれ300とします。
さらに、コンテナを立ち上げたあと、コンテナ内でどんなコマンドを実行させるかも指定できます。
https://gyazo.com/b0f2702de890ed6235dcefa499ceeef2
このタスク定義は、ブラウザ上でポチポチ登録していくこともできますが、実はJSONファイルで一括指定が可能です。
さっきDockerイメージを作るときに使ったAWS公式のサンプルリポジトリの中に、simple-app-task-def.jsonというファイルがあるはずです。これを使います。
code:simple-app-task-def.json
{
"family": "console-sample-app", //タスク定義名
"volumes": [
{
"name": "my-vol",
"host": {}
}
],
"containerDefinitions": [
{
"environment": [],
"name": "simple-app",
"image": "amazon/amazon-ecs-sample",
"cpu": 10,
"memory": 500,
"portMappings": [
{
"containerPort": 80,
"hostPort": 80
}
],
"mountPoints": [
{
"sourceVolume": "my-vol",
"containerPath": "/var/www/my-vol"
}
],
"entryPoint": [
"/usr/sbin/apache2",
"-D",
"FOREGROUND"
],
"essential": true
},
{
"name": "busybox",
"image": "busybox",
"cpu": 10,
"memory": 500,
"volumesFrom": [
{
"sourceContainer": "simple-app"
}
],
"entryPoint": [
"sh",
"-c"
],
"command": [
"/bin/sh -c \"while true; do /bin/date > /var/www/my-vol/date; sleep 1; done\""
],
"essential": false
}
]
}
書き換える箇所その1
simple-app-task-def.jsonを開き "image": "amazon/amazon-ecs-sample", の部分を、自分のアカウントIDとリージョンに書き換えて保存しましょう。
"image": "AWSアカウントID.dkr.ecr.リージョン.amazonaws.com/amazon-ecs-sample"
例:101111111111.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-ecs-sample
書き換える場所その2
メモリ不足で動かないことを防ぐために、"memory": 500, となっているところを "memory": 300, に書き換えましょう
書き換え終わったら、simple-app-task-def.jsonをローカルで保存します。
そのあと、このコマンドで、タスク定義を ECS上に登録します。
$ aws ecs register-task-definition --cli-input-json file://simple-app-task-def.json
ECSのサイドメニューから「タスク定義」をクリックすると
console-sample-appという名前のタスク定義ができているはずです!
https://gyazo.com/120cbbda471e08ca571b7c4fbd807920
console-sample-appの字をクリックすると、タスク定義の詳細が見られます。
🌱llminatoll.icon「コマンドラインでタスク定義しようとしても、エラーが出てできないよ!?」という場合
次のコマンドでログインし直してから再チャレンジしてみてください。
$ aws ecr get-login --no-include-email --region ap-northeast-1
🌱llminatoll.icon「作ったタスクがちっとも表示されないよ!?」という場合
画面右上のリージョンが「東京(ap-northeast-1)」になっていることを確認してください。東京以外の場合はプルダウンから切り替えてみると、今作ったタスクが確認できるはずです。
タスク定義のリビジョン
タスク定義にはリビジョンがあります。言い方を変えると「バージョン管理機能がある」という意味です。
同じ名前のタスク定義をプッシュすると、AWSが勝手に以前のバージョンを保存しておいてくれるわけです。
リビジョンが役立つのは「もともと正常に動いていたタスクを修正したら動かなくなってしまった!」という場合です。
正常に動いていたときのタスク定義を指定することで、すばやく正常な状態に戻すことができます。
▼数字が大きいほど最新のバージョンだ
https://gyazo.com/072604b2865792d552236bbb333d33ed
次