FHIR サーバのインストールと構成
管理ポータルには、新しい FHIR サーバをインストールし、構成することができる [サーバ構成] ページが用意されています。または、プログラムによってサーバをインストールおよび構成することができます。
FHIR サーバは Foundation ネームスペースにインストールする必要があります。複数の FHIR サーバを同一の Foundation ネームスペースにインストールすることができます。
FHIR サーバをインストールする前に、カスタマイズを今するのか、後でするのかを検討する必要があります。多くの場合、エンドポイントを作成する前に InteractionsStrategy のサブクラスを作成しない限り、リソース・リポジトリを使用する FHIR サーバはカスタマイズできません。例えば、バンドルの処理方法の変更や検索結果の後処理を実行するには、リソース・リポジトリのサブクラスを作成する必要があります。FHIR サーバをインストールする前にこのようなカスタマイズを準備する方法の詳細は、"インストール前のサブクラスの作成" を参照してください。
新しい FHIR サーバを管理ポータルからインストールするには、以下の手順を実行します。
-
管理ポータルを開き、FHIR サーバをインストールする Foundation ネームスペースに切り替えます。Foundation ネームスペースがない場合は、開始する前にまず Foundation ネームスペースの作成手順に従って Foundation ネームスペースを作成し、有効にします。
-
[Health]→[MyNamespace]→[FHIR 構成] に移動します。[FHIR 構成] メニューが表示されない場合は、Foundation ネームスペースを使用していることを確認します。
-
[サーバ構成] カードを選択します。
-
[エンドポイント] ペインで、[エンドポイントの追加] をクリックし、新しい FHIR エンドポイントを作成します。
-
コア FHIR パッケージを選択します。各パッケージは、エンドポイントでサポートしている HL7® FHIR® 標準のバージョンに対応しています。したがって、例えば、FHIR R5 をサポートする FHIR エンドポイントを構成するには、hl7.fhir.r5.core@5.0.0 パッケージを選択します。
-
選択したコア FHIR パッケージに応じて自動生成されたエンドポイント URL を確認します。エンドポイントの URL は変更できますが、必ずスラッシュ (/) で始めてください。
-
エンドポイントで追加のパッケージをサポートする場合は、[追加パッケージ] ドロップダウン・リストから選択します。パッケージの詳細は、"FHIR のプロファイルと適応" を参照してください。
-
エンドポイントの InteractionsStrategy を選択します。既定の相互作用ストラテジは、リソース・リポジトリ (HS.FHIRServer.Storage.JsonAdvSQL.InteractionsStrategy) です。これにより、FHIR データはダイナミック・オブジェクトに JSON データとして格納されます。カスタムの InteractionsStrategy を作成した場合は、リストからそれを選択します。
-
既定では、ネームスペース内の各エンドポイントのデータは 2 つの別個のデータベースに格納されます。別個のデータベースを維持したくない場合は、[FHIR リソース・ストレージに別個のデータベースを使用する] フィールドのチェックを外します。この場合、すべての FHIR データはネームスペースの共通のデータベース・ファイルに格納されます。別個のデータベースを使用する場合は、既定の場所を受け入れることも、独自に場所を指定することもできます。リソース履歴データベースには、以前のバージョンのリソースが含まれています。これらは頻繁にアクセスされないため、このデータベースをより低速で安価なディスクに置くことができます。
-
[追加] を選択します。
コマンド行インタフェースを使用して FHIR サーバをインストールする場合は、"コマンド行オプション" を参照してください。
FHIR サーバの構成
FHIR サーバをインストールしたら、管理ポータルの [サーバ構成] ページを使用して、その設定を構成できます。これらの構成設定は、サーバの ConfigData オブジェクトのプロパティを設定することで、プログラムによって変更することもできます。
FHIR サーバを構成するには、以下の手順に従います。
-
[Health]→[MyNamespace]→[FHIR 構成] に移動します。FHIR サーバのネームスペースにいることを確認します。
-
[サーバ構成] カードを選択します。
-
構成する FHIR サーバのエンドポイントを選択します。
-
ページが展開されたら、下方にスクロールして [編集] ボタンを選択します。
-
以下の説明をガイドとして、設定を構成します。
設定 | 説明 |
---|---|
有効 | エンドポイントを有効にするかどうかを指定します。無効になっているエンドポイントは、FHIR クライアントからの要求を拒否します。 |
検索ページの既定のサイズ | 検索に _count パラメータが含まれない場合に使用する検索結果ページのサイズ。 |
検索ページの最大サイズ | 過剰なユーザ指定ページ・サイズを防止するための検索結果ページの最大サイズ。 |
検索結果の最大数 | サーバがクエリにエラーで応答するまでの、1 つの検索で選択できるリソースの最大数。この数値には、実際の検索で選択されるリソースのみが含まれます。_include 検索パラメータで組み入れられるリソースは含まれません。この値は、検索で返されるページのサイズには影響しません。大量のリソースを選択する過剰に広範な検索は、実行するのに大量のシステム・リソースを必要とし、多くの場合、クライアントが実際に必要とするよりも広範になります。 |
条件付き削除結果の最大数 | 条件付き削除で削除できるリソースの最大数。条件付き削除検索でこの数を超えるリソースが見つかった場合、条件付き削除全体が「HTTP 412 前提条件が失敗しました」のエラーで拒否されます。 |
FHIR セッション・タイムアウト | サービスへの要求からセッション・データが古いと見なされるまでの最大秒数。 |
既定の推奨処理 | 検索条件に不明なパラメータが含まれる場合の既定の処理を指定します。不明なパラメータを無視し、OperationOutcome リソースによって問題が特定されたバンドルを返すには、lenient を指定します。検索要求を拒否してエラーを返すには、strict を指定します。Prefer ヘッダOpens in a new tabが含まれる FHIR 検索要求では、この既定値は上書きされます。 |
OAuth クライアント名 | 必要に応じて、OAuth リソース・サーバとして、FHIR サーバが OAuth 2.0 承認サーバへのアクセスに使用するアプリケーション名を指定します。OAuth 2.0 のサポートの詳細は、"OAuth 2.0 承認" を参照してください。 |
必須のリソース | InterSystems セキュリティ・リソースを指定する場合、FHIR クライアントは、サーバ上で相互作用を実行するため、リソースに対する特権を持っている必要があります。詳細は、"承認要件の追加" を参照してください。 |
サービス構成名 | FHIR サーバに到達する前に相互運用プロダクション経由で FHIR 要求をルーティングするには、要求を受信するビジネス・サービスのパッケージと名前を入力します。ビジネス・サービスにカスタム名がない場合は、このエントリは HS.FHIRServer.Interop.Service になります。詳細は、"相互運用プロダクション" を参照してください。 |
認証なしアクセスを許可 | 認証と承認のストラテジを無視して、すべての FHIR 要求がサーバに届くようにすることができます。 |
新しいサービス・インスタンス | すべての FHIR 要求について、新しいサービス・オブジェクトをインスタンス化します。 |
トレースバックを含む | FHIR サーバは、OperationOutcome リソースでスタック・トレースを送信することによって、FHIR 要求に応答します。 |
SMART on FHIR 機能 | エンドポイントの SMART on FHIR 機能のコンマ区切りリスト。このリストは、エンドポイントの機能を制御するものではありません。クライアントがエンドポイントの URL に /.well-known/smart-configuration を追加したときに JSON ドキュメントで返される機能を指定するものです。既知の URI で取得した FHIR 機能での SMART の詳細は、"FHIR Authorization Endpoint and Capabilities Discovery using a Well-Known Uniform Resource Identifiers (URIs)Opens in a new tab" を参照してください。 |
コマンド行インタフェースを使用して FHIR サーバを構成する場合は、"コマンド行オプション" を参照してください。
10,000 以上のエントリを含むバンドルをポストすることが予想される場合は、サーバ・タイムアウトによるデータ・ロードの中断を回避するために、Web ゲートウェイの [サーバ応答タイムアウト] パラメータの値を大きくする必要があります。
FHIR エンドポイントの削除
既定では、管理ポータルを使用して FHIR サーバ・エンドポイントを削除すると、そのエンドポイントに関連付けられている FHIR データも削除されます。ただし、エンドポイントを削除しても、そのすべての FHIR データは保持したい場合は、コマンド行インタフェースを使用して、エンドポイントを削除するのではなくデコミッションします。コマンド行インタフェースを使用したエンドポイントのデコミッションの詳細は、"コマンド行オプション" を参照してください。
エンドポイントを削除するには、以下の手順を実行します。
-
[Health]→[MyNamespace]→[FHIR 構成] に移動します。FHIR サーバのネームスペースにいることを確認します。
-
[サーバ構成] カードを選択します。
-
削除するエンドポイントを選択します。
-
[ごみ箱] アイコンを選択します。
プログラムによるインストール
管理ポータルを使用する代わりにプログラムによって FHIR サーバをインストールする必要があるアプリケーションでは、最初にサーバをインストールしたうえで、構成を行う必要があります。
FHIR サーバは Foundation ネームスペースで実行する必要があるため、Foundation ネームスペースを作成することが FHIR サーバをインストールするための前提条件です。Foundation ネームスペースを作成したら、HS.FHIRServer.InstallerOpens in a new tab の以下のメソッドを順番に呼び出す必要があります。
HS.FHIRServer.Installer メソッド | 説明 |
---|---|
InstallNamespace()Opens in a new tab | FHIR サーバ用の既存の Foundation ネームスペースを準備します。新しい Foundation ネームスペースは作成しません。引数なしで呼び出すと、インストーラは、アクティブなネームスペースを Foundation ネームスペースであると見なし、これを FHIR サーバ用に準備します。 |
InstallInstance()Opens in a new tab | FHIR サービスのインスタンスを現在のネームスペースにインストールします。このメソッドには、以下の引数が必要です。
|
pPackageList パラメータ
InstallInstance()Opens in a new tab メソッドの pPackageList パラメータは、システムにロードされた FHIR パッケージのリストを受け入れます。多くの場合、パッケージは特定の実装ガイドに相当しますが、あるバージョンの FHIR のコア・メタデータである場合もあります。パッケージのリストを InstallInstance に渡すことにより、1 つ以上のパッケージをサポートするようエンドポイントを構成できます。パッケージの詳細は、"FHIR のプロファイルと適応" を参照してください。
pPackageList パラメータに渡すことができるパッケージのリストを取得するには、HS.FHIRMeta.Storage.Package.GetAllPackages()Opens in a new tab メソッドを使用します。例えば、以下のコードは、使用可能なパッケージの識別子を表示します。
set packages = ##class(HS.FHIRMeta.Storage.Package).GetAllPackages()
for i=1:1:packages.Count()
{ write packages.GetAt(i).id,! }
結果は以下のようになります。
hl7.fhir.r5.core@5.0.0
hl7.fhir.r4.core@4.0.1
hl7.fhir.us.core@3.1.0
hl7.fhir.r3.core@3.0.2
次に、$lb を使用して、これらのパッケージの識別子の一部を引数として pPackageList パラメータに渡すことができます。以下に例を示します。
Do ##class(HS.FHIRServer.Installer).InstallInstance(
myURL,
strategyClass,
$lb("hl7.fhir.r5.core@5.0.0"))
FHIR パッケージの作成に使用する API の詳細は、"パッケージ API" を参照してください。
プログラムによるインストールの例
以下の ObjectScript コードの例では、2 つのパッケージをサポートし、既定のストレージ・ストラテジ (リソース・リポジトリ) を使用する FHIR サーバをインストールします。
Set appKey = "/myfhirserver/fhir/r5"
Set strategyClass = "HS.FHIRServer.Storage.JsonAdvSQL.InteractionsStrategy"
Set metadataPackages = $lb("hl7.fhir.r5.core@5.0.0")
//Install a Foundation namespace and change to it
Do ##class(HS.Util.Installer.Foundation).Install("FHIRNamespace")
Set $namespace = "FHIRNamespace"
// Install elements that are required for a FHIR-enabled namespace
Do ##class(HS.FHIRServer.Installer).InstallNamespace()
// Install an instance of a FHIR Service into the current namespace
Do ##class(HS.FHIRServer.Installer).InstallInstance(appKey, strategyClass, metadataPackages)
プログラムによる構成
FHIR サーバをインストールしたら、HS.FHIRServer.Installer.UpdateInstance()Opens in a new tab メソッドを使用してプログラムによって構成できます。このメソッドは、サーバを構成する引数を複数受け入れます。その中には、サーバの HS.FHIRServer.API.ConfigDataOpens in a new tab オブジェクトを受け入れる引数もあり、ここにはサーバのほとんどの構成オプションが含まれます。これらの構成オプションのリストは、クラス・リファレンスOpens in a new tabを参照してください。ConfigData オブジェクトで定義するオプション以外に、サーバのいくつかの設定 ([サービス構成名]、[OAuth クライアント名]、および [有効]) も、UpdateInstance() メソッドの専用のパラメータを使用して指定します。
以下のコードは、UpdateInstance() メソッドを使用して既存の FHIR サーバを構成します。
Set appKey = "/fhirendpoint/r5"
//Get and modify FHIR server's configuration object
Set strategy = ##class(HS.FHIRServer.API.InteractionsStrategy).GetStrategyForEndpoint(appKey)
Set configData = strategy.GetServiceConfigData()
Set configData.DefaultPreferHandling = "strict"
Set configData.DebugMode = 1
//stringify configData before updating FHIR Server
Set jsonConfigData = configData.AsJSONString()
// Define additional settings
Set enabled = 1
Set serviceConfigName = "HS.InteropPackage.myBusinessService"
Set oAuthClient = "OAuthClientName"
// Update FHIR Server
Do ##class(HS.FHIRServer.Installer).UpdateInstance(appKey, jsonConfigData, enabled, serviceConfigName, oAuthClient)
リポジトリ内のコードに作用するすべての InterSystems IRIS API と同様に、HS.FHIRServer.Installer.UpdateInstance()Opens in a new tab は構成アクティビティが同時に行われないようにリポジトリをロックし、構成が完了するまでロックを保持します。InterSystems IRIS API 以外のメソッドを使用して FHIR サーバで構成タスクを実行する前に、HS.FHIRServer.RepoOpens in a new tab クラスの Lock() メソッドを ##class(HS.FHIRServer.Repo).Lock() のように実行して、リポジトリを明示的にロックします。InterSystems IRIS メソッドを完全にオーバーライドする場合は、競合を回避するために、必ず Lock() メソッドを使用してください。
コマンド行オプション
管理ポータルよりもコマンド行インタフェースを好む開発者は、InterSystems ターミナルのコンソール設定を使用して、ユーザ・インタフェースで使用可能なアクションと同じアクションを数多く実行できます。コンソール設定を実行するには、InterSystems ターミナルを開いて以下を実行します。
do ##class(HS.FHIRServer.ConsoleSetup).Setup()
後続のセクションでは、コンソール設定で使用可能な各オプションについて説明します。
新しい FHIR サーバ・エンドポイントをインストールします。以下のプロンプトが表示されます。
-
Choose the Storage Strategy — Json がリソース・リポジトリです。
-
Choose the FHIR version for this endpoint — エンドポイントでサポートしているコア FHIR 仕様のバージョンを選択します。
-
Enter any package numbers — インポートされたパッケージが候補として表示されます。エンドポイントは複数のパッケージをサポートできます。複数のパッケージを指定するには、数字をコンマで区切って指定します。パッケージは後から追加できますが、待機する場合には、追加の手順を実行する必要がある場合があります。Upload a FHIR Metadata Package オプションを使用して、パッケージをリストに追加します。
-
Do you want to create the default repository endpoint — エンドポイントの既定の URL を受け入れる場合は、Enter キーを押します。エンドポイントに異なる URL を指定する場合は、N と指定し、URL を入力します (URL は必ずスラッシュ (/) で始めてください)。
-
Enter the OAuth Client Name for this Endpoint — OAuth 2.0 を使用してエンドポイントを保護する場合は、FHIR サーバのクライアント名を入力します。詳細は、"OAuth 2.0 承認" を参照してください。
-
Do you want to create separate database files for your FHIR data? — yes を指定すると、エンドポイントの FHIR データは、同じネームスペース内のその他のエンドポイントの FHIR データとは別に格納されます。no を指定すると、複数のエンドポイントがある場合でも、すべての FHIR データがネームスペースのデータベース・ファイルに格納されます。個別のデータベース・ファイルを作成している場合は、既定の場所を受け入れることも、別の場所を指定することもできます。バージョン・データベースには、リソースの以前のバージョンが含まれています。これらは頻繁にアクセスされないため、バージョン・データベースをより低速で安価なディスクに置くことができます。
FHIR パッケージを既存のエンドポイントに追加して、パッケージのプロファイル、検索パラメータ、およびその他の Conformance リソースをサポートできるようにします。このオプションを使用する前に、Conformance リソースを含む FHIR パッケージ (NPM のようなパッケージ) をアップロードしておく必要があります。Upload a FHIR Metadata Package オプションを使用して、FHIR パッケージをインポートできます。US Core Implementation Guide などの一部の共通パッケージは、既に利用できます。
パッケージに新しい検索パラメータが含まれている場合は、完了時に、Index new SearchParameters for an Endpoint オプションを実行する必要があります。
FHIR サーバの現在の構成オプションを表示します。これらの構成オプションを変更するには、Configure a FHIRServer Endpoint オプションを使用します。
各構成オプションに値を指定することにより、FHIR サーバのエンドポイントを構成できます。各構成項目の詳細は、"FHIR サーバの構成" を参照してください。
FHIR サーバ・エンドポイントは削除されますが、エンドポイントが収集した FHIR データは保持されます。FHIR データを含む SQL テーブルが保持されます。エンドポイントおよびすべての FHIR データを削除する場合は、Delete a FHIRServer Endpoint オプションを使用します。
FHIR サーバ・エンドポイントを削除し、かつエンドポイントの FHIR データを削除します。エンドポイントを削除するものの、エンドポイントが収集した FHIR データは保持する場合は、Decommission a FHIRServer Endpoint オプションを使用します。
FHIR サーバの機能宣言書を更新します。詳細は、"機能宣言書の変更" を参照してください。
公開またはカスタムのパッケージを使用して、新しい検索パラメータを既存のエンドポイントに追加する場合、FHIR クライアントは、パッケージの適用後に、新しいパラメータを使用して、リポジトリに追加されたリソースを取得できます。ただし、新しい検索パラメータを追加する前に存在していたリソースは、エンドポイントのインデックスを再作成するまで、返されません。エンドポイントが大量の FHIR データを収集していた場合、このオプションは既存のすべてのリソースを再処理するため、実行に長い時間がかかる可能性があります。
Conformance リソースを定義する JSON ファイルの FHIR パッケージのインポートに使用します。このオプションは、パッケージをエンドポイントに適用する前に使用しておく必要があります。カスタム FHIR パッケージのアップロード準備の詳細は、"カスタム・パッケージの作成" を参照してください。
エンドポイントに適用可能なパッケージのリストからパッケージを削除します。これにより、FHIR パッケージの JSON ファイルがローカル・システムから削除されることはありません。エンドポイントに適用されているパッケージは削除できません。
プロファイル検証サーバの構成
FHIR エンドポイントを作成すると、プロファイル検証に関連するバックエンド機能を実行する FHIR_Validation_Server という外部サーバが作成されます。このサーバは、Java 11 開発キットを必要とします。JAVA_HOME 環境変数が Java 11 ディレクトリを指していない場合は、以下のように管理ポータルを使用できます。
-
必要に応じて、サポートされている Java 11 JDK をインストールOpens in a new tabします。インストールされたディレクトリを書き留めます。
-
管理ポータルで、[システム管理]→[構成]→[接続性]→[外部言語サーバ] に移動します。
-
FHIR_Validation_Server が実行中の場合は [停止] をクリックします。
-
[FHIR_Validation_Server] をクリックして編集モードに入ります。
-
[外部言語サーバを編集] ページの [Javaホームディレクトリ] フィールドOpens in a new tabに、Java 11 ディレクトリへのパスを入力します。
-
[保存] をクリックします。
-
[開始] をクリックして FHIR_Validation_Server を再起動します。
-
以前にインポートしたプロファイル (自動的にインストールされたものも含む) に関連する検証オペレーションを実行する際、良好なパフォーマンスを確保するために、ターミナル・アプリケーションで FHIR 対応ネームスペースに切り替えてOpens in a new tab、以下のコマンドを実行します。
do ##class(HS.FHIRServer.Installer).InitializeProfileValidator()
FHIR_Validation_Server を有効にするために JAVA_HOME 環境変数を直接設定しないでください。JAVA_HOME の以前の値に依存する他のアプリケーションやプロセスに影響を与える可能性があります。
検索パフォーマンスの最適化
リソース・リポジトリを使用または拡張する FHIR サーバの場合、そのエンドポイントに生成された SQL Search テーブルに対してテーブル・チューニング・ユーティリティを実行することで、search 相互作用の応答のパフォーマンスを最適化できます。既定では、これらのテーブルの名前は HSFHIR で始まります。これらのテーブルに、カスタムの選択性の値を手動で設定することもできます。
リソース・リポジトリを使用または拡張する新たな FHIR サーバをインストールすると、要素のデータ型に基づいて、既定の選択性の値セットが検索可能な要素に割り当てられます。これらの既定の選択性の値により、サーバは検索要求に応えてリソースを取得する際に、より効率的なクエリ・プランを選択できます。最も選択の幅の広いクエリ・パラメータから始めて想定される結果を選択することで、後続の各選択操作で評価する必要のあるリソースの数を最小限に抑えることができます。
例えば、以下の検索要求を考えてみます。
GET [base]/Patient?family=halifax&gender=male
リソース・リポジトリにおいて、Halifax という姓の患者は、男性の患者よりも少ないと考えられます。そのため、まず Halifax という姓の患者を検索するのがおそらく最も効率的です。その後に男性患者を検索する操作では、Halifax という姓の小さい患者のサブセットを検索すれば済むからです。
2023.1 より前のバージョンからこのバージョンにアップグレードし、既存の FHIR サーバを使用している場合は、SetDefaultSearchTableSelectivities()Opens in a new tab メソッドを使用することで、検索操作にこれらの既定の選択性の値を設定できます。ターミナルでこのメソッドを呼び出して、以下の例のように、FHIR エンドポイントの相対パスを指定します。
do ##class(HS.FHIRServer.Storage.SearchTableBuilder).SetDefaultSearchTableSelectivities("/csp/healthshare/hsods/fhir/r5")
ただし、既存のほとんどの FHIR サーバにとって、テーブル・チューニングで生成される選択性の値の方が、このメソッドで設定される既定の選択性の値よりも役立ちます。