ECS + ALB でダウンタイムなしでデプロイ

ECS + ALB でダウンタイムなしでデプロイ

Docker

ローカル環境(Mac)には、Docker for Macをインストールして起動しておく。

$ vim Dockerfile
FROM ruby:2.3.1

ENV APP_ROOT /usr/src/testapp

WORKDIR $APP_ROOT

RUN apt-get update && \
    apt-get install -y nodejs \
                       --no-install-recommends && \
    rm -rf /var/lib/apt/lists/*

COPY Gemfile $APP_ROOT
COPY Gemfile.lock $APP_ROOT

RUN \
  echo 'gem: --no-document' >> ~/.gemrc && \
  cp ~/.gemrc /etc/gemrc && \
  chmod uog+r /etc/gemrc && \
  bundle config --global jobs 4 && \
  bundle install && \
  rm -rf ~/.gem

COPY . $APP_ROOT

EXPOSE  3000
CMD ["rails", "server", "-b", "0.0.0.0"]

http://localhost へアクセス

ECR

表示される -e none は除いて入力。

ECS

  • ダウンタイム0のデプロイのために、動的ポートマッピングを設定する。

  • 動的ポートマッピングのために、ホストポートを0にする。コンテナポートはアプリケーションのポートに合わせる(Railsでは3000)

  • 最小ヘルス率を50へ変更。

  • awslogs-groupで指定したCW Groupの値のものを作成してからでないと、ログドライバー: awslogs を設定すると、起動時に以下のエラー。

http://ecs-first-run-alb-1371717613.us-west-2.elb.amazonaws.com/ ALBのエンドポイントでアクセスできるようになる。

Rails

以下はコメントアウト

具体的な編集内容は以下の通り。

Rails.application.routes.draw do ~ end 内に以下を追加。

RSpec

group :development, :test do ~ end内に以下を追加。

以下を末尾に追記

以下を末尾に追加

$ vim spec/controllers/sample_controller_spec.rb

Docker Compose

Docker Composeを利用することで、Railsのコードを編集してもビルドし直さないと変更が反映されない事象は解消。

Last updated