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
pixiv Cloud Journey #pixivmeetup
Search
sue445
September 29, 2023
Technology
0
1.3k
pixiv Cloud Journey #pixivmeetup
PIXIV MEETUP 2023(
https://conference.pixiv.co.jp/2023/meetup
)の発表資料です。
sue445
September 29, 2023
Tweet
Share
More Decks by sue445
See All by sue445
Road to RubyKaigi Speaker (case sue445) #rubykaigi2023_after
sue445
0
1.8k
Fix SQL N+1 queries with RuboCop #rubykaigi
sue445
2
5.3k
sue445とOSSと社内ツール #subcul_dev
sue445
0
800
Sentry GKEに リプレイス 1年間の 知見見せます / Migrated to GKE Sentry #pixivdevmeetup
sue445
0
650
sue445謹製社内ツール十一選 / su445 in-house tools #pixivdevmeetup
sue445
1
450
Ruby on CI #ginzarails
sue445
3
2.5k
Best practices in web API client development #RubyKaigi
sue445
13
15k
スペックを上げてクラウドで殴るCI / pixiv TECH SALON #pixivTECHSALON
sue445
10
15k
OSS雑メンテ / OSS zatsu maintenance #railsdm
sue445
3
4.1k
Other Decks in Technology
See All in Technology
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
170
Amazon VPC Lattice 最新アップデート紹介 - PrivateLink も似たようなアップデートあったけど違いとは
bigmuramura
0
200
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
120
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
360
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
260
Turing × atmaCup #18 - 1st Place Solution
hakubishin3
0
490
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
170
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
37
15k
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
490
権威ドキュメントで振り返る2024 #年忘れセキュリティ2024
hirotomotaguchi
2
760
kargoの魅力について伝える
magisystem0408
0
210
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
1
250
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
169
14k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
Mobile First: as difficult as doing things right
swwweet
222
9k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Producing Creativity
orderedlist
PRO
341
39k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Transcript
pixiv Inc. pixiv Cloud Journey @sue445
Profile sue445 Engineer • Go Sueyoshi (a.k.a. sue445, sue さん)
• 2018年7月 ピクシブ中途入社 • 技術開発本部 インフラ部 ソリューションアーキテクトチー ム所属
業務内容 • AWSとGCPをだいたい全部 ◦ Organization owner, Solution Architect • 社内ツール(GitLabやSentry)の管理や運用
• github.com/pixiv owner • それ以外の雑用もだいたい全部
今日話すこと ピクシブのこれまでのパブリッククラウド(AWS, GCP)活用 の取り組みの歩み
今日話すこと • 今日は会社全体の取り組みを話しますが、発表内容の8割 くらいはsue445がやってきたことです • そのため、sue445が今のピクシブのAWSやGCPの形を 作ったと言っても過言ではないです
諸注意 • 20分という持ち時間では圧倒的に時間が足りないので、詳 細はスライド中に引用している過去に書いた技術記事や発 表資料を読んでください • 詳しく聞きたい方はこの後話を聞きに来てください!
Agenda • Long ago (〜2018): sue445入社前 • Beginning (2018〜2022): sue445がやってきたこと
• Now (2023): 現在のピクシブの状態 • Future (2023〜): 未来のために現在取り組んでいること
最初にまとめ • sue445が入社してからAWSやGCPの足回りが格段に進歩し、近代化した • Infrastructure as a Codeの文化も根付いた • 研修や互助会などの仕組みも整備されてきた
• 今後はオンプレミス環境も巻き込んでAWSやGCPを積極的に活用していく
Long ago (〜2018)
Long ago (sue445入社前) AWSアカウントやGCPプロジェクトはそれなりにあったが、 Terraformなどで管理されておらず野良運用されていた
Long ago (sue445入社前) • サービス数でいうと8割以上がオンプレミスで、実プロダ クトでのクラウド利用は少なめ • サーバ台数だとオンプレミスは9割以上 • Palcy(AWS),
Pawoo(AWS), 広告(GCP), 分析(GCP BigQuery)くらい
Long ago (sue445入社前) イベントの特設サイトのように一時的な用途でクラウドを使 うことが多かった
Beginning (2018〜2022)
Beginning (sue445入社後) 1. GitLab CIをAWSでオートスケール化 2. Terraform導入 3. 運用フローの整備 4.
SentryのGCP移行 5. GitLabのGCP移行
1. GitLab CIをAWSでオートスケール化 Before (2018/10〜11) • GitLab Runnerのサーバが1台しかなかったので全社利用に耐えられな かった
1. GitLab CIをAWSでオートスケール化 After (2018/12〜2022/9) • GitLab CIのジョブの数に応じてオートスケールするGitLab Runnerを AWSに構築
詳細 https://speakerdeck.com/sue445/pixiv-tech-salon-number-pixivtechsalon
2. Terraform導入
Terraformについて • Terraformとはクラウドの構成を設定ファイルで管理する ための、いわゆるInfrastructure as a Code (IaC)のツール ◦ https://www.terraform.io/
• 今でこそピクシブ社内でのデファクトになっているが、 sue445が初めて導入した
他に比較検討したもの vs. Cloud Formation (AWS), Deployment Manager (GCP) • 入社時点でAWSとGCPの利用率はだいたい同じくらい
• 同一のツールとエコシステムを利用した方が運用が楽なの で、両方に対応しているTerraformを採用した
3. 運用フローの整備
クラウドを利用する時のフローについて • Before ◦ 特になし • After ◦ 2〜3年かけて少しずつ定まってきた(後述)
よくある流れ • 1. プロダクトチーム:クラウドを利用したい場合、まずはインフラ部に 相談 • 2. インフラ部:やりたいことをヒアリングして相談してアーキテクチャ を決定 ◦
ヒアリングのMTGの時点でアーキテクチャを2〜3案くらい出す ◦ 要件次第ではオンプレミスが合っていることもありうるのでクラウド にこだわりすぎない
よくある流れ • 3. プロダクトチーム:社内の申請フローに従ってクラウド利用に関する 承認をもらう ◦ 必要に応じてインフラ部がサポートを行なう
よくある流れ • 4. インフラ部:AWSアカウントやGCPプロジェクトを作成 ◦ GitLabにTerraformのリポジトリを作って、pushしたらCIで Terraformが自動実行されるようにするところまでは最低限作る ◦ 必要に応じてそれ以降のプロトタイプ部分も作る •
5. インフラ部:承認された金額をもとに予算アラートを設定する
4. SentryのGCP移行
Sentryについて • Sentryとはエラー収集用のOSS • SaaS版(http://sentry.io)とSelf-Hosted版 (https://develop.sentry.dev/self-hosted/)があって、 ピクシブではSelf-Hosted版を利用している
移行前後の比較 Before (2018〜2020/2) • オンプレミスのサーバ1台で動いていた • アプリケーション本体の他にPostgreSQLやRedisなど含めて全部入り
移行前後の比較 After (2020/3〜) • Sentry本体はGKEで動かすようにし、負荷によっていい感じにオートス ケール • PostgreSQLやRedisなどはGCPのマネージドサービスを利用
詳細 https://speakerdeck.com/sue445/migrated-to-gke-sentry-number-pixivdevmeetup
5. GitLabのGCP移行
GitLabとは • GitのリポジトリをホスティングするためのOSS ◦ https://about.gitlab.com/ • SaaS版(https://gitlab.com/)とSelf-managed版があって、ピクシブで はSelf-managed版を利用している • 一部を除いて業務利用しているソースコードは社内のGitLabにある
◦ OSSの公開にはGitHub.comを利用
移行前後の比較 Before (2013〜2022/9) • GitLab本体: オンプレミス • GitLab CI: AWS
• 10年弱運用していたのでチリツモでツギハギな構成になっていた
移行前後の比較 After (2022/10〜) • 全てGCPに移行 • 単なる移行にとどまらず、アーキテクチャを全て刷新した
詳細 • 下記にまとめた ◦ 前編: https://inside.pixiv.blog/2022/11/29/110000 ◦ 中編: https://inside.pixiv.blog/2022/12/20/113000 ◦
後編: https://inside.pixiv.blog/2022/12/22/110000 • 合計約4万文字(読了目安:1時間)
【宣伝】Google Cloud Next Tokyo ’23 • 11/15(水)〜16(木)に東京ビッグサイトで開催予定の「Google Cloud Next Tokyo
’23」に登壇予定です! ◦ https://cloudonair.withgoogle.com/events/next-tokyo • DAY 1: GitLabをGoogle Cloud へ。移行の Tips と振り返り ◦ https://cloudonair.withgoogle.com/events/next-tokyo?talk=d1 -inf-03
Now (2023)
Now (現在のピクシブの状態) • オンプレミスとクラウドの比率 • AWSアカウントとGCPプロジェクトの合計数の推移 • Terraform • 運用系便利ツール集
• 研修 • 互助会
オンプレミスと クラウドの比率
オンプレミスとクラウドを利用しているサービス数の比率
AWSアカウントとGCP プロジェクトの合計数の 推移
AWSアカウントとGCPプロジェクトの合計数の推移
Terraform
Terraform sue445入社以降に開設されたAWSアカウントやGCPプロ ジェクトに関しては、基本的に全てTerraformとGitLab の リポジトリで管理されている
Terraform • 一番最初にTerraformリポジトリを作ったのは2018年11月 ◦ 前述のGitLab CIのオートスケールRunnerで利用 • 2023年9月現在、Terraformリポジトリは約60個
Terraform 基本的にはAWSアカウント(GCPプロジェクト)1つにつき Terraformリポジトリは1つ
Terraform サービスによっては本番環境と開発環境でAWSアカウント (GCPプロジェクト)を分けたいこともあるので、1つの Terraformリポジトリで管理できるようにもしてる
Terraform 詳細:Terraform運用事例書きました - pixiv inside https://inside.pixiv.blog/2020/07/30/172828
Terraform • インフラ部以外もTerraformを触る文化ができた • 簡単な権限追加くらいなら他部署でも作業ができるので、 権限の移譲がしやすくなった
Terraform sue445入社前からあったものに関しても、重要度が高いも のから後追いでTerraformを導入
e.g. 数百個あったRoute53のDNSレコードをTerraform移行 背景 • 約23ゾーン、約200レコードのDNS情報がRoute53で管理されていたが Terraformで管理されていなかった • Terraformで管理されていないとつらいので全てTerraform管理にした
e.g. 数百個あったRoute53のDNSレコードをTerraform移行 やったこと • 移行不要なレコードを削除 (50〜60レコードくらい) • DNSのゾーンやレコードを1つずつterraform importコマ ンドでTerraform管理下に移した(移行当時はまだimport
blockはなかった)
e.g. 数百個あったRoute53のDNSレコードをTerraform移行 やったこと • 集中力が切れると事故る可能性があったので、移行は多く ても1日10レコードずつにとどめた • だいたい2週間位かかった
e.g. 数百個あったRoute53のDNSレコードをTerraform移行 やらなかったこと • https://github.com/GoogleCloudPlatform/terraformer などを使っての 一括移行 • 使い慣れていないツールを利用して事故ると一瞬で会社の業務が止まるの で、ミスった時の被害を最小限に留めるために1レコードずつ移行した
運用系便利ツール集
運用系便利ツール集 • 予算アラート • terraform-updater
予算アラート • 予め決めた予算を超過していないかや予算の消化スピード を監視するために、全てのAWSアカウントやGCPプロジェ クトで予算アラートを設定している • メールだと気づけないので全ての予算アラートをSlackに 通知するようにしている
AWSでの予算アラート AWSの標準機能(ChatBot + SNS)だけで実現できる • ref. https://docs.aws.amazon.com/ja_jp/cost-management/latest/userguide/sns-alert-chime.html
AWSでの予算アラート ただしTerraformのAWS providerだとChatBot対応してい ないため下記のmoduleを利用している • https://registry.terraform.io/modules/waveaccountin g/chatbot-slack-configuration/aws/latest
GCPでの予算アラート GCPの標準機能だけだと予算アラートのSlack通知が実現で きないため、予算アラートのPub/Subトピックを受け取って Slackに通知する部分をCloud Functionsで実装した (in-house tool)
GCPでの予算アラート 予算アラート設定時に予算名に通知先のSlackチャンネル名 を書いて、予算アラート用のPub/Subトピックに連携するだ けのお手軽設定
Tips 1 監視対象のGCPプロジェクトと予算アラートの通知先 Pub/Subのトピックは別プロジェクトであってもいいので、 予算アラート専用のGCPプロジェクトを作るのが便利
Tips 2 一度予算のしきい値を超えると定期的にPub/Subトピックに 通知がいくため、Slackへの多重投稿を防ぐ対策が必要。 (うちでは通知済フラグをFirestoreに保存)
terraform-updater (in-house tool) 前提:Terraformリポジトリが社内に60個近くあるので手で バージョンアップするのは現実的じゃないので自動化したい
terraform-updater (in-house tool) 社内GitLabに https://github.com/dependabot/dependabot-script を動 かしているのでTerraformのproviderの自動バージョンアッ プはできる
terraform-updater (in-house tool) しかしそれだとTerraform本体のバージョンアップができな いのでTerraformのバージョンアップも自動化するために terraform-updaterを作っている
BTW. GitHubでやりたい場合 https://sue445.hatenablog.com/entry/2022/08/06/13 1857 を参照
研修
研修 AWSさんやGoogleさんのご厚意で、AWS JumpStartや Google Cloud Innovators Gym Japan(G.I.G)の研修を受け させてもらっている
研修 • Google Cloud Innovators Gym Japan にピクシブから3名の社員が参加 しました -
pixiv inside ◦ https://inside.pixiv.blog/2021/03/24/120000 • 新卒11名が AWS のスペシャル研修 に参加した話 - pixiv inside ◦ https://inside.pixiv.blog/2021/06/24/101000
互助会
互助会 ピクシブ社内ではプロダクト横断で特定の技術の知見を共有しあう互助会 の文化が根付いている • e.g. Railsサービス互助会、フロントエンド互助会、iOSアプリ会、 Androidアプリ会、データエンジニアリング互助会など • https://inside.pixiv.blog/search?q=互助会
互助会 AWSやGCPを利用しているプロダクトが増えてきたので今年 クラウド互助会を設立した • 隔週30分ずつ開催 • 参加人数は15人前後
Future (2023〜)
Doing • オンプレミス環境と各クラウドとの閉域網接続 • 既存サービスのKubernetes移行
オンプレミス環境と 各クラウドとの閉域網接続
オンプレミス環境と各クラウドとの閉域網接続 • 現在、オンプレミス環境のデータセンターとクラウド (AWS & GCP)を閉域網接続しようとしている ◦ AWSとGCPを同時進行とか正気か????
オンプレミスと各クラウドとの閉域網接続 • AWSはDirect Connect Gatewayを利用 ◦ 本当はTransit Gatewayを使いたかったが、契約当時 キャリアが対応していなかった(今は対応してる) •
GCPはPartner Interconnectを利用
AWS Direct Connect Gatewayのざっくり構成
GCP Partner Interconnectのざっくり構成
既存サービスの Kubernetes移行
既存サービスのKubernetes移行 • ピクシブの大半のサービスはオンプレミスのデータセン ター内で動いている • データセンター内にKubernetesのクラスタを構築し、既 存のサービスを移行している真っ最中
まとめ
まとめ • sue445が入社してからAWSやGCPの足回りが格段に進歩し、近代化した • Infrastructure as a Codeの文化も根付いた • 研修や互助会などの仕組みも整備されてきた
• 今後はオンプレミス環境も巻き込んでAWSやGCPを積極的に活用していく
We are Hiring! 今のピクシブはAWS, GCP, オンプレミスの全てがアツいの で、興味ある人は是非話を聞きに来てください!!!!!