> For the complete documentation index, see [llms.txt](https://open-dataspaces.gitbook.io/ods-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://open-dataspaces.gitbook.io/ods-docs/jp/developer-guide/04-deployment-and-configuration-data.md).

# 第4章 システム構築・運用構築手順（Data as a Product編）

本章では、ODS SDK for Onboarding（以下SDK）が提供するデプロイ定義ファイルを使って、参加者同士でのデータ交換を実施できる最小構成のシステム構築・運用構築手順を示す。

## システム構築手順（4.1～4.3）

## 4.1 システム構成

本章で構築するシステム構成は図3の通りである。四角形がコンポーネントもしくはサービス、矢印はそれらの間の依存関係を表す。

```mermaid
graph LR
  subgraph a["認証システム"]
    AuthN_DB["認証システム用RDBMS"]
    AuthN_SV["認証システム"]
  end
  subgraph b["認可システム"]
    AuthZ_DB["認可システム用RDBMS"]
    AuthZ_SV["ReBAC認可システム"]
  end
  subgraph d["データスペース基盤"]
    L3["L3: アイデンティティコンポーネント"]
    L2["L2: Web API転送モジュール"]
  end
  IS["データ提供者\nインダストリサービス\n(サンプル)"]

  AuthN_SV -- "格納データ参照・更新" --> AuthN_DB
  AuthZ_SV -- "格納データ参照・更新" --> AuthZ_DB
  L3 -- "認証要求" --> AuthN_SV
  L3 -- "認可要求" --> AuthZ_SV
  L2 -- "認証トークン検証要求" --> L3
  L2 -- "認可要求" --> AuthZ_SV
  L2 -- "リクエスト転送" --> IS
```

**図 3　SDKが提供するシステム構成**

なお、本SDKではRDBMSとしてPostgreSQL、認証システムとしてKeycloak、ReBAC認可システムとしてOpenFGAを用いる。 また以降では、アイデンティティコンポーネント・Web API転送モジュールを、それぞれ単にL3・L2と呼称する場合がある。

## 4.2 各コンポーネントの初期設定

SDKでは、各サービス用のデプロイ定義ファイルを集約したファイルを提供しており、これを用いてすべてのサービスを一括で起動・停止することができる。 以下に Docker Compose 版の使用方法を示す。

SDKのリポジトリをローカルに clone する。

```bash
$ git clone https://github.com/open-dataspaces/SDK-docker-compose.git
```

Clone してきたディレクトリ内に移動し、L2、L3、精算・課金／決済サービスのリポジトリを clone する。

```
$ cd SDK-docker-compose
$ git clone --branch=v1.0.0 --depth=1 https://github.com/open-dataspaces/L2-dp-webapi.git
$ git clone --branch=v1.0.0 --depth=1 https://github.com/open-dataspaces/L3-identity-component.git
$ git clone --branch=v1.0.0 --depth=1 https://github.com/open-dataspaces/DCS-Payment.git
```

リポジトリのトップレベルに配置されている docker-compose.yml ファイルを使って Docker Compose を実行し、すべてのサービスを起動する。

```bash
$ docker compose up -d
```

以下のように、すべてのサービスが起動すれば完了である。 コンポーネントを個別に起動・終了する場合の手順は、「5.3 起動・停止」を参照のこと。

```
[+] Running 17/17
 ✔ gateway                      Built                                                            0.0s
 ✔ payment-app                  Built                                                            0.0s
 ✔ l3-app                       Built                                                            0.0s
 ✔ Volume "ods_pgdata"          Created                                                          0.0s
 ✔ Volume "ods_postgres_data"   Created                                                          0.0s
 ✔ Volume "ods_pgdata_openfga"  Created                                                          0.0s
 ✔ Container minio              Started                                                          1.0s
 ✔ Container postgres           Started                                                          1.1s
 ✔ Container fluentd            Started                                                          1.1s
 ✔ Container l3-app             Started                                                          1.0s
 ✔ Container payment-db         Healthy                                                         11.5s
 ✔ Container postgres-openfga   Started                                                          1.0s
 ✔ Container payment-app        Started                                                         12.0s
 ✔ Container keycloak           Started                                                          1.7s
 ✔ Container openfga            Started                                                          1.6s
 ✔ Container ods-minio-init-1   Started                                                          1.4s
 ✔ Container gateway            Started                                                          2.2s
```

続けて、L3とOpenFGA, L2の初期設定を行うが、こちらもSDKが提供するスクリプトを実行すればよい。 詳細は[SDKのドキュメント](https://github.com/open-dataspaces/SDK-docker-compose/blob/main/README.md)を参照のこと。

## 運用構築手順（4.3～4.8）

## 4.3 運用開始に向けた各種データ設定

運用を開始する前に、参加者の事業者情報をL3に登録する必要がある。 詳細は[SDKドキュメントの該当する節](https://github.com/open-dataspaces/SDK-docker-compose?tab=readme-ov-file#%E9%81%8B%E7%94%A8%E9%96%8B%E5%A7%8B%E3%81%AB%E5%90%91%E3%81%91%E3%81%9F%E5%90%84%E7%A8%AE%E3%83%87%E3%83%BC%E3%82%BF%E8%A8%AD%E5%AE%9A)を参照のこと。

## 4.4 コンポーネント間の環境設定

L2がL3と連携できるよう、L2の設定ファイルにL3のURLを設定する必要がある。 詳細は[SDKドキュメントの該当する節](https://github.com/open-dataspaces/SDK-docker-compose?tab=readme-ov-file#%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E9%96%93%E3%81%AE%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A)を参照のこと。

## 4.5 起動・停止

各コンポーネントを個別に起動・停止する手順は以下の通りである。

### L3：アイデンティティコンポーネント

起動

```
$ docker compose -f l3/docker-compose.yml up -d
```

停止

```
$ docker compose -f l3/docker-compose.yml down
```

### ロギングサービス

起動

```
$ docker compose -f logging/docker-compose.yml up -d
```

停止

```
$ docker compose -f logging/docker-compose.yml down
```

### L2：Web API転送モジュール

起動（事前にL3, ロギングの起動が必要）

```
$ docker compose up -d gateway 
```

停止

```
$ docker compose -f l2/docker-compose.yml down
```

### 精算・課金／決済サービス

起動（事前にL3の起動が必要）

```
$ docker compose -f payment/docker-compose.yml up -d
```

停止

```
$ docker compose -f payment/docker-compose.yml down
```

## 4.6 アプリ連携方法

データ提供者は、「4.3 運用開始に向けた各種データ設定」で作成した事業者に対して、インダストリサービスが公開するAPIへの認可設定を実施する必要がある。 詳細は[SDKドキュメントの該当する節](https://github.com/open-dataspaces/SDK-docker-compose?tab=readme-ov-file#%E3%82%A4%E3%83%B3%E3%83%80%E3%82%B9%E3%83%88%E3%83%AA%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E9%80%A3%E6%90%BA%E6%96%B9%E6%B3%95)を参照のこと。

データ利用者は、表2に示すヘッダをHTTPリクエストに設定する必要がある。

**表 2 設定すべきヘッダ情報**

|          ヘッダ名 | 内容                                                   |
| ------------: | ---------------------------------------------------- |
|       API-Key | 本サービスから払い出されたAPIキー                                   |
| Authorization | L3(アイデンティティコンポーネントで発行したアクセストークン (JWT形式))             |
|  X-TrackingId | 来歴管理⽤ログ出⼒項⽬ (UUID形式)                                 |
|     X-ODS-xxx | ロギング対象項目。xxxにはサービス提供者などから指定された文字列を指定（例：X-ODS-UserId） |

## 4.7 データ交換の実行と確認

データ利用者は、以下の手順で提供者からデータの取得を行う。

1. アクセストークンの取得：[L3 参考実装チュートリアル 2-2-1. アクセストークン取得（事業者クライアントID認証）](https://github.com/open-dataspaces/L3-identity-component/blob/v1.0.0/docs/tutorials/tutorials.md#2-2-1-%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8F%96%E5%BE%97%E4%BA%8B%E6%A5%AD%E8%80%85%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88id%E8%AA%8D%E8%A8%BC)を実施し、アクセストークンを取得する。
2. データアクセス：取得したアクセストークンを用いてデータアクセスを実施する。コマンド例を以下に示す。

   ```
   $ curl -X POST "http://localhost:8090/test " \
     -H 'api-key: 2dfd3409-ce01-4451-96fa-7e10c9681422y' \
     -H "Authorization: bearer $ACCESS_TOKEN" \
     -H 'X-ODS-UserId: 112233' \
     -H "Content-Type: application/json" \
     -H "Prefer: return=representation" \
     -d '{"userid":112233}' | jq .
   ```

詳細は[SDKドキュメントの該当する節](https://github.com/open-dataspaces/SDK-docker-compose?tab=readme-ov-file#%E3%83%87%E3%83%BC%E3%82%BF%E4%BA%A4%E6%8F%9B)を参照のこと。

## 4.8 監視（ログ管理）

各コンポーネントが出力するログの種類は以下の通り。

### L2：Web API転送モジュール

L2が出力したログは課金情報の根拠となるため、ロギングサービスによって収集され、ファイルとしてオブジェクトストレージに格納される。 出力先やローテート間隔などの情報は[SDKドキュメントの該当する節](https://github.com/open-dataspaces/SDK-docker-compose?tab=readme-ov-file#%E7%9B%A3%E8%A6%96)を参照のこと。

### L3：アイデンティティコンポーネント

L3は標準出力および標準エラー出力にログを出力する。 コンテナ上で実行している場合、以下のコマンドでログを確認できる。

```
$ docker logs l3-app
```

### 精算・課金／決済サービス

精算・課金／決済サービスは標準出力および標準エラー出力にログを出力する。 コンテナ上で実行している場合、以下のコマンドでログを確認できる。

```
$ docker logs payment-app
```
