Copyright © 2018 Classi Corp. All Rights Reserved.
システムをEC2から
Fargateへ安全にリプレイス
高田 佳樹
Classi株式会社
Real Tech Night #3
自己紹介
ハンドルネーム: spin13
Twitter: @spinning13
・基本的には(Web)アプリケーションエンジニア
・インフラも開発もどっちも好き
概要
現在動いている既存システムの機能の一部を新しい環境に
安全にリプレイス
EC2上で動いている既存システムをECSのFargateに移行
安全に移行する方法を紹介
Fargateって?
ECSの起動タイプの2つのうちの1つ
起動タイプ
EC2 Fargate
こっち
ECSって何?
Elastic Container Service
すごく簡単な概要は...
AWSがDockerコンテナをサポート
AWSがDockerコンテナの実行環境を用意
2つの起動タイプ
EC2 Fargate
用意したEC2インスタンスに
ECSでコンテナをデプロイ
えっ?
・EC2インスタンスへのコンテナ配置の設定
・EC2インスタンスのプロビジョニング等の管理
は必要
・スケーリングする時はEC2インスタンスも増え
る
コンテナの実行環境はAWSが用意
・コンテナを動かすマシンの管理が不要
・使用したいCPUとメモリの要件を指定
・スケーリングにインスタンスを気にする必要なし
期待していたコンテナ実行環境に近い
※SubnetのIPは消費するので注意
なぜFargateを選ぶか
マイクロサービスアーキテクチャで
アプリケーションの種類が多いケース
例えば9種類 起動モードEC2
アプリケーションD
アプリケーションE
アプリケーションF
アプリケーションG
アプリケーションH
アプリケーションI
アプリケーションA
アプリケーションB
アプリケーションC
これだけのコンテナを動かす
インスタンスを用意
または
インスタンス毎のコンテナの配
置を考える
管理コストが高い
起動モードFargate
アプリケーションA
アプリケーションA
アプリケーションA
アプリケーションB
アプリケーションC
アプリケーションC
アプリケーションD
アプリケーションE
アプリケーションF
アプリケーションG
アプリケーションH
アプリケーションI
アプリケーションAが3台
アプリケーションCが2台
他は1台ずつ
Fargateであればインスタンスの管
理をする必要がない!
こういう構成はEC2だと面倒
リプレイス戦略
いくつかの条件...
・既存の環境のシステムと相互に切り替えが可能なこと
・切り替えが容易であること
リプレイス戦略
既存環境
リクエスト
ロードバランサー
LBで受けてEC2インスタンスに振り分ける
DB
リプレイス中
リクエスト
新環境の
ロードバランサー
Fargate
nginx
Fargate
アプリケーション
サーバ
アプリケーション
サーバ
新環境の
internal ALB
既存環境の
ロードバランサー
赤色が新環境で追加した経路
青色が既存環境の経路
DB
バックエンドのDBは
同じ
リクエスト
新環境の
ロードバランサー
Fargate
nginx
Fargate
アプリケーション
サーバ
アプリケーション
サーバ
新環境の
internal ALB
完全にリプレイスすると既存環境の青い経路の部分がなくなる
リプレイス完了後
既存環境のみに戻したい場合
最初にリクエストを受けるロードバランサーの設
定DNS名を変えるだけで戻せる
新環境と既存環境の振り分け方法
新環境のNginxにmrubyを組み込む または OpenRestyを使って
proxy_pass先を新・既存環境で振り分けるロジックを入れる
Classiの場合...
Openrestyを採用
ngx_mrubyと比べてビルトインされている機能が豊富
Redisに学校IDと新環境に振り分けるかのフラグのペアを格納
OpenRestyでCookieから学校IDを取得してRedisを参照
返ってきた値がTrueだったら新環境 そうでなければ既存環境
リクエスト
新環境の
ロードバランサー
openresty
学校ID: 99999
の値を見に行く
学校ID: 99999
のフラグを返す
Cookieから
学校IDを取得
Fargateの罠
ECSはコンテナイメージをECR等のコンテナイメージのリポ
ジトリからPullする
ECRへのアクセスにはインスタンスからVPC内だけでなく
インターネット へもアクセスできる必要がある
起動タイプが...
EC2 Fargate
EC2モードでは
EC2インスタンスがインターネットにつながってればイメージをPullできる
Fargateでは
VPCでNat Gateway等を使ってインターネットアクセスをできる状態でない
とPullできない
VPCのネットワーク構成によってはハマるので注意!
余談
ECSは2017年11月くらいまでは
EC2 Container Service
と呼ばれていた
EOF

Real Tech Night #3 システムをEC2からFargateへ安全にリプレイス