【AWS】ローカルのDocker修正をECSに反映させるための手動リリース手順

インフラ

こんにちは。Enjoy IT Life管理人の仁科(@nishina555)です。

先日【AWS】ECR + ECS + RDSを利用したDocker環境構築手順でECS環境の構築およびDockerイメージのデプロイ手順について紹介しました。

【AWS】ECR + ECS + RDSを利用したDocker環境構築手順

2020年6月24日

今回は、すでにECS環境で起動されているDockerコンテナに対して新たな修正を反映させる場合のデプロイ手順について紹介します。

なお、ECSの実行環境はEC2、ロードバランサーの配置は行っていないものとします。

今回の検証環境について

すでにECS環境にDockerコンテナが配置されており、http://[パブリックIP]にアクセスすると、以下のような『V1 Sample』という画面が表示されているものとします。

今回は、現在表示されている『V1 Sample』を、Dockerイメージを更新することで『V2 Sample』に変更します。

ECRやECSの環境構築手順については【AWS】ECR + ECS + RDSを利用したDocker環境構築手順を参照してください。

【AWS】ECR + ECS + RDSを利用したDocker環境構築手順

2020年6月24日

Dockerイメージをタグつきでビルドし、ECRへpushする

ローカル環境でソースコードの修正および修正後確認が完了したとします。

修正が完了したらタグを明記してDockerイメージをビルドします。ECRへも同様にタグ付きでDockerイメージをpushします。
修正後のタグをv2とする場合、ローカルでDockerイメージをビルドしてECRへpushする手順は以下のようになります。Dockerイメージ名はsample-webとします。

$ cd /path/to/Dockerfile
$ docker build -t sample-web:v2 .
$ docker tag sample-web:v2 xxx.amazonaws.com/sample-web:v2
$ docker push xxx.amazonaws.com/sample-web:v2

新しいタグでpushをすると以下のようにECRに新しいバージョンのDockerイメージが作成されます。

タスク定義に記載されているDockerイメージ情報を変更する

修正を反映する対象のDockerコンテナの情報が記載されたタスク定義にチェックをし、『新しいリビジョンの作成』を選択します。

コンテナのイメージURLを修正します。
今回はv2というタグのついたDockerイメージを利用したいため:v2に変更します。

新しいリビジョンのタスク定義が作成されると、タスク定義の一覧に新しい定義が追加されます。

サービスで参照しているタスク定義のリビジョンを最新にする

修正対象のDockerコンテナを起動するサービスにチェックをし、『更新』を選択します。

タスク定義の『リビジョン』を変更します。
新しいリビジョンで新規作成したタスク定義を反映させる場合、リビジョンはlatestになります。
また、『新しいデプロイの強制』にチェックをいれます。

動作確認

サービスを更新したらデプロイメントは自動で実行されるので特に行うことはありません。
しばらくするとデプロイメントが実行され、アプリケーションが更新されていることがわかります。

エラー対応: デプロイメントが実行されない場合

サービスをデフォルトの設定で作成する場合、『タスクの数 1』『最小ヘルス率 100』『最大率 200』となります。

『最小ヘルス率』はクラスターで実行されるべきタスク数のうち、どれくらいのhealty率を担保するかの率です。タスク数2・最小ヘルス率50であればタスクは少なくとも1つ起動していればOKという意味になります。

『最大率』は最小率とは逆です。タスク数2で最大率200であればタスク数4までhealty状態のタスクができることを許容します。

ですので、『タスクの数 1』『最小ヘルス率 100』だとヘルス率の担保ができず、デプロイメントが永遠に実行されません。

ECSインスタンス1台で検証している場合は、『最小ヘルス率 0』『最大率 100』としてください。

まとめ

以上でECSのリリース手順について紹介を終わります。

ECSの手動リリース手順
  1. 新規タグでDockerイメージをビルド
  2. DockerイメージをECRへpush
  3. タスク定義に記載されているDockerイメージURLを修正
  4. サービスで利用するタスク定義のリビジョンの修正

この記事がいいなと思いましたらTwitter(@nishina555)のフォローもよろしくお願いします!

AWSオススメ参考書