Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RocroにおけるGCP活用事例
Search
Yoshiyuki Mineo
September 27, 2017
Technology
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RocroにおけるGCP活用事例
GCPUG Tokyo DevOps Day September 2017
Yoshiyuki Mineo
September 27, 2017
More Decks by Yoshiyuki Mineo
See All by Yoshiyuki Mineo
GCP を活用してスケーラブルな CI サービスを作った話
yoshiyukimineo
0
270
開発者向けSaaS Rocro
yoshiyukimineo
0
770
Rocro Inspecode Hands On with Bitbucket
yoshiyukimineo
0
130
Rocro Inspecode Hands On
yoshiyukimineo
0
670
Other Decks in Technology
See All in Technology
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
400
Driving AI Adoption Using In-House GPUs to Serve Qwen
po3rin
2
470
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
200
AI時代に、プロダクトの数だけ積み上がる所有コストをどうエンジニアリングするか / Engineering the Cost of Ownership
kzkmaeda
1
1.1k
薬剤師(ドメインエキスパート)と一緒に育てる薬局向けAIアシスタント
kakehashi
PRO
2
130
omasushiというライブラリを作った
polidog
PRO
0
170
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
250
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
310
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
170
AIオーケストレーションを活用した 開発ワークフローの設計と実践
bqnq
0
120
コーディングエージェントでM5Stack系の開発を少し試した時の話 / M5 Japan Tour 2026 Autumn 東京
you
PRO
0
110
生成AIのテナント制御とシャドーMCP対策 | AIを"止めずに"、情報を守る
yukun
0
140
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
10k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
490
Rails Girls Zürich Keynote
gr2m
96
14k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
680
Six Lessons from altMBA
skipperchong
29
4.5k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
730
Bash Introduction
62gerente
615
220k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Transcript
RocroにおけるGCP活用事例 Rocro株式会社 峯尾 嘉征 / 八神 貴心 2017/09/27
自己紹介 ▪ 峯尾 嘉征 @ Rocro & Sony ▪ ハードウェア→組み込み→Web
– CPU、コンパイラ、Webブラウザ、Webサービスなどの開発に従事 ▪ OSS – github.com/sony ▪ 管理人、sonyflake/gobreaker/v8evalを公開 – github.com/plenluno ▪ 個人アカウント、libnode(Node.jsのC++実装)などを公開 © Rocro Inc. 2
Agenda ▪ Rocroのご紹介 ▪ GCPのバージョン管理&デプロイ ▪ StackdriverによるGAE/GKEの監視 © Rocro Inc.
3
Rocroのご紹介 © Rocro Inc. 4
▪ 開発者向けサービス群 – https://rocro.com – GitHub / Bitbucketと連携 ▪ 9/14
public beta開始 – 現在、プライベートレポジトリのみサポート – 10月中にパブリックレポジトリもサポート予定 ▪ 名前の由来 – アジャイル開発:イテレーションを回しながらソフトウェアをつくる – 回転させながらものをつくる道具 → ろくろ © Rocro Inc. 5
▪ 自動コードレビュー&コード修正サービス – https://inspecode.rocro.com ▪ 約50種類の静的解析ツールをサポート – 一部の言語でユニットテストもサポート開始 ▪ サポート言語:
C, C++, Clojure, CoffeeScript, CSS, Go, HTML, Java, JavaScript, PHP, Python, Ruby, Scala, Shell, TypeScriptなど ▪ Public Beta © Rocro Inc. 6 Inspecode
▪ 静的解析の結果を分かりやすくレポート – A, B, C, D, Fの5段階評価 – Issueを様々な分類でチェック
▪ ファイル ▪ ツール ▪ 言語 ▪ 重要度 ▪ 新規/既存 – トレンド ▪ 5段階評価 ▪ Issue数 © Rocro Inc. 7 Inspecode
▪ Continuous Integration – Git Push/Pull Requestの自動チェック ▪ ツールごとにIssue数の閾値を設定可能 閾値を超えたらFail
– Email/Slack/HipChat通知 ▪ 失敗・回復時だけ通知も可能 – Badge(READMEに貼るアイコン) © Rocro Inc. 8 Inspecode
▪ APIドキュメント生成&ホスティングサービス – https://docstand.rocro.com ▪ 各言語の代表的なAPIドキュメントツールをサポート – Javadoc, GoDoc, Sphinxなど
▪ サポート言語: C, C++, Clojure, CoffeeScript, Go, Java, JavaScript, PHP, Python, Ruby, Scala, TypeScriptなど ▪ Public Beta © Rocro Inc. 9 Docstand
▪ Continuous Documentation – Git Pushのたびにドキュメントを自動生成 – 常に最新のドキュメントをチーム内で共有可能 © Rocro
Inc. 10 Docstand
▪ 自動負荷テストサービス – https://loadroid.rocro.com ▪ テストシナリオを書くだけで負荷試験を自動実行 – 自動で負荷テスト環境の構築、負荷テストの実施、レポート作成 ▪ closed
test中 – 参加を希望する方はご連絡ください © Rocro Inc. 11 Loadroid
▪ YAML&JavaScriptで簡潔&柔軟にテストシナリオを作成可能 – 静的なHTTPリクエストだけならYAMLだけでOK – JavaScriptで動的にHTTPリクエストを生成可能 – シンプルな文法で読み書きしやすい © Rocro
Inc. 12 Loadroid
Rocroの強み ▪ ࣗಈηοτΞοϓ ▪ ࣗಈमਖ਼ ▪ ࣗಈฒྻԽ ユーザの⼿間を⼤幅に減らし、結果を素早く返すことにフォーカス © Rocro
Inc. 13
自動セットアップ ▪ 強力なデフォルト設定(Inspecode/Docstand) – レポジトリ内の使用言語を検出して、適切なツールを自動実行 例:Go言語を検出 → Go言語向けツールgofmt, golintなどを適用 –
各ツールの設定ファイルを検出して自動適用 例:Checkstyleの場合、checkstyle.xml を検出して適用 ▪ 依存ライブラリを自動でダウンロード(Inspecode/Docstand) – 例:npm install, go get, git submoduleなど ▪ 負荷テストのサーバクラスタを自動構築(Loadroid) – ユーザはテストシナリオを書くだけ エンジニアの各種セットアップの時間を⼤幅に削減 © Rocro Inc. 14
(参考)Goの自動依存解決 © Rocro Inc. 15
自動修正 ▪ 静的解析ツールで検出したIssueを自動で修正 修正内容をPull Requestとして発行(Inspecode) → エンジニアの修正作業の時間を大幅に削減 ▪ 修正機能を独自に実装(Inspecode) –
Checkstyle, golint, gosimple – 今後も対応ツールを増やしていく予定 if err != nil { return err } return nil return err © Rocro Inc. 16
自動並列化 ▪ ツールレベルで自動で並列化 (Inspecode/Docstand) – ツールごとにDockerコンテナ – 様々なツールを活用するチームほど 実行時間を大幅に短縮可能 A
B C A B 実⾏時間削減 C © Rocro Inc. 17
入力分割による並列化 A B C A C B A C B1
B2 実⾏時間削減 特定のツールの実行時間が支配的な場合 ツールの並列化だけでは不十分… inspecode: go-test: input: frontend/ input: backend/ rocro.yml 設定ファイルで入力を簡単に分割可能 各入力ごとに並列実行(Inspecode) © Rocro Inc. 18 並列実行
GCPのバージョン管理&デプロイ © Rocro Inc. 19
構成 App Engine ユーザからの リクエストを処理 Container Engine ユーザのJobを ⾮同期実⾏ ©
Rocro Inc. 20
GAEのバージョン管理&デプロイ ▪ Semantic Versioning – MAJOR.MINOR.PATCHの3つの数字(x.y.z -> x-y-z) ▪ GAE
Serviceのバージョンは全部同じ ▪ 同じバージョンのService間でしか通信しない Immutable Infrastructure in GAE Application: 1-2-3 Service Std: 1-2-3 Service Flex: 1-2-3 Application: 1-2-4 Service Std: 1-2-4 Service Flex: 1-2-4 © Rocro Inc. 21
GKEのバージョン管理&デプロイ ▪ ローリングアップデートではなく、バージョンごとにクラスタを作成 – クラスタ名:x.y.z -> cluster-x-y-z ▪ 同じバージョンのGAE Serviceとしか通信しない
Application: 1-2-3 Service Std: 1-2-3 Service Flex: 1-2-3 Application: 1-2-4 Service Std: 1-2-4 Service Flex: 1-2-4 cluster-1-2-3 cluster-1-2-4 Immutable Infrastructure in GAE/GKE © Rocro Inc. 22
メリット&デメリット ▪ メリット – GAEのバージョン切り替えにGKEも自動で追従 – 問題があったときに元のバージョンにすぐに戻せる – 内部Web APIの互換性を保つ必要がない
▪ デメリット – バージョン切り替え時に複数バージョンが同時に存在→コスト増 ▪ ただし、コスト増を最小限にすることは可能 – 前バージョンのクラスタはオートスケールで縮退 – GAE Cronにより不要なクラスタを自動で削除 © Rocro Inc. 23
Dockerイメージの管理 ▪ Container Registroyを利用 – GCPネットワーク内で高速にpull可能 ▪ DockerイメージのバージョンもGAE/GKEのバージョンと同じ – Dockerイメージにバージョンタグを打つ
– cluster-x-y-zは[image-name]:x-y-zだけをpull ▪ RocroでサポートするツールごとにDockerイメージを作成 →現在、70超のDockerイメージを管理 →対策しないとDockerイメージのbuild/pushだけで大変... © Rocro Inc. 24
Dockerイメージのbuild/push高速化 ▪ build/pushの並列化 ▪ git revisionが同じ場合、build/pushをスキップ、タグを打つだけ – ローカルにイメージキャッシュが無くてもスキップ可能 – 実際には前バージョンとrevisionが変わらないことが多いので有効
LABEL revision=b451898… [image-name]:1-2-3, latest revision: b451898… tag: 1.2.3 Git LABEL revision=b451898… [image-name]:1-2-3, 1.2.4, latest revision: b451898… tag: 1.2.3, 1.2.4 Git GCRからLABEL取得 revisionを比較 revisionが同じなら タグだけ打つ © Rocro Inc. 25
StackdriverによるGAE/GKEの監視 © Rocro Inc. 26
自己紹介 ▪ 八神 貴心(やがみ きしん) – ソフトウェアエンジニア@Rocro – GitHub: @ks888
– Twitter: @ks888sk ▪ Rocroではインフラ・監視関連から開発まで色々やってます ▪ 最近のOSS活動 – LambStatus (https://github.com/ks888/LambStatus) ▪ サービスのステータスページを簡単に構築・運用できるOSS – PyCon JPスタッフ © Rocro Inc. 27
利用中のStackdriverの機能 ▪ Stackdriver Monitoring – GAE・GKE関連メトリクスの収集・監視 – ダッシュボード ▪ Stackdriver
Logging – GAE・GKEのログを集約 – ログからのメトリクスデータ生成 ▪ Stackdriver Trace – APIのボトルネック発見 – デバッグ時の情報源 © Rocro Inc. 28
Stackdriverの良かったところ 1. GAE std envのデフォルトメトリクスが豊富 2. HTTPリクエストのトレースが便利 ✨ 3. デフォルトでオートスケーリング対応⚒
4. 安い! © Rocro Inc. 29
GAE std envのデフォルトメトリクスが豊富 ▪ 設定無しで75種類のメトリクスが利用可能 ▪ とはいえ、足りないメトリクスもある → Custom Metricsで補う
– https://cloud.google.com/monitoring/custom-metrics/ © Rocro Inc. 30
1. Loggingで遅いリクエストを見つけたら 2. その場でトレースを確認! HTTPリクエストのトレースが便利 ✨ © Rocro Inc. 31
HTTPリクエストのトレースが便利 ✨ ▪ 包括的なレポートからトレースを確認することもできる – レイテンシの分布 – レイテンシのパーセンタイル © Rocro
Inc. 32
デフォルトでオートスケーリング対応 ⚒ ▪ 作成Resourceは「resource type」ごとにグループ化される ▪ メトリクスの可視化・監視は、 resource typeが基本単位になる ▪
デフォルト設定のままで、インスタンス増減に追従した監視ができる! “gce_instance” resource type GCEインスタンス GCEインスタンス GCEインスタンス GCEインスタンス GCEインスタンス New © Rocro Inc. 33
安い! ▪ $8/M/resource – idle状態のGAEインスタンスは課金されない ━ Total Instances ━ Idle
Instances © Rocro Inc. 34
Stackdriverで困ったところ 1. Resource groupに関する混乱 2. 監視agentがGKE、GAE flex envを未サポート 3. GKEのデフォルトメトリクスが少ない
4. Infra as codeの実践が難しい © Rocro Inc. 35
Resource groupに関する混乱 ▪ 例:GKEクラスタのresource groupを作りたい – StackdriverのUIから作ってみる 1. Suggestされた Groupを使ってみる
2. Suggestされた グルーピング条件 3. Group作れたっぽい © Rocro Inc. 36
Resource groupに関する混乱 ▪ 例:GKEクラスタのresource groupを作りたい – 作成したGKE resource groupのCPU使用率メトリクスのグラフを出 す
3. !?? 2. 作成したGroup でフィルタ 1. CPU使⽤率メ トリクスを選択 © Rocro Inc. 37
Resource groupに関する混乱 ▪ なぜこうなってしまったか? – 「Resource type」が鍵になる ▪ gce_instance、gke_containerなどのタイプがある ▪
Metricsは、resource typeに紐づく gke_container Resource type CPU Usage / Container Metrics Used Memory gce_instance CPU Usage / Instance Disk Read I/O © Rocro Inc. 38
作成したgroup Resource groupに関する混乱 ▪ なぜこうなってしまったか?(続き) – 作成したグループは、gce_instanceタイプのリソースしか含んでい なかった gke_container Resource
type CPU Usage / Container Metrics Used Memory gce_instance CPU Usage / Instance Disk Read I/O 指定した メトリクス 指定した グループ グラフ作成画⾯ © Rocro Inc. 39
Resource groupに関する混乱 ▪ Group作成がうまく行かないときは、resource typeに注目してみ る – 一部のresource typeしか含まれていないかも。。 –
Groupに含まれるresourceは、以下APIから確認できる ▪ Method: projects.groups.members.list ▪ 結局、どうすればGKE clusterのresource groupを作れるのか? – Stackdriver UIから作る方法はわからず。。 – 以下APIでできたけど。。 ▪ Method: projects.groups.create ▪ Filterを resource.type=gke_container に指定 © Rocro Inc. 40
監視agentがGKE、GAE flex envを未サポート ▪ 監視agent – GCEインスタンスのメモリ使用率、ディスク使用率などを収集 – GKE、GAE flex
envのGCEインスタンスは未サポート ▪ https://cloud.google.com/monitoring/agent/#supported_vms ▪ Custom Metricsである程度対応中。。 – 課題:複数インスタンスでクラスタを作っている場合、cronに呼ばれた1 インスタンスのデータしか収集されない ▪ Cronに呼ばれたインスタンスが他のインスタンスのデータを収集する形な らできそうだけど複雑。。 Cron GAE flex env Stackdriver APIを叩く 収集した データを送信 © Rocro Inc. 41
GKEのデフォルトメトリクスが少ない ▪ 現在のデフォルトメトリクス – コンテナごとのCPU使用率、メモリ使用量、ディスク使用量 ▪ k8s特有のメトリクスもあると助かる – ジョブ数 –
失敗したジョブ数 – 実行待ち状態のジョブ数 ▪ こちらも、Custom metricsで対応中 Cron GAE flex env Stackdriver APIを叩く 収集した データを送信 GKE K8s APIで データ収集 © Rocro Inc. 42
Infra as codeの実践が難しい ▪ 主なサポート済みAPI ☀ – Resource groupsの作成、取得 –
Custom metricsの作成、取得 – Time seriesの作成、取得 ▪ 足りないAPI – Resourcesの取得 ▪ Method: projects.groups.members.list を使えば間接的に取得可 ▪ Resourceのmetadataを取る方法は不明 – Alerting policyの作成、取得 – Dashboardの作成、取得 © Rocro Inc. 43
Stackdriverによる監視のまとめ ▪ デフォルト設定が充実していて助かる – メトリクス – リクエストのトレース – オートスケーリング対応 ▪
ドキュメントの充実、GKE対応はもっと進んでほしい – 使い始め当初(一年前)と比べると良くなってきた印象 © Rocro Inc. 44
End © Rocro Inc. 45