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

rails_rdm_revieee

morioka shuhei
July 20, 2017
1.1k

 rails_rdm_revieee

morioka shuhei

July 20, 2017
Tweet

Transcript

  1. Rails Developers Meetup #03
    2017/07/20 (Thu)
    Heroku Review Apps Like

    Rails
    確認環境の自動構築ツー

    Revieee
    について
    株式会社Speee
    ヌリカエ兼開発基盤部エンジニア
    森岡周平

    View full-size slide

  2. 今日の発表の目的
    Revieee
    というOSS
    について興味を持ってもらう!
    そのために、
    下記のことについて把握できる
    Revieee
    とは何か
    Revieee
    は何をしたいのか
    Revieee
    の仕組みの全体感
    Revieee
    の現状の進捗
    今後の開発の方向性

    View full-size slide

  3. 自己紹介
    名前:
    森岡周平
    GitHub Account: Selmertsx
    会社: Speee
    所属部署:
    開発基盤部 /
    ヌリカエ
    最近やっていること: FF12

    View full-size slide

  4. Agenda
    Revieee
    って何?
    Revieee
    でやりたいこと
    Revieee
    の構成
    Revieee
    の使い方 (
    理想)
    Revieee
    の使い方 (
    現実)
    現在の状態
    これからの予定

    View full-size slide

  5. Agenda
    Revieee
    って何?
    Revieee
    でやりたいこと
    Revieee
    の構成
    Revieee
    の使い方 (
    理想)
    Revieee
    の使い方 (
    現実)
    現在の状態
    これからの予定

    View full-size slide

  6. Revieee
    って何?
    GitHub
    リポジトリにbot
    を招待/webhook
    登録だけで
    使える(
    予定)
    社内版の Heroku Review Apps

    View full-size slide

  7. 作った背景

    View full-size slide

  8. 問題整理
    僕がいるプロダクトはアジャイルで開発している
    成果物の確認は機能が出来たら都度行っている
    確認して問題無ければ即リリー

    エンジニアの人数 >
    確認環境の数
    成果物が溜まって確認環境が渋滞
    声掛け運用が発生!!
    この問題を解決するために
    確認環境の数 =
    成果物の数にしたい
    PR
    毎に確認環境が作られるシステムが必要になる

    View full-size slide

  9. 既存ツー
    ル調査

    View full-size slide

  10. Heroku Review Apps
    Heroku
    の提供する開発支援ツー
    ル. GitHub
    にpull request
    を作
    ると、PR
    単位で確認環境が出来上がる
    Pros
    メンテナンスフリー
    設定が圧倒的に楽
    Cons
    無料だとアクセスするIP
    の制限を入れられない
    Enterprise
    だと年間 $20,800 (
    契約金のみ)
    利用するミドルウェアのバー
    ジョンが指定不可

    View full-size slide

  11. Paus
    dtan4
    さん製のdocker swarm
    をベー
    スとしたツー

    Pros
    local machine
    で動いているものを、
    そのままcloud
    に持っていける
    Cons
    docker swarm
    クラスタの管理が手間
    container
    のlog
    確認がつらい

    View full-size slide

  12. Migrate to ECS (issue in Paus)
    docker swarm
    ベー
    スのシステムをECS
    ベー
    スで作り
    直す予定とのこと!
    僕たちも、ECS
    ベー
    スで作ることに!

    View full-size slide

  13. ツー
    ル開発の目的
    環境構築、
    声掛け運用をやめて開発効率向上
    (option) Speee
    社員が参加しやすいOSS
    を作る
    そのためにやること
    PR
    作ったら簡単にできて
    メンテナンスがいらない
    そんな確認環境作ってくれるツー
    ルを
    GitHub
    でOSS
    として開発する

    View full-size slide

  14. Agenda
    Revieee
    って何?
    Revieee
    でやりたいこと
    Revieee
    の構成
    Revieee
    の使い方 (
    理想)
    Revieee
    の使い方 (
    現実)
    現在の状態
    これからの予定

    View full-size slide

  15. Revieee
    の構成要素
    Application Server(Rails)
    nginx
    ECS
    MySQL
    上記構成要素の役割を、
    下記2点の処理から説明する
    コンテナのデプロイ
    確認環境へのアクセス

    View full-size slide

  16. その前にECS
    のおさらい

    View full-size slide

  17. ECS(EC2 Container Service)
    AWS
    上でDocker
    コンテナを
    いい感じに扱うためのサー
    ビス

    View full-size slide

  18. ECS
    の構成要素

    この後図を使って説明するので、
    ざっと聞いてもらえると!
    Task:
    Docker
    コンテナを意味ある粒度で動かしてるもの
    docker-compose
    で扱うコンテナ群のイメー

    TaskDe nition:
    Task
    の設計書。
    使うDocker Image
    のPath、
    コンテナに使う
    CPU/
    メモリリソー
    スや環境変数などを保持.
    Service:
    Task
    の配置設定(
    起動数・
    配置場所・autoscaling)
    デプロイ、ELB
    との紐付けなどを行う
    ECR(EC2 Container Registry): Docker Image
    置き場.

    View full-size slide

  19. ECS
    のイメー
    ジ(Task/TaskDe nition/ECR)
    task
    はアプリケー
    ションを構成するコンテナ群(
    例)

    View full-size slide

  20. 単一Rails
    アプリ in ECS
    service
    は ELB
    とTask
    を繋いで、
    アクセスをいい感じ
    にTask
    に割り振れるようにする

    View full-size slide

  21. 複数サー
    ビス in ECS (
    例:
    ヌリカエ)
    LP
    と通常のApplication
    を別のservice
    とした例
    同一クラスター
    に複数サー
    ビスを立ち上げたりできる

    View full-size slide

  22. ECS
    の話は以上!
    疑問ある人はあとで質問
    してください

    View full-size slide

  23. Revieee
    の設計に戻ります

    View full-size slide

  24. Revieee
    でやりたいこと
    PR
    単位で確認環境が構築される
    コンテナをBRANCH
    指定で動かしたい
    PR
    単位でユニー
    クな接続用URL
    を用意したい
    ECS
    で実現するための方法
    任意のTask
    をBranch
    指定して起動させる
    任意のTask
    に接続できるようにする
    Task
    のPort
    と、deploy
    先のEC2 IP

    View full-size slide

  25. 任意のTask
    をBranch
    指定して起動させる
    Task De nition
    にAPI
    でBranch
    の環境変数を渡して、
    直接Task
    を起動させる

    View full-size slide

  26. Branch
    を指定したコンテナ起動フロー

    View full-size slide

  27. こんな感じでコメントされる

    View full-size slide

  28. 確認環境へのアクセス

    View full-size slide

  29. Agenda
    Revieee
    って何?
    Revieee
    でやりたいこと
    Revieee
    の構成
    Revieee
    の使い方 (
    理想)
    Revieee
    の使い方 (
    現実)
    Revieee
    の現状とこれから

    View full-size slide

  30. Revieee
    の使い方 (
    理想)
    webhook
    を登録して
    GitHub
    リポジトリにbot
    を招待するだけで
    任意のPR
    に対して確認環境が作られる (
    カンタン!!)

    View full-size slide

  31. Revieee
    の使い方 (
    現実)
    Docker Image
    を作成しECR
    に登録
    Task De nition
    の設定ファイルを作成
    Webhook
    の登録
    GitHub
    リポジトリにbot
    を招待
    PR
    毎に確認環境が構築される

    View full-size slide

  32. 現在の設定の理由
    Docker Image
    はユー
    ザー
    がハンドリングしたい
    MySQL
    のテストデー
    タの更新など
    どう自動化するのが適切か見えてないものもある
    コンテナ毎の各種設定な
    一旦は、
    自動化せずに素朴な仕組みで運用してみて
    知見を集めた後に自動化の方向性を探りたい

    View full-size slide

  33. Agenda
    Revieee
    って何?
    Revieee
    でやりたいこと
    Revieee
    の構成
    Revieee
    の使い方 (
    理想)
    Revieee
    の使い方 (
    現実)
    Revieee
    の現状とこれから

    View full-size slide

  34. Revieee
    の現状
    Speee
    内でいくつかのプロダクトに導入済み
    BitJourney
    さんにも導入準備中
    今開発しているもの
    nginx
    周りのdocker
    対応
    コンテナデプロイ機能の改修
    Rails => AWS Lamba
    リプレイス

    View full-size slide

  35. これからの開発方針
    簡単に構築できるようにする
    cloudformation
    とDocker
    だけで完結させたい
    簡単安全に運用できるようにする
    ECR
    の権限管理を容易にする
    適切なspot instance
    を選べるようにする
    管理画面....
    作るかなぁ...

    View full-size slide

  36. その他見えている課題
    複数リポジトリにまたがるものアプリの対応
    フロント/web
    でリポジトリが分かれてるやつ
    Docker Image
    の初期DL
    が遅い
    Docker Image
    の置き場をEFS
    にしてみる?
    放置されるPR
    の対応どうしよう
    Container
    リソー
    スの無駄遣いに
    Task
    を更新する際 connection drawing
    できない
    PR
    更新したら、
    接続がブチッと切れる

    View full-size slide

  37. 確実に負債になるもの
    rails
    のDocker Image
    を自動更新しないので
    定期的に作り直さないと bundle install
    系がどんどん
    重くなってく予定

    View full-size slide

  38. まとめ
    Revieee
    は AWS ECS
    をベー
    スに動いてます
    Speee
    でいくつかのチー
    ムに使って貰ってます
    現在、
    簡単に構築できるように開発中です!!
    そしたら、
    みなさん使って頂いて
    Issue & PR
    くれたらうれしいっす!
    やることはいっぱい
    ご意見、
    ご要望お待ちしております

    View full-size slide

  39. 発表は以上になります!
    もし興味を持って頂けたら
    https://github.com/speee/we
    bapp-revieee

    View full-size slide

  40. 宣伝
    OSS Gate
    東京ミー
    トアップ for Red
    Data Tools in Speee 7/25
    https://speee.connpass.com/event/62324/

    View full-size slide