cfの便利機能を他の環境でも。open service broker
TRANSCRIPT
CFのあの便利機能を他の環境でも。
OpenServiceBroker
Pivotal Japan - Platform Architect
Kazuto Kusama@jacopen
Open Service Brokerの前にService Brokerの話をしよう
イメージしてみよう
アプリ開発した!DBも用意して動かそう!① DBを作る
VM/ベアメタルにインストールしたりRDSのようなManagedサービス使ったり
アプリ開発した!DBも用意して動かそう!
host:aaa.bbb.ap-northeast-1.rds.amazonaws.com:5432db:productionuser:mssqlpass:xxxxx
① DBを作る
VM/ベアメタルにインストールしたりRDSのようなManagedサービス使ったり
② コンフィグを控える
ホスト名orIP、DB名、ユーザー名、パスワードは最低限控えておく必要がある
アプリ開発した!DBも用意して動かそう!
host:aaa.bbb.ap-northeast-1.rds.amazonaws.com:5432db:productionuser:mssqlpass:xxxxx
db:host:aaa.bbb.ap-northeast-1.rds.amazonaws.com:5432name:productionuser:mssqlpass:xxxxx
① DBを作る
VM/ベアメタルにインストールしたりRDSのようなManagedサービス使ったり
② コンフィグを控える
ホスト名orIP、DB名、ユーザー名、パスワードは最低限控えておく必要がある
③ アプリのコンフィグを修正
アプリのコンフィグファイルに②を記述。より汎⽤的にするなら、環境変数から読み込むようにすることも。
アプリ開発した!DBも用意して動かそう!
host:aaa.bbb.ap-northeast-1.rds.amazonaws.com:5432db:productionuser:mssqlpass:xxxxx
db:host:aaa.bbb.ap-northeast-1.rds.amazonaws.com:5432name:productionuser:mssqlpass:xxxxx
① DBを作る
VM/ベアメタルにインストールしたりRDSのようなManagedサービス使ったり
② コンフィグを控える
ホスト名orIP、DB名、ユーザー名、パスワードは最低限控えておく必要がある
③ アプリのコンフィグを修正
アプリのコンフィグファイルに②を記述。より汎⽤的にするなら、環境変数から読み込むようにすることも。
④ 起動!
アプリ開発した!DBも用意して動かそう!
host:aaa.bbb.ap-northeast-1.rds.amazonaws.com:5432db:productionuser:mssqlpass:xxxxx
db:host:aaa.bbb.ap-northeast-1.rds.amazonaws.com:5432name:productionuser:mssqlpass:xxxxx
① DBを作る
VM/ベアメタルにインストールしたりRDSのようなManagedサービス使ったり
② コンフィグを控える
ホスト名orIP、DB名、ユーザー名、パスワードは最低限控えておく必要がある
③ アプリのコンフィグを修正
アプリのコンフィグファイルに②を記述。より汎⽤的にするなら、環境変数から読み込むようにすることも。
④ 起動!
Cloud Foundryの解決方法Marketplace
CF CLIでDBを作成し、アプリに紐付ける例
cf push frontend (1) cf create-service p-mysql 100mb-dev mydb (2)cf bind-service frontend mydb (3)
FrontendApplication
① フロントエンドアプリをpush
② DBを作成(marketplaceのp-mysqlを選択)
FrontendApplication
DB
③ アプリとDBを紐付け(バインド)
FrontendApplication
DB
CF CLIでDBを作成し、アプリに紐付ける例
cf push frontend (1) cf bind-service frontend mydb (2)
BackendApplication
① フロントエンドアプリをpush ② アプリとDBを紐付け(バインド)
FrontendApplication
DB
BackendApplication
イケてる😃
Marketplaceのメリット•バックエンドサービスのプロビジョニングとコンフィグレーションが自動化できる•どのサービスも同じインタラクションで利用できる
この仕組みを実現するのがService Broker
Service Broker• Cloud FoundryでMarketplaceを実現したい!• Cloud Foundryと外部サービスを中継する仕組みが要るよね•中継する仕組みが備えるべきAPIをService Broker APIとして定義• Service Broker APIを実装した中継くんをService Brokerと呼ぶ
ServiceBrokerforAWS
create-serviceaws-rds-oracle
servicebrokerAPI AWSAPI
responseresponse
ServiceBrokerforAWS
bind-serviceaws-rds-oracle
servicebrokerAPI
configuration
アプリケーションには環境変数で必要なコンフィグが渡される
configuration
AWSAPI
ServiceBrokerforAWS
create-serviceaws-rds-oraclecreate-service aws-rds-postgrescreate-serviceaws-rds-auroracreate-serviceaws-dynamodbcreate-serviceaws-s3
どのAWSのサービスも同じインタラクションで作成可能
ServiceBrokerforAWS
MySQLforPCF
Broker
GCPServiceBroker
NewRelicServiceBrokerさまざまなBrokerを登録することで
どのサービスもcreate service, bind-serviceで作成とバインディングができる
Service Brokerの良さ• Service Brokerの設計や思想は非常にシンプルであり、かつ実用的•後付けする形でCloud Foundryの機能を拡張していける• Cloud Foundryの強さの要因の一つ
12 Factor App•スケールし、クラウドに適したアプリを構築するための12の方法論
バックエンドサービスをリソース化• 12 Factor AppのIV項「バックエンドサービス」で説かれている方法論
•バックエンドサービスをリソースとして扱い、アプリケーションにはそれをアタッチする
Open Service Brokerとは
すべてをコンテナ化するk8s、しかし・・・• KubernetesはStateful Setsなどの機能により、SoRな仕組みもホストできるようになりつつある。•しかし、無理にk8sの中で動かすのではなく、マネージドサービスを使った方がいいケースは往々にしてある。• たとえばメールサーバーなんて誰もホストしたくない。SendGridやAmazon
SESを使いたい• DBの運用をコンテナ内でしたくない、RDS使いたい• NewRelic、Datadogなどなど便利なサービスもいっぱいある。
コンテナだってMarketplaceしたい!• Marketplaceの考え方はk8sでも活用できる• Service Brokerよく出来てるから、他でも使えるようにしよう!•でも、Cloud Foundry前提に作られている・・・
organization_guidやspace_guidなど、Cloud Foundry固有のパラメータが必須になっている
例えば・・・
Open Service Broker APIプロジェクト•さまざまな実装に対応した仕様を定める•テストスイートを作成する•この仕組みを広める
CF固有のパラメータはdeprecatedにして、contextという汎用的、かつOptionalなパラメータを導入
例えば・・・
ガバナンス
実装
現在
例えば、Trove Service Brokerなんてもアリかもしれない
まとめ• Service BrokerはCFの強力な機能•エコシステムを広げるため、CF以外に解放。それがOpen Service Broker• Kubernetesでも、近い将来使えるようになるはず!