今回は こちらの記事 で構築した SQL Server 2019 BDC にアプリケーションを展開します。
アプリケーション
SQL Server 2019 BDC では以下の種類のアプリケーションがサポートされます。
- R/Python 関数、モデル、およびアプリ
- MLeap Serving
- SSIS
アプリケーションはクラスター内に展開され、外部からも内部からも利用ができます。
アプリケーションは spec.yaml という仕様ファイルで展開を定義します。
レプリカ数とプールサイズ
アプリケーションの並列処理をサポートできるよう、レプリカ数とプールサイズを指定します。
- レプリカ数: ポッドの数
- プールサイズ: 1 ポッドに含めるアプリケーションの数
以下の場合、1 レプリカあたり N 個のアプリケーションを含むポッドが N 個展開されるため、NxN の並列処理が可能です。
アプリケーションの展開: Python 関数
まずは一番シンプルな Python 関数を展開してみます。
1. 任意のディレクトリで以下コマンドを実行。Visual Studio Code で開く。
azdata app init --name addpy --version v1 --template python
code addpy
2. hello.py を add.py にリネームして、以下コードに差し替え。
def add(x, y):
result = x+y
return result
result=add(x,y)
3. spec.yaml の中身を以下に差し替え。
- name: アプリケーションの名前
- version: アプリケーションのバージョン
- runtime: 言語 (R または Python)
- src: アプリへのパス
- entrypoint: 呼び出される関数名
- replicas: レプリカ数
- poolsize: プールサイズ
- inputs: アプリで利用するインプットと型
- output: アウトプットと型
#spec.yaml
name: add-app
version: v1
runtime: Python
src: ./add.py
entrypoint: add
replicas: 1
poolsize: 1
inputs:
x: int
y: int
output:
result: int
4. azdata でアプリを展開。
>azdata login -n mssql-cluster
Username: admin
Password:
>azdata app create --spec ./addpy
Application `add-app/v1` successfully created.
5. 作成状況を確認。
>azdata app list
App Name State Version
------------------------------------------------- ------- ---------------- ---------
https://52.xxx.xxx.xxx:30080/api/v1/app/add-app/v1 add-app WaitingForCreate v1
6. アプリケーション展開で作成されるポッドやサービスを確認。
>kubectl get pods
NAME READY STATUS RESTARTS AGE
app1-xcpv4 2/2 Running 0 17m
appproxy-225bf 2/2 Running 2 5h11m
compute-0-0 3/3 Running 3 5h11m
control-5fpdx 3/3 Running 3 5h26m
conaktroldb-0 2/2 Running 2 5h26m
...
>kubectl get svc app-add-app-v1
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
app-add-app-v1 ClusterIP 10.0.19.82 <none> 8080/TCP 18m
>kubectl get replicasets app1 -n mssql-cluster
NAME DESIRED CURRENT READY AGE
app1 1 1 1 19m
7. ポッドの詳細を確認。
- mlserver と fluentbit から構成
- アプリは APP_DOWNLOAD_URL から取得
>kubectl describe pod app1-xcpv4 -n mssql-cluster
Name: app1-xcpv4
Namespace: mssql-cluster
...
Controlled By: ReplicaSet/app1
Containers:
mlserver:
Image: mcr.microsoft.com/mssql/bdc/mssql-mlserver-py-runtime:2019-GDR1-ubuntu-16.04
...
Environment:
...
APP_DOWNLOAD_URL: https://nmnode-0-0.nmnode-0-svc:50470/webhdfs/v1/system/appdeploy/app-add-app-v1/app.zip?op=OPEN|
...
fluentbit:
Image: mcr.microsoft.com/mssql/bdc/mssql-monitor-fluentbit:2019-GDR1-ubuntu-16.04
...
Requests:
cpu: 100m
memory: 100Mi
...
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
...
8. ADS から接続して展開されたアプリの zip を確認。
9. azdata で詳細を取得。
>azdata app describe --name add-app --version v1
{
"input_param_defs": [
{
"name": "x",
"type": "int"
},
{
"name": "y",
"type": "int"
}
],
"internal_name": "app1",
"links": {
"app": "https://52.xxx.xxx.xxx:30080/api/v1/app/add-app/v1",
"swagger": "https://52.xxx.xxx.xxx:30080/api/v1/app/add-app/v1/swagger.json"
},
"name": "add-app",
"output_param_defs": [
{
"name": "result",
"type": "int"
}
],
"state": "Ready",
"version": "v1"
}
展開したアプリケーションの利用
次に展開したアプリケーションを使ってみます。
azdata から実行
動作しているかを確認するだけなら、 azdata を使う方法が簡単です。
>azdata app run --name add-app --version v1 --inputs x=1,y=2
{
"changedFiles": [],
"consoleOutput": "",
"errorMessage": "",
"outputFiles": {},
"outputParameters": {
"result": 3
},
"success": true
}
Open API で利用
SQL Server 2019 BDC で公開されている Cluster Management Service でトークンの取得を行い、Application Proxy でアプリを実行できます。すべてのアプリケーションは run メソッドにパラメーターを引き渡して実行します。
1. ブラウザで azdata app describe で取得した swagger エンドポイントのホスト名と IP アドレスを使って https://:/docs/swagger.json へアクセス。認証情報が聞かれるので、クラスタ構築で使ったアカウントを利用。
※証明書が聞かれた場合はキャンセルをすると認証を聞かれる。
2. 取得した json を Swagger Editor に張り付け。
3. token メソッドがあるので、Postman で token に Post 要求を実行。access_token を取得。
4. 取得したアクセストークンを使って、https://:30778/api/app/add-app/v1/run を実行。本文に入力パラメーターを指定。
Visual Studio Code (VSC) の利用
拡張機能を利用して VSC からも操作が可能です。
参照: Visual Studio Code を使用して SQL Server ビッグ データ クラスターにアプリケーションを展開する方法
拡張機能のインストール
1. 「アプリ展開の拡張機能](https://aka.ms/app-deploy-vscode) より最新の拡張をダウンロード。
2. VSC の 拡張機能より 「...」 をクリックして、「VSIX からのインストール」を選択。
3. ダウンロードした拡張機能を選択してインストール。完了すると拡張一覧に表示される。
BDC へ接続
1. 左ペインに表示される「SQL Server BDC App Explorer」をクリックして、「DEPLOYED APPS」より「Connect to Cluster」をクリック。
3. Host に Cluster Management Service エンドポイントのアドレスをポート付きで指定。
4. ユーザー名とパスワードを入力して、接続完了を確認。展開済のアプリが表示される。
アプリの作成と展開
VSC からアプリの作成と展開ができます。
2. ウィザードに従って、アプリ名、言語をそれぞれ、「Multiplypy」、「Python」を選択。
3. フォルダを指定する画面が出るので、任意のディレクトリを指定。ファイルが展開されることを確認。
4. VSC で作成されたフォルダを開き、hello.py を multiply.py にリネーム。以下コードを張り付け。
def multiply(x, y):
result = x*y
return result
result=multiply(x,y)
5. spec.yaml を以下に差し替え。
#spec.yaml
name: multiply-app
version: v1
runtime: Python
src: ./multiply.py
entrypoint: multiply
replicas: 1
poolsize: 1
inputs:
x: int
y: int
output:
result: int
6. spec.yaml 内に表示されている「Deploy App」リンクをクリック。
アプリのテスト実行
テンプレートで同時に作成された run-spec.yaml を使って実行できます。
1. run-spec.yaml を以下コードに差し替え。
name: multiply-app
version: v1
inputs:
x: 5
y: 10
アプリの情報確認
VSC では Swagger やアプリの情報も簡単に表示できます。
アプリの削除
不要になったアプリは azdata や VSC から削除します。
azdata app delete -n add-app -v v1
まとめ
アプリケーションによって SQL Server 2019 BDC の機能を容易に拡張できます。また外部からアクセスする REST エンドポイントを提供できるため、システム統合に非常に便利です。Python 以外にも多くのアプリケーションをサポートしているため、是非色々試してください。