OMOP Odyssey - BroadSea(セイレーン編)
.png)
BroadSea - InterSystems OMOP を使用したコア OHDSI のウォークスルー
.png)
DatabaseConnector が InterSystems IRIS をサポートするようになったため、これまでの旅は、ヘルスケアデータからの大規模な分析から価値を引き出すことを目的とした強力なオープンソースアプリの OHDSI エコシステムへとつながりました。良い出発点となるのは、Atlas、R、Hades などのコア OHDSI テクノロジーをローカルまたは選択した専用インスタンスで使用できるようにする OHDSI/Broadsea ソリューションです。ここでは、Broadsea ソリューションと InterSystems OMOP Cloud Service と連携させるようにする方法を説明します。OHDSI/Croadsea リポジトリでこの手順を実行できることは、OHDSI ツールに `iris` ダイアレクトを含めるという前進の証明となります。
ISC(https://github.com/isc-krakshith/InterSystems-Broadsea)ではこれをよりシームレスにするための取り組みが行われていますが、焦りと体験版の失効が近づいていることを考慮すれば、このウォークスルーでも同じ結果にたどり着けます。
クローン
まず、github.com/OHDSI/Broadsea リポジトリをローカルにクローンして、要件を確認しましょう。
git clone https://github.com/OHDSI/Broadsea.git
cd Broadseaℹ Windows ユーザーへの注意事項
Broadsea のコンテナーには、secrets ファイルの CTRL 文字に関する問題があります。この問題を緩和するために、クローンの後に、以下を行ってください。
git add --renormalize . git config --global core.autocrlf false dos2unix secrets/webapi/
変更
リポジトリはカスタマイズ性に非常に優れていますが、要点に到達するまでに、回避しなければならないことがいくつかありました(私はせっかちなんです)。
`.env` ファイルでは、WebAPI に新しい IRIS を含められるように GitHub の最新ビルドを使用する必要があります。それを行うには、次の環境変数をここに示すとおりに変更します。
- WEBAPI_GITHUB_URL="https://github.com/OHDSI/WebAPI.git#rc-2.13.0"
+ WEBAPI_GITHUB_URL="https://github.com/OHDSI/WebAPI.git"次に、リポジトリ内の compose/ohdsi-webapi.yml に注目し、いくつか変更を加える必要があります。
以下のように、JAVA_OPTS にクラスパスとSSLConfig.properties を追加してSpring の環境変数を追加します。
environment:
+ JAVA_OPTS: "-Dcom.intersystems.SSLConfigFile=/tmp/SSLConfig.properties"
CLASSPATH: ":/var/lib/ohdsi/webapi/lib/additional/broadsea_mounted.jar"
DATASOURCE_DRIVERCLASSNAME: org.postgresql.Driver
DATASOURCE_URL: ${WEBAPI_DATASOURCE_URL}また、コンテナーを特権に設定し、read_only を false にして、設定後の作業を少し楽にしました。
InterSystems JDBC ドライバーの取得
webapi プロファイルには、リポジトリ内の `jdbc/none.jar` にサードパーティドライバーをダウンロードして組み込むためのメカニズムが組み込まれています。そこで、リポジトリのルートから次のコマンドを実行して、Maven から最新の iris ドライバーを取得します。この、@Stefan Wittmann のちょっとしたハリー・ポッターの魔法を使えば、いつでも最新バージョンを得ることができます。
cat << 'EOF' > pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.sandbox</groupId>
<artifactId>pull-artifacts</artifactId>
<version>1</version>
<dependencies>
<dependency>
<groupId>com.intersystems</groupId>
<artifactId>intersystems-jdbc</artifactId>
<version>[3.10.3,4.0.0)</version>
</dependency>
</dependencies>
</project>
EOF
mvn dependency:copy-dependencies -DoutputDirectory=.
cp intersystems-jdbc-3.10.3.jar jdbc/none.jarプロビジョニング
次の Docker Compose プロファイル文字列を使用すると、Broadsea をプロビジョニングできます。ここで注意しておくことは、ohdsi/webapi コンテナーが 1 年以内にビルドされたものではなく、IRIS の優れた機能が組み込まれていないため、`webapi-from-git` プロファイルを使用していることです。
BroadSea を起動するために、リポジトリで次の Compose プロファイルを実行します。
docker-compose --env-file .env --profile webapi-from-git --profile content --profile hades --profile atlasdb --profile atlas-from-image up -d休憩
一休みして、コンテナーにソリューションを考えてもらいましょう。
.png)
では、traefik ルーターを通じて localhost に移動すると、BroadSear Application 起動ポータルが表示されます。
.png)
次に、IRIS を Hades と Atlas の中に置いて、OHDSI 軍団に加わりましょう。
構成後
BroadSea が起動して実行しているので、InterSystems OMOP Cloud サービスへの接続を追加して起動しましょう。実行する内容とその作用をわかりやすく説明するために、この作業を分割して、最後のティザーに構成後のスクリプトを含めます。
InterSystems OMOP デプロイメントから詳細を取得し、それらを変数として設定します。これにはエンドポイント URL、ユーザー/パスワード、説明、証明書が含まれます。
export IRIS_USER="SQLAdmin"export IRIS_PASS="REDACTED"export IRIS_JDBC="jdbc:IRIS://k8s-0a6bc2ca-a2668ebb-2be01ed66b-df29055c4af0630d.elb.us-east-2.amazonaws.com:443/USER/:::true"export IRIS_DESCRIPTION="InterSystems OMOP Stage"
cat << 'EOF' > certificateSQLaaS.pem
-----BEGIN CERTIFICATE-----
HBLABLAHBLAHBLA
-----END CERTIFICATE-----
EOF
次のブロックは、Altas で使用できるようにソースを AtlasDB に追加します。
cat << EOF > 200_populate_iris_source_daimon.sql
INSERT INTO webapi.source( source_id, source_name, source_key, source_connection, source_dialect, username, password)
VALUES (2, '$IRIS_DESCRIPTION', 'IRIS', '$IRIS_JDBC', 'iris', '$IRIS_USER', '$IRIS_PASS');
INSERT INTO webapi.source_daimon( source_daimon_id, source_id, daimon_type, table_qualifier, priority) VALUES (4, 2, 0, 'OMOPCDM54', 0);
INSERT INTO webapi.source_daimon( source_daimon_id, source_id, daimon_type, table_qualifier, priority) VALUES (5, 2, 1, 'OMOPCDM54', 10);
INSERT INTO webapi.source_daimon( source_daimon_id, source_id, daimon_type, table_qualifier, priority) VALUES (6, 2, 2, 'OMOPCDM54_RESULTS', 0);
EOF
docker cp 200_populate_iris_source_daimon.sql broadsea-atlasdb:/docker-entrypoint-initdb.d/200_populate_iris_source_daimon.sql
docker-compose exec broadsea-atlasdb psql -U postgres -f "/docker-entrypoint-initdb.d/200_populate_iris_source_daimon.sql"
次のステップでは、Hades に証明書を追加し、適切な SSLConfig.properties に着地するようにします。
docker cp certificateSQLaaS.pem broadsea-hades:/home/ohdsi/
docker cp SSLConfigHades.properties broadsea-hades:/home/ohdsi/SSLConfig.properties
docker-compose exec broadsea-hades bash -c "/usr/bin/keytool -importcert -file /home/ohdsi/certificateSQLaaS.pem -keystore /home/ohdsi/keystore.jks -alias IRIScert -storepass changeit -noprompt"
InterSystems OMOP デプロイメントへの TLS 接続用に Web API を構成する手順に進み、次のコマンドを実行してキーストアを生成し、WebAPI コンテナーでリフレッシュ API を実行してソースをアクティブ化します。
docker exec ohdsi-webapi bash -c "keytool -importcert -file /tmp/certificateSQLaaS.pem -alias IRIScert2 -keystore /tmp/keystore.jks -storepass changeit -noprompt"
wget http://127.0.0.1/WebAPI/source/refresh/おそらく、最も侵襲的な構成後の手順は、コンテナー内に 2 つの TLS/SSL 依存関係ファイルを作成することです。前の手順には SSLProperties.config が必要であり、証明書も `/tmp` フォルダーに手動で貼り付ける必要があります。
docker exec --user root -it ohdsi-webapi bash
cat > /tmp/certificateSQLaaS.pem
-----BEGIN CERTIFICATE-----
HBLABLAHBLAHBLA
-----END CERTIFICATE-----
<CTRL-D>
cat > /tmp/SSLConfig.properties
trustStore=/tmp/keystore.jks
trustStorePassword=changeit
<CTRL-D>
このコンテナーで `docker cp` またはボリュームマウントを動作させることができた方は、お知らせください。
最後に、ドライバーを Hades に追加し、http://127.0.0.1/hades で Hades に移動して RStudio で更新を実行します。
.png)
これによってシステムのファンが稼働し、多少時間がかかりますがすべて完了すると、RStudio を使って Hades 内の DatabaseConnector パッケージからドライバーを取得できるでしょう。
library(DatabaseConnector)
downloadJdbcDrivers("iris", pathToDriver = Sys.getenv("DATABASECONNECTOR_JAR_FOLDER"), method = "auto").png)
👣🔫 IRIS ドライバーの取得に OHDSI ツールを使用し、WebAPI については Compose サービスを使用して手動でアップロードし、Hades を通じて DatabaseConnector パッケージを使用したことに気付くでしょう。 これはこれらのコンポーネントのバージョンによって異なる可能性があります。 同期を維持する場合は、ドライバーの OHDSI DatabaseConnector ツールの使用を省略して、代わりに cp して一致するようにすることができます。
docker cp intersystems-jdbc-3.10.3.jar broadsea-hades:/opt/hades/jdbc_drivers/
スモーク
Hades
Hades が InterSystems OMOP デプロイメントに接続できるかを確認してみましょう。
cd <- DatabaseConnector::createConnectionDetails(dbms = "iris", connectionString = "jdbc:IRIS://k8s-0a6bc2ca-adb040ad-c7bf2ee7c6-e6b05ee242f76bf2.elb.us-east-1.amazonaws.com:443/USER/:::true", user = "SQLAdmin", port = "443", password = "REDACTED", pathToDriver = "./jars")
conn <- connect(cd)
querySql(conn, "SELECT TOP 3 * FROM OMOPCDM54.care_site").png)
うまくいきました。
Atlas
次に、Atlas に進み、http://127.0.0.1 で InterSystems OMOP デプロイメントに繋がるかを確認します。
すぐに構成セクションに移動し、語彙とレコード件数をデフォルトに設定します。
.png)
次に、プロファイルセクションで「InterSystems OMOP Stage」オプションを選択し、既知の医療従事者 ID を選択します。
.png)
うまくいきました。
検索画面に移り、医療に関する内容を検索します。ここでは、「lung(肺)」について InterSystems OMOP デプロイメントを検索しています。
.png)
うまくいきました。
export IRIS_USER="SQLAdmin"export IRIS_PASS="REDACTED"export IRIS_JDBC="jdbc:IRIS://k8s-0a6bc2ca-a2668ebb-2be01ed66b-df29055c4af0630d.elb.us-east-2.amazonaws.com:443/USER/:::true"export IRIS_DESCRIPTION="InterSystems OMOP Stage"
cat << 'EOF' > certificateSQLaaS.pem
-----BEGIN CERTIFICATE-----
HBLABLAHBLAHBLA
-----END CERTIFICATE-----
EOF
cat << EOF > 200_populate_iris_source_daimon.sql
INSERT INTO webapi.source( source_id, source_name, source_key, source_connection, source_dialect, username, password)
VALUES (2, '$IRIS_DESCRIPTION', 'IRIS', '$IRIS_JDBC', 'iris', '$IRIS_USER', '$IRIS_PASS');
INSERT INTO webapi.source_daimon( source_daimon_id, source_id, daimon_type, table_qualifier, priority) VALUES (4, 2, 0, 'OMOPCDM54', 0);
INSERT INTO webapi.source_daimon( source_daimon_id, source_id, daimon_type, table_qualifier, priority) VALUES (5, 2, 1, 'OMOPCDM54', 10);
INSERT INTO webapi.source_daimon( source_daimon_id, source_id, daimon_type, table_qualifier, priority) VALUES (6, 2, 2, 'OMOPCDM54_RESULTS', 0);
EOF
docker cp 200_populate_iris_source_daimon.sql broadsea-atlasdb:/docker-entrypoint-initdb.d/200_populate_iris_source_daimon.sql
docker-compose exec broadsea-atlasdb psql -U postgres -f "/docker-entrypoint-initdb.d/200_populate_iris_source_daimon.sql"
docker cp certificateSQLaaS.pem broadsea-hades:/home/ohdsi/
docker cp SSLConfigHades.properties broadsea-hades:/home/ohdsi/SSLConfig.properties
docker-compose exec broadsea-hades bash -c "/usr/bin/keytool -importcert -file /home/ohdsi/certificateSQLaaS.pem -keystore /home/ohdsi/keystore.jks -alias IRIScert -storepass changeit -noprompt"
docker exec ohdsi-webapi bash -c "keytool -importcert -file /tmp/certificateSQLaaS.pem -alias IRIScert2 -keystore /tmp/keystore.jks -storepass changeit -noprompt"
wget http://127.0.0.1/WebAPI/source/refresh/
BroadSea 対 InterSystems OMOP サーバーおよび OHDSI コミュニティへようこそ!