SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Bazelでビルドしたアプリを
GCPにデプロイしようとしてハマった話
(Dataflowのあたり)
GCPUG Tokyo DevOps Day September 2017
Katsunori Kanda (@potix2)
自己紹介
神田勝規(かんだかつのり) @potix2
株式会社サイバーエージェント アドテクスタジオ
サーバーサイドエンジニア
興味があること
ROS / droneの自律制御
Minecraft
結論
● gRPC使うならbazelは良い選択肢
● golangは依存関係の解決にやや難があるが使えなくは無い
○ 最近、cross compileできるようになった:)
● bazelを使ってJavaのビルドをするのは辛い(とくにDartaflow)
bazelとは?
● 最近、google関連のOSSでよく使われているビルドツール
○ tensorflow, kubernetes, istioなど
● 分散ビルドシステム
● 多言語マルチプロジェクトが扱いやすい(DAG)
● 競合プロダクト: pants
service.proto
java client
server app
golang
client
protocol bufferも
プロジェクトとして扱える
(オススメポイント)
Bazelの簡単な使い方
● ルートディレクトリにWORKSPACEファイルを置く
○ 読み込むbazelのrule(プラグインのようなもの)など、
全体設定を書く
● ビルド対象のディレクトリにBUILDファイルを置く
○ プログジェクトのビルド設定を書く。バイナリーの生
成ルールや、テストの実行方法など。
gRPCサービス・クライアントの例(golang)
.
├── BUILD
├── WORKSPACE
└── hello
├── BUILD
├── client
│ ├── BUILD
│ └── client.go
├── hello.proto
└── server
├── BUILD
└── server.go
ファイル一式: https://github.com/potix2/grpc-with-bazel
hello
hello/server
hello/client
ファイル構造 プロジェクトの依存関係
WORKSPACEの例
git_repository(
name = “io_bazel_rules_go”,
remote = “https://github.com/bazelbuild/rules_go.git”,
tag = “0.5.2”,
)
load(“@io_bazel_rules_go//go:def.bzl”, “go_repositories”, “go_repository”)
git_repository(
name = "org_pubref_rules_protobuf",
remote = "https://github.com/pubref/rules_protobuf.git",
tag = "v0.7.2",
)
load("@org_pubref_rules_protobuf//go:rules.bzl", "go_proto_repositories")
go_proto_repositories()
go_repositories(
go_version = "1.8.3",
)
...
package(default_visibility = ["//visibility:public"])
load("@org_pubref_rules_protobuf//go:rules.bzl", "go_proto_library")
go_proto_library(
name = "hello-go-proto",
protos = [
"hello.proto",
],
with_grpc = True,
)
BUILDの例: hello(gRPC)
hello/BUILD
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
go_library(
name = "go_default_library",
srcs = ["server.go"],
visibility = ["//visibility:private"],
deps = [
"//hello:hello-go-proto",
"@org_golang_google_grpc//:go_default_library",
"@org_golang_x_net//context:go_default_library",
],
)
go_binary(
name = "server",
library = ":go_default_library",
visibility = ["//visibility:public"],
)
BUILDの例: hello/server (golang)
hello/server/BUILD
ここからはbazelのつらいはなし
Dataflowアプリのビルド
● 一言で言うと地獄
● Transitive dependencyを解決する良い方法がない
● jarのバージョンコンフリクトした時の解決ルールが
mavenと違う
○ bazelはプロジェクト初期からJavaのビルドをサポートしているはずな
のに・・・
Transitive Dependencyとは?
dependency
Transitive dependency
...
...
Dataflowアプリをビルドするためにやったこと
● 公式ページに書いてある方法だとうまく行かない
○ 参考: https://docs.bazel.build/versions/master/generate-workspace.html
● https://github.com/bazelbuild/miglation-tooling を使ってみた
○ が、これもうまく行かない
● mavenの実行結果から依存関係を抽出するスクリプトを書いて対処した
○ チームメンバーが作ってくれた!ありがとう:)bazelのjava_rulesがmavenと同じルールで依存関係を解決してくれるようになるといいな・・・
結論(ふたたび)
● gRPC使うならbazelは良い選択肢
● golangは依存関係の解決にやや難があるが使えなくは無い
○ 最近、cross compileできるようになった:)
● bazelを使ってJavaのビルドをするのは辛い(とくにDartaflow)
おしまい

Weitere ähnliche Inhalte

Was ist angesagt?

Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
Masakazu Muraoka
 
mruby_nginx_module at pyfes 2013.11
mruby_nginx_module at pyfes 2013.11mruby_nginx_module at pyfes 2013.11
mruby_nginx_module at pyfes 2013.11
Tatsuhiko Kubo
 

Was ist angesagt? (20)

Datalab and colaboratory
Datalab and colaboratoryDatalab and colaboratory
Datalab and colaboratory
 
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たFirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
 
Serverless on GCP
Serverless on GCPServerless on GCP
Serverless on GCP
 
2018 07-23
2018 07-232018 07-23
2018 07-23
 
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
 
Mongodb World 2014
Mongodb World 2014Mongodb World 2014
Mongodb World 2014
 
ClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろう
 
