#otemachirb
EKSʹRailsをのせたOtemachi.rb #13
View Slide
⾃⼰紹介• Yusaku Hatanaka (@hatappi)• Mercari, Inc• ϓϥΠϕʔτͰͷRubyΛͬͨ׆ಈ• roppongi.rbͷΦʔΨφΠβʔ• Red Data ToolsͰRed Chainerͭͬͯ͘·͢• RailsΛͬͨαʔϏεͷ։ൃ <= ࠓ͜ͷ• 煎り⼤⾖が好き
Anketとは?• Slack上でアンケートをとるためのサービス• アンケートの作成や投票はSlack上から⾏う• 集計結果はSlack上やWEB上から確認する• 今後は回答結果を取得するようなAPIを追加予定https://slack.com/apps/ADJRPSY1Y-anket-
なぜ作ったのか?• Slack Appを作ってみたかった• 会社でSlackは使っているけど、もっと使い倒したい• 技術を試せる場所がほしかった• 僕はドキュメントや記事を読んでわかった気になってしまうので実際にそれを試すような場がほしかった• サービス作るのおもしろい
構成
Rails• Ruby 2.5.3 (2.6.1が出たら2.6にしたいなぁ)• Rails 5.2.2• JSはTypeScriptで書いていて⼀部でReactを使⽤
Kubernetsとは?• コンテナ化されたアプリのデプロイなどを⾃動化してくれるコンテナオーケストレーションエンジン• k8sと略して使う• kubernetes => k8s
EKSとは?• AWSの提供するマネージドなKubernetsのサービス• AWSならではの特徴• VPC サポート• IAM 認証• EKS APIのAPIコールはCloudTailで記録• etc
例えばRailsに機能追加をしてデプロイする
サービスを⽌めたくない!
RollingUpdateoldnewoldnewoldnewoldnewoldnew• maxUnavailableでRolling Update時に使えなくなるpod数を指定• maxSurgeで超過を許可するpod数を指定します。
_⼈⼈⼈⼈⼈⼈_> 当然の死 < ̄Y^Y^Y^Y^Y^Y^ ̄
しょ障害が
セルフヒーリング_⼈⼈⼈⼈⼈⼈_> 当然の死 < ̄Y^Y^Y^Y^Y^Y^ ̄起動数を設定することでk8sがその数を維持するようにしてくれる
他にも• 複数のNodeの管理• オートスケーリング• サービスディスカバリ• ロードバランシング• etc
悩んだところ
秘匿値はどうわたす?• Databaseへの接続情報やSECRET_KEY_BASEとか• Docker Image をbuildする時にわたす? => • セキュリティ的にもだし秘匿値の変更があるたびにビルドするの?• k8sのSecret リソースを使⽤する => • マニフェストファイルはどう管理するのか?
秘匿値はどうわたす?CBTFͰFODPEF͞Ε͍ͯΔ͚ͩͳͷͰ(JUͰཧ͢Δͷɾɾɾ"84,.4Λͬͯ4FDSFUͷEBUBͷ͚ͩΛ҉߸Խʂ(JUͰཧͰ͖Δ͠LFZ͕ΔͷͰϨϏϡʔͰ͖ΔTIZJLPLVCFTFD
まとめ• RailsをEKSにのせました• Railsのコンテナ化よりもEKSにのせることよりもk8sと仲良くなるのが1番時間かかった• Anketをぜひ使っていただいてフィードバックください!!
余談
プライベートで継続して開発する• ⼟⽇にまとめて書こうだと出来ない時に萎えてしまう• ⼟⽇はなんだかんだでイベントが⼊る• 毎⽇ちょっとずつ開発する• 30分とか1commitとか• いつか完成する• https://johnresig.com/blog/write-code-every-day/