---
title: "ステップ 2: データサービスを準備する"
description: OpenLM Platform 用に 4 つの SQL Server データベースを作成し、クラスターから MongoDB、Kafka、Redis に到達できることを確認します。
product: OpenLM Platform
---

インストールがデータサービスに依存する**前に**、SQL データベースを作成し、Pod からすべてのデータサービスに到達できることを確認します。OpenLM Platform は、すべてのデータを、お客様が用意する 4 つのサービスに保存します。

このページのコマンドは、[インストールワークシート](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/before-you-start/worksheet) から作成したファイル `openlm-install.env` から変数を読み込みます。

```bash
source ./openlm-install.env
```

## 2.1 4 つの SQL Server データベースを作成する

OpenLM Platform は、次の 4 つの SQL Server データベースを使用します。

| データベース | 既定のプレフィックスでの名前 | 格納するデータ | テーブルを作成するもの |
|---|---|---|---|
| ID | `openlm_identity` | ユーザー、サインインクライアント、トークン | ID サービス（初回起動時） |
| 運用 | `openlm_operational_none` | ライセンス、サーバー、使用状況などの主要データ | 各サービス（初回起動時） |
| レポート | `openlm_reporting` | レポートと Power BI 用に準備されたデータ | テーブルはデータ処理ジョブ、ビューは [レポートスクリプト](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/install/step-8-first-sign-in#83-レポート用ビューをインストールする) |
| DSS | `openlm_dss` | ディレクトリ同期 | DSS サービス（初回起動時） |

:::note[なぜ「_none」なのか]
運用データベースの名前は、プレフィックスとテナント名から作られます。セルフホストのインストールにはテナントが 1 つだけあり、その名前は `none` です。そのため、名前は `_none` で終わります。このサフィックスを省略しないでください。
:::

管理者としてサインインしてデータベースを作成します。`CREATE DATABASE` ステートメントは、SQL Server Management Studio (SSMS) などの SQL Server クライアントで実行するか、次のように `sqlcmd` で実行します。

```bash
for db in identity operational_none reporting dss; do
  sqlcmd -S "$SQL_HOST,$SQL_PORT" -U "<admin-login>" -C -Q "CREATE DATABASE [${DB_PREFIX}_${db}]"
done
```

次に、アプリケーション用のログイン（`$SQL_USER`）を作成し、4 つのデータベースすべての所有権を付与します。SQL Server では、`master` でログインを一度だけ作成します。

```sql
CREATE LOGIN [openlm_app] WITH PASSWORD = '<your SQL_PASSWORD>';   -- your SQL_USER
```

次に、`<db>` をデータベース名に置き換えて、データベースごとに一度ずつ次を実行します。

```sql
USE [<db>];
CREATE USER [openlm_app] FOR LOGIN [openlm_app];   -- your SQL_USER
ALTER ROLE db_owner ADD MEMBER [openlm_app];
```

**Azure SQL Database** と **Amazon RDS** では、代わりにクラウドコンソールまたは `master` データベースからデータベースを作成し、同じ方法で `db_owner` を付与します。詳細はご利用の [プラットフォームのページ](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/platforms/index) に記載されています。

:::tip[SQL の確認]
クラスター内部から、アプリケーション用のログインで次を実行します。

```bash
kubectl -n "$NS" run sqltest --rm -it --restart=Never \
  --image=mcr.microsoft.com/mssql/server:2022-latest -- \
  /opt/mssql-tools18/bin/sqlcmd -S "$SQL_HOST,$SQL_PORT" -U "$SQL_USER" -P "$SQL_PASSWORD" -C \
  -Q "SELECT name FROM sys.databases WHERE name LIKE '${DB_PREFIX}_%'"
```

4 つのデータベースがすべて一覧に表示される必要があります。イメージが大きい（約 1.5 GB）ため、初回は起動まで数分かかることがあります。`Login failed` は、ユーザーまたはパスワードの誤りを示します。`timeout` は、クラスターと SQL Server の間のネットワークがブロックされていることを示します。[ネットワーク](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/concepts/networking#データサービス) を参照してください。

Pod が `ImagePullBackOff` のままの場合、クラスターはそのレジストリからプルできません。イメージをミラーするか、データベースに到達できる任意のマシンから同じコマンドを実行してください。
:::

## 2.2 MongoDB

MongoDB では何も作成する必要はありません。各サービスが初回起動時に自身のデータベースを作成します。`MONGO_URI` のユーザーには、そのための権限（`readWriteAnyDatabase` と `dbAdminAnyDatabase`、または `root`）が必要です。

接続文字列については、次の 2 つのルールに従ってください。

- **末尾に `/` を付けない**: `mongodb://u:p@host:27017` は正しい形式です。`mongodb://u:p@host:27017/` では、一部のサービスが警告なしに動作しなくなります。
- **パスワード内の特殊文字**: `@ : / ? # %` は URL エンコードします。例: `@` は `%40` になります。

:::tip[MongoDB の確認]
```bash
kubectl -n "$NS" run mongotest --rm -it --restart=Never \
  --image=public.ecr.aws/docker/library/mongo:7.0 -- \
  mongosh "$MONGO_URI" --quiet --eval "db.adminCommand({listDatabases:1}).ok"
```

`1` と表示される必要があります。
:::

## 2.3 Kafka

Kafka では何も作成する必要はありません。インストール中に、OpenLM Platform が約 130 個のトピックを自ら作成するため、Kafka ユーザーにはトピックを作成する権限が必要です。ブローカーの `auto.create.topics.enable` の設定は必要ありません。

次の Kafka の設定を確認します。

- 平文のリスナー（ポート 9092）が標準の構成です。Kafka が TLS または SASL のリスナーのみを提供している場合は、インストール前に OpenLM にお知らせください。
- **シングルブローカー**の Kafka では、既定のレプリケーション係数と `offsets.topic.replication.factor` を `1` に設定してください。設定しないと、コンシューマーグループが起動しません。
- ブローカーのメッセージ保持期間を 14 日に設定します: `log.retention.hours=336`。このリリースでは、OpenLM Platform がインストールとアップグレードのたびに一部のトピックに独自の保持期間を設定し、ブローカーの設定はこれらのトピックには適用されません。データパイプラインのトピック `broker-messages` と `incoming-brokers-messages` を含む 22 個のトピックに、3 日とパーティションあたり 1 GiB が設定されます。
- ブートストラップアドレスは、Pod から到達できる**アドバタイズされた**アドレスである必要があります。`localhost` や別のネットワークのプライベート IP をアドバタイズするブローカーでは、最初の接続は成功しますが、その後失敗します。

:::tip[Kafka の確認]
```bash
kubectl -n "$NS" run kafkatest --rm -it --restart=Never \
  --image=apache/kafka:3.7.0 -- \
  /opt/kafka/bin/kafka-topics.sh --bootstrap-server "$KAFKA_BOOTSTRAP" --list
```

エラーなしで完了する必要があります。一覧が空でも問題ありません。応答が止まった後にタイムアウトする場合は、アドバタイズされたアドレスに Pod から到達できません。

Pod が `ImagePullBackOff` のままの場合、クラスターはそのレジストリからプルできません。イメージをミラーするか、Kafka に到達できる任意のマシンから同じコマンドを実行してください。
:::

## 2.4 Redis

Redis では何も作成する必要はありません。OpenLM Platform と API ゲートウェイは、異なるキーで 1 つの Redis を共有します。

:::tip[Redis の確認]
```bash
kubectl -n "$NS" run redistest --rm -it --restart=Never \
  --image=public.ecr.aws/docker/library/redis:7.2-alpine -- \
  sh -c "redis-cli -h $REDIS_HOST -p $REDIS_PORT -a '$REDIS_PASSWORD' $( [ "$REDIS_TLS" = true ] && echo --tls ) PING"
```

`PONG` と表示される必要があります。
:::

:::tip[確認]
このステップの 4 つの確認がすべて合格しています。SQL Server は 4 つのデータベースを一覧表示し、MongoDB は `1` を表示し、Kafka はエラーなしでトピックを一覧表示し、Redis は `PONG` を表示します。
:::