mruby_nginx_module at pyfes 2013.11
mruby_nginx_module at pyfes 2013.11mruby_nginx_module at pyfes 2013.11
mruby_nginx_module at pyfes 2013.11
 
mruby_nginx_module
mruby_nginx_modulemruby_nginx_module
mruby_nginx_module
 
GCP HTTPロードバランサ運用例
GCP HTTPロードバランサ運用例GCP HTTPロードバランサ運用例
GCP HTTPロードバランサ運用例
 
Tfug kansai vol3
Tfug kansai vol3Tfug kansai vol3
Tfug kansai vol3
 
Google Apps Script 概要
Google Apps Script 概要Google Apps Script 概要
Google Apps Script 概要
 
mruby_nginx_module〜Embedded mruby into Nginx〜
mruby_nginx_module〜Embedded mruby into Nginx〜mruby_nginx_module〜Embedded mruby into Nginx〜
mruby_nginx_module〜Embedded mruby into Nginx〜
 
The History of Reactive Extensions
The History of Reactive ExtensionsThe History of Reactive Extensions
The History of Reactive Extensions
 
Gatsby & React Static
Gatsby & React StaticGatsby & React Static
Gatsby & React Static
 
ng build --prod & Continuous Delivery
ng build --prod & Continuous Deliveryng build --prod & Continuous Delivery
ng build --prod & Continuous Delivery
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
 
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状についてClojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
 
Excite beer bash06
Excite beer bash06Excite beer bash06
Excite beer bash06
 

Ähnlich wie BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話

Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
Nobuhiro Sue
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
 

Ähnlich wie BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話 (20)

Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
Google Product
Google ProductGoogle Product
Google Product
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
 
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
 
[visasQ] 2017-04-26 ビザスクを支えるアーキテクチャ
[visasQ] 2017-04-26 ビザスクを支えるアーキテクチャ[visasQ] 2017-04-26 ビザスクを支えるアーキテクチャ
[visasQ] 2017-04-26 ビザスクを支えるアーキテクチャ
 
2018 04-14-cockroachdb-20-now-available
2018 04-14-cockroachdb-20-now-available2018 04-14-cockroachdb-20-now-available
2018 04-14-cockroachdb-20-now-available
 
SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-SpringOne Platform Replay -Pivotal Cloud Foundry-
SpringOne Platform Replay -Pivotal Cloud Foundry-
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
 
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
 
Node-REDのロードマップや見どころ
Node-REDのロードマップや見どころNode-REDのロードマップや見どころ
Node-REDのロードマップや見どころ
 
ASP.NET Core のお気に入りの機能たち (docker向け)
ASP.NET Core のお気に入りの機能たち (docker向け)ASP.NET Core のお気に入りの機能たち (docker向け)
ASP.NET Core のお気に入りの機能たち (docker向け)
 
Gae hands on
Gae hands onGae hands on
Gae hands on
 
0831 node学園lt
0831 node学園lt0831 node学園lt
0831 node学園lt
 
Tech lounge gcp_20190313
Tech lounge gcp_20190313Tech lounge gcp_20190313
Tech lounge gcp_20190313
 

Mehr von Katsunori Kanda

自動テストのすすめ
自動テストのすすめ自動テストのすすめ
自動テストのすすめ
Katsunori Kanda
 

Mehr von Katsunori Kanda (14)

Airflow 2.0 migration ガイド
Airflow 2.0 migration ガイドAirflow 2.0 migration ガイド
Airflow 2.0 migration ガイド
 
Web Privacy Survival Guide
Web Privacy Survival GuideWeb Privacy Survival Guide
Web Privacy Survival Guide
 
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話
 
GCSでstatic web hosting
GCSでstatic web hostingGCSでstatic web hosting
GCSでstatic web hosting
 
Dockerだけではないコンテナのはなし
DockerだけではないコンテナのはなしDockerだけではないコンテナのはなし
Dockerだけではないコンテナのはなし
 
RealSenseを使ってCrazyflieを自律飛行させてみた
RealSenseを使ってCrazyflieを自律飛行させてみたRealSenseを使ってCrazyflieを自律飛行させてみた
RealSenseを使ってCrazyflieを自律飛行させてみた
 
KINECT WITH ROS
KINECT WITH ROSKINECT WITH ROS
KINECT WITH ROS
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
Hadoopことはじめ
HadoopことはじめHadoopことはじめ
Hadoopことはじめ
 
データファースト開発
データファースト開発データファースト開発
データファースト開発
 
Spark Summit 2015 参加報告
Spark Summit 2015 参加報告Spark Summit 2015 参加報告
Spark Summit 2015 参加報告
 
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
 
Discretized Streams: Fault-Tolerant Streaming Computation at Scaleの解説
Discretized Streams: Fault-Tolerant Streaming Computation at Scaleの解説Discretized Streams: Fault-Tolerant Streaming Computation at Scaleの解説
Discretized Streams: Fault-Tolerant Streaming Computation at Scaleの解説
 
自動テストのすすめ
自動テストのすすめ自動テストのすすめ
自動テストのすすめ
 

Kürzlich hochgeladen

Kürzlich hochgeladen (7)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話