見出し画像

ECS&ECR 第三回(動作確認まで)

前回の記事でネットワーク周りの設定を行っていきました

本記事ではECSでコンテナを起動し、動作確認するまでの手順を書いていこうと思います


準備

手順の確認を行っていきます

VPCの作成
↓
サブネットの作成
↓
インターネットゲートウェイの作成
↓
ルートテーブルの作成
↓
ECSクラスタの作成
↓
ECSタスク定義の作成
↓
コンテナ起動で動作確認​

このルートテーブルの作成までは終わっているので

今回扱う内容はECSクラスタ作成、ECSタスク定義作成、動作確認となります

早速やっていきたいと思います



【手順5】ECSクラスタの作成

ECSクラスタはコンテナインスタンスの集合体です

どんなタイプで起動するか(EC2やFargateなど)を設定して作成していきます

マネジメントコンソールからECSを検索し、下記画面へ移動してください

ダッシュボードからクラスターを選択し、早速クラスターを作成していきます

画像1


「クラスターの作成」をクリックし、作成画面へ移動します

画像2


クラスターテンプレートの選択を行います

今回はFargateを選択することにします

画像3


クラスター名を「ecs-demo-cluster」、にし、名前タグをつけて作成します

画像4


正常に作成できたようです

クラスタ作成の手順はここまでとなります

画像5

画像6



【手順6】ECSタスク定義の作成

おそらく一番の山場

タスクとはコンテナの実行単位のことです

タスクはタスク定義をもとに開始されますがこの手順で作成するのはその定義の部分です


まずはECSのタスク定義画面より「新しいタスク定義の作成」をクリックします

画像7


起動タイプはFargateとし、「次のステップ」をクリックします

画像8


まずタスク定義名をつけていきます

今回は「ecs-demo-task-definition」としておきます

画像9


タスクロールを設定してきます

タスクロールはコンテナインスタンスがアクセスできるAWSリソースへの権限のことです

今回はロールを作成していないので「なし」しか選択できませんが、S3へのリードオンリー権限を付与したいなどの場合は予めIAMコンソールからECSコンテナインスタンスIAMロールを作成します


画像10


次に何かしらの操作を行うものではありませんがタスク実行ロールを見ていきます

ecsTaskExecutionRoleがデフォルトで設定されていると思います

これはECSがECRからイメージをプルしたりコンテナログをCloudwatchに出力するために必要な権限となっています

中身は以下のJSONです

タスクロール(コンテナインスタンスのロール)とタスク実行ロール(ECSのロール)の違うものなので注意が必要かもしれません

{
 "Version": "2012-10-17",
 "Statement": [
   {
     "Effect": "Allow",
     "Action": [
       "ecr:GetAuthorizationToken",
       "ecr:BatchCheckLayerAvailability",
       "ecr:GetDownloadUrlForLayer",
       "ecr:BatchGetImage",
       "logs:CreateLogStream",
       "logs:PutLogEvents"
     ],
     "Resource": "*"
   }
 ]
}


次にタスクメモリやCPUサイズを設定していきます

画像11


タスクメモリは最小の0.5GB、

画像12


タスクCPUも最小の0.25CPUでOKです

画像13


次にコンテナの追加をしていきます

画像14


ここでコンテナ名やイメージを設定していきます

画像15


イメージに関しては今回はECRにプッシュしたイメージを利用するため、ECRの下記画面からURIの赤枠部分をコピーペーストします

なお、dockerhubのイメージを利用することも可能なのでそれで十分な場合はそちらも利用できます

画像16


コンテナ名とイメージを入力します

画像17


次にメモリ制限とポートマッピングを設定していきます

メモリは最小値の128MiBで今回は十分です

ポートマッピングについては80を設定します

画像18

画像19


以下からは今回は設定しませんが、どのような項目であるか簡単に説明していきます


ヘルスチェック

ヘルスチェックの設定を行うことができます

例えばcurlコマンドの実行間隔、タイムアウト(失敗と判定されるまでの時間)、開始期間、再試行(異常と判定されるまでの回数)を設定できます

画像20


環境

コンテナ用に予約する環境を設定します

CPUユニット数、GPU、基本(ここにチェックが入っている場合はコンテナが何らかの原因で停止するとタスク内の他のコンテナが停止し、入っていない場合は停止しません)の設定ができます

