hayashier Tech Blogs
  • hayashier Tech Blogs
  • Author's Books
    • 実践Redis入門 (日本語版)
    • 実践Redis入門 (한국어판)
  • Top Contents
    • Dive Deep Redis
    • Dive Deep Memcached
    • Kubernetes 入門
    • TCP 入門
    • TLS 入門
    • GPG 入門
    • サービス障害が発生した場合の対応方法
    • よく使うトラブルシューティング コマンド実行例 まとめ
    • コピペで使えるELBのアクセスログ解析による事象分析 (ShellScript, Athena)
  • Containers
    • Docker 入門
    • Nomad 導入
    • Dockerを利用してさっと検証環境構築
  • Kubernetes
    • Kubernetes 入門
    • Kubernetes 導入 with Amazon Linux 2
    • EKSを利用してKubernetesでSpring MVCをデプロイ (NLB + Auto Scaling)
  • Load Balancer
    • ALB 認証 導入
    • TLS extensions support with ALB
    • ELB(CLB,ALB,NLB)の種類ごとのHTTPレスポンスの違い
    • ELB(CLB) で WebSocket 通信
  • RDBMS
    • PostgreSQL DBA 入門
    • RDBMS Benchmark Get Started
    • RDBMS サンプルデータ生成 Get Started
    • RDS PostgreSQL Extensions Get Started
    • RDBMS Engine Inspection for Troubleshooting
  • Redis
    • Dive Deep Redis ~ 入門から実装の確認まで
    • Dive Deep Redis Internals ~ GETコマンド実行時の動作 ~
    • RedisのString型は今でも本当に512MBが上限か?
    • Redis 公式ドキュメント まとめ
    • Redis / Memcached Source Code Reading - Overview -
  • Memcached
    • Dive Deep Memcached ~ 入門から実装の確認まで ~
    • Dive Deep Memcached ~ SETコマンド実行時の動作 ~
    • Memcached 公式ドキュメント まとめ
    • memtier_benchmark + memcached-tool の導入
    • Redis / Memcached Source Code Reading - Overview -
  • Hadoop
    • Hadoop Get Started
  • Networking
    • TCP 入門
    • TLS 入門
    • ksnctf: HTTPS is secure, Writeup (TLS 通信解読)
    • オンプレ側ルーター(Cisco 1812J, Juniper SRX210, YAMAHA RTX 1210)から Direct Connect へ BGP 設定
  • Software
    • アルゴリズムとデータ構造 入門
    • デザインパターン 入門
    • ソフトウェアテスト 入門
  • System Admin
    • Shell Script 入門
    • サービス障害が発生した場合の対応方法
    • よく使うトラブルシューティング コマンド実行例 まとめ
    • コピペで使えるELBのアクセスログ解析による事象分析 (ShellScript, Athena)
    • GPG 入門
    • Operation Misc
  • Development
    • ローカル環境のプログラミング言語のバージョンを切り替え macOS
    • /usr/local/Cellar/pyenv/1.2.21/libexec/pyenv: No such file or directoryのエラーの対処方法
  • AWS
    • AWS Misc
    • AWS CLI, AWS SDKのリトライ処理の実装について
    • AWS CLI バージョンアップでエラー発生を解消
    • Elastic Beanstalkで稼働しているアプリケーション(Ruby, Sinatra)をAmazon Linux AMIからAmazon Linux2へ移行
    • Elastic Beanstalkでインスタンス入れ替え後にnginxのデフォルトの画面が表示されてしまう問題の対応
    • Amazon Lightsail に SSL 証明書設置 with Let's Encrypt (自動更新)
    • Amazon Lightsailで10分で作るお手軽Markdownで書く独自ドメインのブログサイト構築
    • Lambdaをローカルでテスト(with Docker)
    • ECS + ALB でダウンタイムなしでデプロイ
    • `Repository packages-microsoft-com-prod is listed more than once in the configuration`のメッセージの解消方法
  • Others
    • Pandoc 導入
    • textlint + prh による文章校正
    • 紙書籍をPDFに変換
    • Sphinx 導入
    • さくっとPocketのブックマークをはてなブックマークに移行
    • Macが突然起動しなくなった話
    • Macでターミナルが開かない (zsh編)
    • ホスト型 IDS Tripwire とネットワーク型 IDS Snort の導入 with CentOS 6
    • JMeter 導入
    • Squid 導入 with Amazon Linux AMI
    • Spring MVCを導入 (+ MySQL, Redis)
    • 外資系企業で働いている場合の確定申告方法 (RSU考慮)
Powered by GitBook
On this page
  • ECS + ALB でダウンタイムなしでデプロイ
  • Docker
  • ECR
  • ECS
  • Rails
  • RSpec
  • Docker Compose
  1. AWS

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"]
$ docker build -t ecs-sample/sample .
$ docker run -p 80:3000 ecs-sample/sample

http://localhost へアクセス

ECR

$ aws ecr get-login --region us-west-2 --profile test
11370* docker login -u AWS -p <発行されるパスワード> -e none https://745403317212.dkr.ecr.us-west-2.amazonaws.com

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

$ docker login -u AWS -p <発行されるパスワード> https://745403317212.dkr.ecr.us-west-2.amazonaws.com
$ docker tag ecs-sample/sample:latest 745403317212.dkr.ecr.us-west-2.amazonaws.com/ecs-test:latest
$ docker push 745403317212.dkr.ecr.us-west-2.amazonaws.com/ecs-test:latest

ECS

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

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

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

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

CannotStartContainerError: API error (500): failed to initialize logging driver: ResourceNotFoundException: The specified log group does not exist. status code: 400, request id: 2115d231-14be-11e8-883b-63cc061f87a4 

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

Rails

$ vim Gemfile

以下はコメントアウト

# gem 'coffee-rails', '~> 4.2'
$ rbenv exec bundle exec rails generate controller sample
$ vim app/controllers/sample_controller.rb
$ vim app/views/sample/index.html.erb
$ vim config/routes.rb

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

require 'socket'

class SampleController < ApplicationController
  def index
    @host = Socket.gethostname
  end
end
<h1>Host : <%= @host %></h1>

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

root 'sample#index'

RSpec

$ vim Gemfile

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

gem 'rspec-rails', '~> 3.7.2'
$ rbenv exec bundle install
$ rbenv exec bundle exec rails generate rspec:install
$ vim .rspec

以下を末尾に追記

--format documentation
$ rbenv exec bundle exec rspec
$ vim config/application.rb

以下を末尾に追加

Rails.application.config.generators do |g|
  g.test_framework :rspec,
    fixtures: true,
    view_specs: false,
    helper_specs: false,
    routing_specs: false,
    controller_specs: true,
    request_specs: false
  g.fixture_replacement :factory_girl, dir: "spec/factories"
end

$ vim spec/controllers/sample_controller_spec.rb

RSpec.describe SampleController, type: :controller do
  describe SampleController do
    context "rspec test" do
      it "test top page 200" do
        get :index
        expect(response).to have_http_status 200
      end$
    end$
  end$
end

Docker Compose

$ vim docker-compose.yaml
version: '3'
services:
  web:
    build: .
    ports:
      - "80:3000"
    command: bundle exec rails server
    volumes:
      - .:/usr/src/testapp
$ docker-compose build
$ docker-compose up

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

PreviousLambdaをローカルでテスト(with Docker)Next`Repository packages-microsoft-com-prod is listed more than once in the configuration`のメッセージの解消方法

Last updated 1 month ago