[データ駆動型社会を支える「データスペース」の実像─ハンズオンで理解するその価値と可能性]
CADDEを動かしてデータスペースを体験しよう[前編]:第5回
2024年10月2日(水)松永 惟月(東京大学大学院 情報学環・学際情報学府 修士課程)
ビジネスの高度化はもちろん、社会運営にとってもデータ活用の重要性は論を俟たない。一方で、データがサイロ化しシステムや組織内で留まっていては、その真価は発揮されない。データを十全に生かすには、信頼性を担保しながら組織や国境を越えて共有・連携するためのプラットフォーム、すなわち「データスペース」が必要となる。今回から2回にわたり、分散連邦型データ基盤「CADDE(ジャッデ)」を実際に動かす方法を解説する。ハンズオン形式を通じて、データスペースの仕組みや価値をより具体的に理解することを目指す。前編となる今回は、CADDEの環境構築の手順を紹介する。
本連載はこれまでの回で、近年国際的に注目を集める「データスペース」に関する取り組みや、東京大学データスペース技術国際テストベッドの活動、そして日本国内で開発された分散連邦型データ基盤「CADDE(ジャッデ)」について紹介してきました。
今回は、第4回で紹介したCADDE環境を実際に構築するための、具体的な手順を解説します。日本国内では、データスペースの具体的な実装に焦点を当てた技術記事はまだ多くありません。本連載がその先駆けとして、データスペースの実践的な理解を促進する一助となることを目指します。
最少のCADDE環境でデータスペースの仕組みを理解する
本稿の目標は、CADDEコネクタをインストールし、最小構成のCADDE環境を構築することです(図1)。
拡大画像表示
ここでは、最小構成のCADDE環境として、「データ提供者環境」および「データ利用者環境」を、以下のアプリケーションから構成します。各アプリケーションはDockerコンテナを用いて構築します。
①データ提供者環境
・提供者コネクタ
・提供者カタログサイト
・データサーバー
②データ利用者環境
・利用者コネクタ
本記事で構築するCADDE環境には、認証・認可機能や横断検索機能など、データ共有の信頼性やデータ主権を保証するためのCADDE支援サービスは含まれません。しかし、まずはこの最小限の構成を通じて、「データ利用者がコネクタを介してデータカタログを検索し、データ提供者からデータを取得する」という基本的なデータ連携の手順を体験することで、より高度なデータ連携の仕組みであるデータスペース技術の理解が深まることと思います。
なお、本稿で解説するCADDEの動作は、以下の要件を満たすマシンで検証しています。ただし、CADDE環境を構成するアプリケーションはすべてDockerコンテナで動作するため、macOSやWindowsでも再現可能と考えられます。
・OS:Ubuntu 22.04
・CPU:2コア以上
・メモリ:4GB以上
・ディスク:40GB以上
また、以下のコマンドおよびソフトウェアが利用可能であることも前提とします。
・Docker(v20.10.1以降)
・Git
まずは作業用ディレクトリを作成し、これ以降は環境変数${WORKDIR}
で参照するようにします。
mkdir ~/cadde_handson
cd ~/cadde_handson
export WORKDIR=$PWD
データ提供者環境の構築
まずはデータ提供者の立場に立って、以下3つのアプリケーションを構築していきます。
①データサーバー
②提供者カタログサイト
③提供者コネクタ
①データサーバー
データ提供者は、CADDE上で共有するデータを、自身が管理するデータサーバーに配置しておきます。CADDEにおけるデータ共有では、HTTP、FTP、NGSIの3つのプロトコルがサポートされています。したがって、データ提供者環境のデータサーバーは、これらのいずれかのプロトコルに対応している必要があります。
本稿では、データ提供者が構築したHTTPサーバーにデータを配置する方法を説明します。なお、HTTPでアクセス可能なクラウドストレージにデータを配置することも可能ですが、ここではデータ提供者のみがアクセスできる非公開のデータサーバーを構築することで、コネクタを介したデータ共有のメリットを体験していただくことを目指します。
まず、データサーバー用のディレクトリと、データを配置するためのディレクトリをそれぞれ作成します。
mkdir ${WORKDIR}/private-http-server
mkdir ${WORKDIR}/private-http-server/data
次に、HTTPサーバーをDockerコンテナで立ち上げるためにcompose.yml
を作成します。
cd ${WORKDIR}/private-http-server
vim compose.yml
services:
nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./data:/usr/share/nginx/html
最後に、HTTPサーバーを8080番ポートで起動させることができれば完了です。
cd ${WORKDIR}/private-http-server
docker compose up -d
②提供者カタログサイト
CADDEにおけるデータ提供者は、「CKAN」というオープンソースのデータ管理システムを使って、提供データのメタデータを管理・公開するためのカタログサイトを構築します。
まず、CKANサイトをDockerで構築するためのセットアップ用リポジトリをGitHubからクローンします。
cd ${WORKDIR}
git clone https://github.com/ckan/ckan-docker.git
次に、設定例ファイル.env.example
をコピーし、.env
ファイルを作成します。このファイルでは、CKANサイトの設定に必要な環境変数を指定します。具体的には、CKANサイトにアクセスするためのURL(CKAN_SITE_URL)や、開発モードでサイトを立ち上げるための設定(CKAN__DATAPUSHER__CALLBACK_URL_BASE、DATAPUSHER_REWRITE_URL)を行います。
cd ${WORKDIR}/ckan-docker
cp .env.example .env
vim .env
# CKAN core
- CKAN_SITE_URL=https://localhost:8443
+ CKAN_SITE_URL=http://localhost:5000
# Datapusher
- CKAN__DATAPUSHER__CALLBACK_URL_BASE=http://ckan:5000
+ CKAN__DATAPUSHER__CALLBACK_URL_BASE=http://ckan-dev:5000
...
- DATAPUSHER_REWRITE_URL=http://ckan:5000
+ DATAPUSHER_REWRITE_URL=http://ckan-dev:5000
最後に、CKANサイトを構成する6つのコンテナを起動します。
cd ${WORKDIR}/ckan-docker
docker compose -f docker-compose.dev.yml build
docker compose -f docker-compose.dev.yml up -d
コンテナが正しく起動すれば、構築した提供者カタログサイトに5000番ポートを通じてアクセスできます(図2、例:http://localhost:5000/)。
拡大画像表示
③提供者コネクタ
提供者コネクタは、データカタログの検索やデータ取得を行うためのAPIを公開し、リクエストに応じて提供者カタログサイト上のデータカタログやデータサーバー上のデータを取得して返送するアプリケーションです。CADDEコネクタの実装はMITライセンスの下でGitHub上に公開されています。
まずはリポジトリをクローンし、初期セットアップを行います。なお、このリポジトリには提供者コネクタと利用者コネクタの両方のソースコードが含まれていますが、提供者コネクタはconnector/src/provider
に配置されています。
cd ${WORKDIR}
git clone https://github.com/CADDE-sip/connector.git
cd connector/src/provider
sh setup.sh
次に、提供者コネクタが提供者カタログサイト上のデータカタログを取得できるように、コネクタ内部にカタログサイトのURLを設定します。設定の詳細については、CADDEコネクタのドキュメントを参照してください。
ここでは、提供者カタログサイトを5000番ポートで起動しているため、ローカルホストのIPアドレスを指定します。なお、ループバックアドレスやlocalhostを使用すると、提供者コネクタを起動するコンテナ自体を指してしまうことに注意が必要です。ローカルホストのIPアドレスは、Linuxであればip a
などのコマンドから確認できます。
vim connector-main/swagger_server/configs/provider_ckan.json
{
"release_ckan_url" : "http://<ローカルホストのIPアドレス>:5000",
"detail_ckan_url" : "http://<ローカルホストのIPアドレス>:5000",
"authorization" : false,
"packages_search_for_data_exchange" : false
}
続いて、提供者コネクタがデータサーバーにアクセスできるように設定を行います。ここでは、データサーバーに独自のドメインを割り当て、提供者コネクタのみがそのドメイン名を解決できるように設定します。これにより、データサーバーが外部から擬似的に非公開となり、コネクタを介してのみデータ共有が可能になります(図3)。
この設定により、データ利用者がデータを取得する際には必ず提供者コネクタを通過する必要が生じます。データ共有の信頼性や相互運用性を確保する上で、コネクタが重要な役割を果たすことが理解しやすくなるでしょう。
拡大画像表示
具体的には、提供者コネクタのコンテナ内でデータサーバーの独自ドメインを解決できるように設定します。ここでは、データサーバーのドメイン名をcadde-data-management.internal
と設定します。
vim ${WORKDIR}/connector/src/provider/docker-compose_noproxy.yml
services:
provider-connector-main:
...
environment:
- "LC_CTYPE=C.UTF-8"
+ extra_hosts:
+ - "cadde-data-management.internal:host-gateway"
最後に、提供者コネクタを構成する5つのコンテナを起動します。
cd ${WORKDIR}/connector/src/provider
docker compose -f docker-compose_noproxy.yml up -d
図4は提供者コネクタの内部構成です。通常では、リバースプロキシのコンテナも含まれますが、ここでは説明を簡略化するため省略しています。デフォルトの設定では、提供者コネクタのデータカタログ検索用インタフェースが28080番ポート、データ取得用インタフェースが38080番ポートで公開されます。
拡大画像表示
●Next:データを検索・取得するための利用者環境の構築方法
会員登録(無料)が必要です
- 1
- 2
- 次へ >
- 日本で開発されたデータスペース構築用システム「CADDE」を使ってみよう:第4回(2024/09/25)
- いますぐデータスペースを試してみよう─東京大学データスペース技術国際テストベッド:第3回(2024/09/18)
- 次代を担うデータ基盤「データスペース」とそのテクノロジー[後編]:第2回(2024/09/11)
- 次代を担うデータ基盤「データスペース」とそのテクノロジー[前編]:第1回(2024/08/28)