Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
トレタの大規模バックエンドを移行するまでの道のりと舞台裏
Search
wind-up-bird
February 25, 2021
Technology
1
110
トレタの大規模バックエンドを移行するまでの道のりと舞台裏
wind-up-bird
February 25, 2021
Tweet
Share
More Decks by wind-up-bird
See All by wind-up-bird
Teachme Biz で利用するドメインを統合して安心安全に静的コンテンツを取得する
w1ndupb1rd
0
91
studist tech talk #1
w1ndupb1rd
1
170
トレタを支える技術(インフラ編)
w1ndupb1rd
0
69
Other Decks in Technology
See All in Technology
OCI 運用監視サービス 概要
oracle4engineer
PRO
0
4.8k
iOSチームとAndroidチームでブランチ運用が違ったので整理してます
sansantech
PRO
0
150
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.6k
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
200
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
3
350
FlutterアプリにおけるSLI/SLOを用いたユーザー体験の可視化と計測基盤構築
ostk0069
0
120
Terraform Stacks入門 #HashiTalks
msato
0
360
インフラとバックエンドとフロントエンドをくまなく調べて遅いアプリを早くした件
tubone24
1
440
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.9k
強いチームと開発生産性
onk
PRO
36
12k
Amazon CloudWatch Network Monitor のススメ
yuki_ink
1
210
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
2
230
Featured
See All Featured
It's Worth the Effort
3n
183
27k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
380
Building Applications with DynamoDB
mza
90
6.1k
Ruby is Unlike a Banana
tanoku
97
11k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Faster Mobile Websites
deanohume
305
30k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
430
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Transcript
トレタの大規模バックエンドを移行するまでの道のり と舞台裏 プロダクト開発におけるAWS活用のいろは 株式会社トレタ
自己紹介 名前:柳楽瑛 入社:2018年11月 部署:プロダクト開発部SREチームに所属 領域:AWS、GCPなどクラウドサービス全般 担当:トレタのほぼ全てのサービス @_windupbird_
目次 - トレタのサービスと移行前の構成 - これまでの課題 - どのように解決したか? - 移行後の構成 -
今後の課題 - まとめ
トレタのサービスと移行前の構成
トレタのサービスと移行対象 サービス群 構成: API + 複数のサービス 特性: APIが止まると他のサービス にも影響が波及する
移行対象: API
トレタのバックエンド API移行前の構成 NW: Public Subnet 構成: ALB + EC2 +
AutoScaling API: Nginx + Unicorn 非同期処理: Sidekiq ログ収集: Fluentd
トレタのバックエンド API移行前のデプロイ アプリケーションのデプロイ CI: CircleCI CD: CircleCI Gem: Capistrano
これまでの課題
これまでの課題 課題: 長期運用 EC2レイヤー 例: メンテナンス(イベント) 例: ステータスチェック OSレイヤー 例: OSのEOL対応 例: プロセスの起動設定
その他 EC2のイメージにすべて同梱されている
これまでの課題 課題:開発スピード(イメージ作成) AMI の作成時間 Packer: 30分以上 修正 小さな修正も都度 待ち時間が発生
これまでの課題 課題:開発スピード(イメージのデプロイ) Terraform 手動実行 AMIの差し替え B/Gデプロイ
これまでの課題 課題:開発スピード(イメージのデプロイ) Terraform 手動実行 AMIの差し替え B/Gデプロイ
これまでの課題 課題:開発スピード(イメージのデプロイ) Terraform 手動実行 AMIの差し替え B/Gデプロイ staging/procuction 計4回の terraform apply
...
これまでの課題 課題:設定ファイル・Secret管理 設定ファイル(Packer管理) テンプレート+変数 例: unicorn.rb Secret(Packer管理) 暗号化してGithubに保存 Packer Build時に複合&埋め込み
例: database.yml チーム間で作業の依存関係 アプリチームからSREチームに依頼 設定待ちの状態が発生 packer build + terraform apply staging + production
これまでの課題 課題:セキュリティ Public Subnet すべて Public Subnet に配置 Session Manager
導入以前は ssh 接続していた ssh 接続 CircleCI経由でデプロイ Security Group 22番ポート開放 ssh 秘密鍵の管理
どのように解決したか?
どのように解決したか? 長期運用 EC2レイヤー コンテナの採用 プラットフォームはECS FargateでEC2の管理から解放 OSレイヤー UbuntuなどホストOSの管理不要 その他 すべてEC2同梱
=> 各コンテナに分離
どのように解決したか? 開発スピード(イメージ作成) イメージの作成時間 CodeBuild docker build: 2分 素早い修正が可能に
どのように解決したか? 開発スピード(イメージのデプロイ) CodePipelineの採用 イメージ作成 タスク定義のイメージIDの差し替え B/Gデプロイ
どのように解決したか? 設定ファイル・Secret管理 設定ファイル アプリケーションのレポジトリ管理に Secret Parameter Store 例: database 接続情報
環境差分(staging/production) コンテナの環境変数で吸収 設定待ち、チーム間の依存関係が解消
どのように解決したか? セキュリティ Private Subnet Private Subnet にコンテナ配置 Session Manager も廃止
ssh 接続が不要 CodePipeline経由でデプロイ AWS内で完結(22番ポート開放が不要) ssh 秘密鍵の管理が不要に
移行後の構成
トレタのバックエンド API移行後の構成 構成: ALB + Container + AutoScaling プラットフォーム: ECS
on Fargate NW: Private Subnet API: Nginx + Unicorn 非同期処理: Sidekiq ログ収集: Fluent Bit
トレタのバックエンド API移行後のデプロイ アプリケーションのデプロイ CI: CircleCI CD: CodePipeline Gem: Capistrano
今後の課題
今後の課題 Log の Aggregator 課題 EC2 の利用とメンテナンス fluentd バージョン古い どうする?
kinesis + lambda とか?
今後の課題 コンテナセキュリティ イメージ脆弱性スキャン ECRイメージスキャン、Trivy etc… Pipeline への組み込み スキャン後のアクションなど運用も課題 信頼できるベースイメージの利用
今後の課題 API以外のサブシステム 一部ECS/EKSでホストしているが、 古いサービスはEC2を利用している (Herokuもいる) 最終的にはECS/EKSに統一したい
まとめ
まとめ ECS on Fargate へ移行できた 開発スピードの向上 技術的負債の返却 将来的なトイルの撲滅 DX(Developper Experience)の向上
まだまだ改善の余地がある 脆弱性対策 サブシステムのコンテナ化 周辺システムの改善 マネージドサービスへの移行
最後に エンジニア採用してます!! SRE フロントエンド サーバーサイド Clojureエンジニア etc... https://corp.toreta.in/recruit/engineer/
ありがとうございました