AWS ESCで、タスク定義にDockerコンテナのイメージを適用してデプロイする方法についてメモ書きします。(Fargate利用)
前提
ECSを作成する対象のVPC、サブネット、セキュリティグループが作成されていること
ECSのクラスター、サービス、タスク定義が作成済みであること(Fargate利用)
ECRにDockerイメージをpushするためのリポジトリが作成済みであること
タスク定義に必要なロールが作成済みであること
デプロイするアプリケーションがDockerファイルと共に作成済みであること
ECRへイメージをpushする
ローカル端末のターミナルで作業を行います。
デプロイ対象のDockerfileのあるディレクトリで下記コマンドを実行します。(ビルドの実行)
docker build -t bilddata .
ECRに接続するためのコマンドを実行します。
123456789123
箇所を自分の環境にあったアカウントIDへと書き換えます。
<ECRのリポジトリ名>
には事前に作成したECRリポジトリの名前を指定します。
docker tag bilddata:latest 123456789123.dkr.ecr.ap-northeast-1.amazonaws.com/<ECRのリポジトリ名>:latest
下記コマンドを実行するとイメージがECRにプッシュされます。
docker push 123456789123.dkr.ecr.ap-northeast-1.amazonaws.com/<ECRのリポジトリ名>
マネージメントコンソールでECRにアクセスし、対象のECRリポジトリにlatestタグのイメージがpushされていることを確認します。
ECSタスクにコンテナイメージを適用する
マネージメントコンソールでECSにアクセスし、左ペインの「タスク定義」をクリックします。
先ほどpushしたイメージを設定したいタスクのチェックボックスにチェックを入れて、「新しいリビジョンの作成」をクリックします。
「新しいリビジョンの作成」をクリックすると「タスク定義の新しいリビジョンの作成」画面に遷移します。
その画面の「コンテナ名」まで移動し、編集対象のコンテナをクリックします。
クリックすると「イメージ」欄が表示されるので、適用対象のイメージがあるECSへの接続先を設定します。
下記画像ではECRのリポジトリ名を「test/api」としています。
その後ろに「:latest」と指定することで、どのイメージタグがついているイメージかを指定できます。
イメージの編集が完了したら「更新」ボタンを押します。
「タスク定義の新しいリビジョンの作成」ページに戻ったら「作成」ボタンをクリックします。
ECSサービスの更新
ECSサービスの更新を行うことで、先ほど設定したタスク定義の内容を反映します。
マネージメントコンソールから「ECS --> クラスター --> 対象クラスター名 --> 対象サービス」に移動し、「更新」ボタンをクリックします。
タスク定義欄のファミリーで先ほど定義したタスク名を選択します。
リビジョンについても先ほど定義したタスクの最新版(latest)を選択します。
後は画面下記の「次のステップ」ボタンを繰り返し押下して、「ステップ 5: 確認」まで移動し、「サービスの更新」ボタンを押下します。
更新が始まるとAWS CodeDeployでデプロイ処理が始まります。
※ サブネット等のネットワーク情報に誤りがあると下記画面のようにInstallで失敗し、1時間ほど動かないことがあります。(通常なら5分ほどで終了) その際はサービスの再作成を行い、ネットワーク設定をやり直す必要があります。(更新はできない)
デプロイが成功すると、下記画面の下部に表示されているタスクの「前回のステータス」が「RUNNING」となります。
これで作業完了です。