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
100
トレタの大規模バックエンドを移行するまでの道のりと舞台裏
wind-up-bird
February 25, 2021
Tweet
Share
More Decks by wind-up-bird
See All by wind-up-bird
studist tech talk #1
w1ndupb1rd
1
150
トレタを支える技術(インフラ編)
w1ndupb1rd
0
58
Other Decks in Technology
See All in Technology
QA経験のないエンジニアリング マネージャーがQAのカジュアル面談に出て 苦労していること・気づいたこと / scrum fest niigata 2024
yoshikiiida
1
260
【基本】データベース設計
oracle4engineer
PRO
2
300
能動学習のいろは:書籍「Human-in-the-Loop機械学習」3〜5章
hiroyoshiito
0
240
自らを知り外と繋がる、日経のエンジニア採用とDevRel活動/devreljp92
nishiuma
2
210
コードファーストの考え方。 Amplify Gen2から学ぶAWS次世代のWeb開発体験
yoshiitaka
2
570
Gradle Build Scanを使ってビルドのことを知ろう potatotips #87
tomorrowkey
2
170
Amplify 🩷 Bedrock 〜生成AI入門〜
minorun365
PRO
10
1.2k
パフォーマンス最適化のベストプラクティス
databricksjapan
0
130
Autonomous Database Cloud 技術詳細 / adb-s_technical_detail_jp
oracle4engineer
PRO
15
35k
MixIT 2024 - Pulumi : Gérer son infra avec son langage de programmation préféré
ju_hnny5
1
130
Kaggleで学ぶ系列データのための深層学習モデリング
yu4u
7
1.5k
高専で制御を、大学でセンシングを学び、次は脳みそ
satoshirobatofujimoto
0
120
Featured
See All Featured
Faster Mobile Websites
deanohume
300
30k
Building an army of robots
kneath
300
41k
What's in a price? How to price your products and services
michaelherold
238
11k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
245
20k
How STYLIGHT went responsive
nonsquared
92
4.8k
Ruby is Unlike a Banana
tanoku
96
10k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
242
1.2M
For a Future-Friendly Web
brad_frost
172
9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
660
120k
Embracing the Ebb and Flow
colly
80
4.2k
Web development in the modern age
philhawksworth
203
10k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
358
22k
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/
ありがとうございました