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
120
トレタの大規模バックエンドを移行するまでの道のりと舞台裏
wind-up-bird
February 25, 2021
Tweet
Share
More Decks by wind-up-bird
See All by wind-up-bird
いつもみてるよ、エラーもその先も
w1ndupb1rd
0
99
CDNの自動割当ドメインをすべて独自ドメインに移行したよ
w1ndupb1rd
0
21
Teachme Biz で利用するドメインを統合して安心安全に静的コンテンツを取得する
w1ndupb1rd
0
140
studist tech talk #1
w1ndupb1rd
1
190
トレタを支える技術(インフラ編)
w1ndupb1rd
0
85
Other Decks in Technology
See All in Technology
Create Ruby native extension gem with Go
sue445
0
130
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
240
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
190
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
130
EncryptedSharedPreferences が deprecated になっちゃった!どうしよう! / Oh no! EncryptedSharedPreferences has been deprecated! What should I do?
yanzm
0
490
RSCの時代にReactとフレームワークの境界を探る
uhyo
10
3.5k
これでもう迷わない!Jetpack Composeの書き方実践ガイド
zozotech
PRO
0
1.1k
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
230
AIがコード書きすぎ問題にはAIで立ち向かえ
jyoshise
1
210
エンジニアが主導できる組織づくり ー 製品と事業を進化させる体制へのシフト
ueokande
1
110
Platform開発が先行する Platform Engineeringの違和感
kintotechdev
4
590
「全員プロダクトマネージャー」を実現する、Cursorによる仕様検討の自動運転
applism118
22
12k
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Making Projects Easy
brettharned
117
6.4k
Scaling GitHub
holman
463
140k
Faster Mobile Websites
deanohume
309
31k
RailsConf 2023
tenderlove
30
1.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
850
Designing for Performance
lara
610
69k
Large-scale JavaScript Application Architecture
addyosmani
513
110k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
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/
ありがとうございました