Upgrade to Pro — share decks privately, control downloads, hide ads and more …

本番環境のECS/Fargate採用

Kanazawa Yuki
September 18, 2020

 本番環境のECS/Fargate採用

2020/9/18に行われたオンライン勉強会
https://lancersrecruit.connpass.com/event/187989/
で発表した資料です。

開発環境へのDocker採用から本番環境への適用の歴史と、ECSを選択した理由について冒頭で話しました。

※具体的な本番環境の事例はこちら
https://speakerdeck.com/rvirus0817/fargatefalsehuo-yong-shi-li-ruby-on-railsbian

Kanazawa Yuki

September 18, 2020
Tweet

More Decks by Kanazawa Yuki

Other Decks in Technology

Transcript

  1. 2020/9/18 オンライン勉強会 自己紹介 2 氏名:金澤 裕毅 出身:宮城県仙台市 Lancers, Inc. /

    Site Reliability Engineer (2013/11 -) 趣味: 将棋(ウォーズ初段、将棋倶楽部24で1000点くらい) Github:yKanazawa Twitter: @yakitori009 Language: C++, Java, PHP, Go
  2. 2020/9/18 オンライン勉強会 About Lancers https://www.lancers.jp/ Genre: Crowdsourcing Start: 2008/4 PHP

    5.2 → 5.3 → 5.6 → 7.3 CakePHP 1.2 → 1.3 → 2.8 → 2.10 2017年時点 現在
  3. 2020/9/18 オンライン勉強会 4 ランサーズのサーバー構成 EC2 instance CloudSearch CloudFront Route 53

    CloudFront ALB ALB API Gateway Lambda Auto Scaling App S3 Aurora Reader Aurora Reader Aurora Writer Api ElastiCache Redis AI系API サムネイル表示 仕事検索 ランサー検索 ランサーズ Batch PHP7 CakePHP2.10 Python3 MySQL5.7
  4. 2020/9/18 オンライン勉強会 6 VMをDockerに置き換え 192.168.33.15 HDD 50GB メモリ 1GB 認証システム

    192.168.33.11 HDD 50GB メモリ 2GB App(ランサーズ本体) Apache 2.2 (80) PHP 5.3 MySQL 5.6 (3306) Memcached(11211) 192.168.33.13 HDD 50GB メモリ 1GB WordPress (コーポレート、ブログ等) Apache 2.4(80) PHP 5.5 MySQL 5.6(3306) 192.168.33.12 HDD 50GB メモリ 1GB メッセージ(チャット) Nginx(3443) node.js(3001) Redis(6379) HDD 20GB メモリ 2GB 172.17.6.11 App(ランサーズ本体) Apache 2.2 (80) PHP 5.3 172.17.4.51 コーポレート、ブログ等) Apache 2.4(80) PHP 5.5 172.17.4.152 メッセージ(チャット) Nginx(3443) node.js (3001) 172.17.106.55 認証システム 新サービス開発の度に VMを作成 1つのVMに 各種コンテナを配置
  5. 2020/9/18 オンライン勉強会 7 Docker移行の方針 •本番環境と極力同じ構成を再現 ◦AWSのマネージド系のサービス ▪Dockerfileで作成 ◦AWSのEC2で構築しているサーバー ▪Dockerfile +

    Ansibleで作成 ▪Ansibleを実行するコンテナを用意 •本番と同じPlaybookで構築 App ELB ErastiCache Memcached ErastiCache Redis Aurora EC2 instance Wordpress EC2 instance WebSocket App Redis MySQL ELB WordPress Memcached WebSocket EC2 instance ELB RDS ELB SSL Terminate リバースプロキシ データ入り
  6. 2020/9/18 オンライン勉強会 8 Docker移行の方針 EC2 MySQLデータ 開発用データ App Ansible WordPress

    MySQL WebSocket WordPress App WebSocket MySQL Playbook docker push docker pull docker build Amazon ECR •構築に時間をかけない ◦コンテナをpullするだけで完了 コンテナは インフラチームが構築 アプリチームは コンテナをpullするだけ
  7. 2020/9/18 オンライン勉強会 12 リリースフロー EC2 App Deploy EC2 instance EC2

    Canaria App EC2 instance Developer •Webデプロイシステムからリリース
  8. 2020/9/18 オンライン勉強会 13 リリースフロー EC2 App Deploy EC2 instance EC2

    Canaria App EC2 instance Developer •DeployサーバーがGithubからpull
  9. 2020/9/18 オンライン勉強会 14 リリースフロー EC2 App Deploy EC2 instance EC2

    Canaria App EC2 instance composer install Developer •composer installの実行 ◦開発用Appコンテナを起動
  10. 2020/9/18 オンライン勉強会 15 リリースフロー EC2 App Deploy EC2 instance EC2

    Canaria App EC2 instance rsync Developer •カナリア環境にrsync ◦最終確認
  11. 2020/9/18 オンライン勉強会 16 リリースフロー EC2 App Deploy EC2 instance EC2

    Canaria App EC2 instance rsync Developer •本番環境にrsync
  12. 2020/9/18 オンライン勉強会 17 リリースシステム EC2 App Deploy EC2 instance EC2

    Canaria App EC2 instance S3 Cloud Front rsync 静的 ファイル キャッシュ クリア composer install node install go build Wordpress EC2 instance EC2 Api Developer •ランサーズ以外のサービスにも拡張 ◦unicornの再起動 ◦S3への配置 ◦CloudFrontのキャッシュクリア
  13. 2020/9/18 オンライン勉強会 新サービスにDockerを採用した理由 •リリースの仕組みを作らなくて良いこと ◦CircleCIでリリース ◦検証環境にコマンドでリリース ▪CircleCIのAPIを叩く •オートスケーリングの仕組みを作らなくて良いこと ◦EC2の場合 ▪AMIから起動時に最新ソースを取得

    ▪ミドルウェアの更新時にAMIの更新が必要 ◦Dockerの場合 ▪リリースの都度コンテナを作成 ▪リリースしたコンテナはImmutable •ミドルウェアの更新を開発者に任せられること ◦EC2の場合 ▪手動で適用してAMIの更新が必要 ◦Dockerの場合 ▪Dockerfileを修正してもらえばOK