他にもDockerfileでいうところのENTRYPOINT、CMD、WORKDIR、ENVを設定できる項目もあります

画像21


コンテナタイムアウト

コンテナごとの開始と終了の依存関係を定義することができますが、タイムアウト開始(依存関係解決の再試行を諦めるまでの時間)と停止タイムアウト(コンテナが正常終了しなかった場合の強制終了されるまでの待機時間)を設定できます

画像22


ネットワーク設定

コンテナのネットワーク設定ができます

リンクはDockerで非推奨となっているので使用には注意が必要です

あとはホスト名(コンテナのホスト名)、DNSサーバー、検索ドメイン、追加ホスト(コンテナ上の/etc/hostsに追加するホスト名とIPアドレスのマッピング)を設定できます

画像23


ストレージとログ

マウントポイントはEFSなどをマウントできるようになる設定項目です

ボリュームソースについては、ソースコンテナのマウントしているボリュームをまるっとマウントできるような設定項目となっています

ログ設定についてですが、awslogsを選択しておけばclowdwatchにログが図れることになります

画像24


リソースの制限

Linuxであるようなulimitをコンテナに設定できます

画像25


DOCKERラベル

コンテナに追加するラベルのkey/value値です

画像26


設定を色々見ていきましたが、最後に「追加」ボタンをクリックします

画像27


設定した内容を見てタスクメモリが割り当てられ、コンテナが追加されました

このタスク定義によって起動されるタスクには一つのコンテナが立ち上がるイメージです

画像28


ネームタグを「ecs-demo-task-definition」とし、「追加」をクリックします

画像29


タスク定義の作成に成功しました

画像30


タスク定義はJSON形式となっており、JSONタブから確認することができます

画像31

画像32



【手順7】コンテナ起動し動作確認

クラスタの作成とタスク定義の作成まで終了したので実際に起動して動作確認を行っていきたいと思います

まずはクラスター画面から作成したクラスターをクリックします

画像33


下記画面へ遷移するのでサービスタブから「作成」をクリックします

サービスはクラスターとタスク定義を紐付けたもののことです

画像34


サービス作成画面へ遷移します

今回はfargateを使用するのでまずはFARGATEを選択します

画像35


次にタスク定義、そのリビジョン(一つのリビジョンしかないのでそれがlatestでそれ以外は選択できません)、クラスター、サービス名(今回は「ecs-demo-service」とします)を設定します

画像36


次にタスクの数を設定していきます

タスクはコンテナの起動単位ですのでこの数分のコンテナインスタンスが立ち上がることになります

画像37

画像38


ネームタグを「ecs-demo-service」とし、「次のステップ」をクリックします

画像39


次はネットワークの設定です

VPC、サブネット、パブリックIPの割当を設定します

(パブリックIPの割当は当たり前ですがENABLEのままにしておきます)

画像40


クラスターVPCには前回作成したVPCを設定します

画像41


サブネットも前回作成したパブリックサブネットを設定します

画像42


次にセキュリティグループの設定をしていきます

デフォルトで「ecs-de-1041」と入っていますがこれを変更してみましょう

「編集」をクリックします

画像43


下記のような画面が出てくるのでセキュリティグループ名を「ecs-demo-sg」に変更します

ちなみにインバウンドルールについてですがインターネットからアクセスするため、下記のような任意のIPアドレスからインバウンド(中へ入る)HTTPアクセスを許可する設定となっています

画像44


「保存」をクリックします

画像45


ロードバランサは今回使用しないためなしとします

画像46


「次のステップ」をクリックします

画像47


Auto Scalingもしないためそのまま「次のステップ」をクリックします

画像48


最後に今まで設定した内容を確認し、OKであれば「サービスの作成」をクリックします

画像49

画像50


成功しました

「サービスの表示」をクリックし、作成されたサービスを確認します

画像51

画像52


タスクタブから今回起動されたタスクを選択します

画像53


詳細画面でパブリックIPが見られるのでそれをブラウザに入力してアクセスしてみます

画像54


ローカルで確認したとき同様、Hello Worldができました!

画像55


最後に

ECSやってみた記事は以上となります

タスク定義がとにかく難しいですし、今回飛ばしたようなオートスケールなども重要になってくるはずですので

時間があればそちらにフォーカスした記事も作ってみたいと思います


この記事が気に入ったらサポートをしてみませんか?