メモ
CKAN公式サイト によると、CKANはデータマネジメントシステムである。 CKAN公式サイト の内容をもとに進める。
このメモの時点では、CKAN 2.9.5を対象とする。
なお、公式ドキュメントによると
CKAN is a tool for making open data websites.
とされており、 あくまで「オープンデータ向け」であることが伺える。
ドキュメントより
特徴
CKANの特徴 の通り、以下のような特徴を有している。
- CKAN APIを提供
- バックエンドのデータストア(アドホックなデータ置き場)
- データソースかデータがpullされ、ストアされる
- Data Explorer拡張を利用することでデータのプレビューが可能になる
- 検索、更新などをデータ全てをダウンロード・アップロードせずにできる ★要確認
- DataPusher
機能と一緒に使われることが多い
- データソースから表形式のデータを取得し、DataStore APIを用いてCKANにデータ登録する仕組み
- 拡張機能
- 地理空間機能
- メタデータ
- データ管理のためのUI
- キーワード検索
- テーマ設定
- 可視化
- フェデレーション
- ファイルストア
データのモデル
Users, organizations and authorization に記載の通り、基本的にはOrganizationに紐づけてDatasetが登録される。 Datasetは任意のフォーマットでよい。CKANにアップロードしてもよいし、単純にURLを登録してもよい。 デフォルトの挙動では、登録されたDatasetはPrivate扱いになり、所有するOrganizationに所属するユーザのみ見られる。
Adding a new dataset にある通り、Datasetを登録できる。 なお、Licenseに並んでいる項目を見ると、やはりオープンデータとの相性がよさそう、と感じる。
DataStoreとDataPusher
DataStore Extension に記載の通り、 DataStore拡張機能を利用すると、Data Explorer拡張機能と併用することで自動的にプレビュー可能になる。 またDataStore APIを利用し、データ本体を丸ごとダウンロードすることなく、検索、フィルタ、更新できる。
自動的にデータを取り込むData Pusher拡張機能と併用されることが多い。
DataPusher の通り、データを取り出し自動的にCKANに登録できる。 ただし、注意書きにある通り、制約があるので注意。
Data Dictionary の通り、DataStoreのスキーマ情報はデータ辞書で管理できる。
Downloading Resources の通り、表形式のデータをCSVやエクセルで読み込める形式でダウンロードできる。
DataStore APIを利用すると、DataStoreリソースを検索したり、インクリメンタルにデータを追加できる。 バリデーションの機能もあるようだ。
APIについては、 API reference に記載されている。
DataStoreの拡張
Extending DataStore に記載の通り、独自のDataStoreを利用可能。 正確には、実装可能。
DatastoreBackend がベースクラスである。
バックグラウンドジョブ
Background jobs の通り、メインのアプリケーションをブロックせずに処理を実行できる。
Dockerで動作確認
セットアップ
Installing CKAN with Docker Compose を参考に、Docker Composeを利用して簡易的に動作確認する。 事前に、DockerとDocker Composeを導入しておくこと。
また、 オープンソースのデータ管理システム「CKAN」を試してみた が分かりやすかったのでおすすめ。
ソースコードをダウンロード。 ここではステーブルバージョンを利用することにした。
1 | mkdir -p ~/Sources |
設定ファイルのコピー 適宜パスワードを変更するなど。 環境によっては、サイトURLを変更するのを忘れずに。
1 | cp contrib/docker/.env.template contrib/docker/.env |
ビルドと起動
1 | cd contrib/docker |
後の作業のため、ストレージを変数化(しなくても、作業はできる。ボリュームのパスを覚えておけばよい) (公式サイト手順の「Convenience: paths to named volumes」に記載あり)
1 | export VOL_CKAN_HOME=$(docker volume inspect docker_ckan_home | jq -r -c '.[] | .Mountpoint') |
Datastoreとdatapusherを機能させるため、いくつか設定する。 まずはデータベースの設定。
1 | docker exec ckan /usr/local/bin/ckan -c /etc/ckan/production.ini datastore set-permissions | docker exec -i db psql -U ckan |
プラグインなどの設定
1 | sudo vim $VOL_CKAN_CONFIG/production.ini |
なお変更点は以下の通り。
1 | $ sudo diff -u $VOL_CKAN_CONFIG/production.ini{.org,} |
↑の変更点を説明する。
まず、今回はVM上のDockerで起動したので、SSHトンネル経由でのアクセスで困らないように開発環境ホスト名を
localhost から変更した。
また、Datastore機能、Datapusher機能を利用するためにプラグインを追加。
Datapusherのフォーマットを有効化(コメントアウトを解除)
コンテナを再起動。
1 | docker-compose restart |
公式サイトに記載の通り、APIに試しにアクセスるとレスポンスがあるはず。
1 | curl 'http://localhost:5000/api/3/action/datastore_search?resource_id=_table_metadata' |
アドミンユーザ作成。
1 | docker exec -it ckan /usr/local/bin/ckan -c /etc/ckan/production.ini sysadmin add johndoe |
http://<サイトのURL>/ckan にアクセスすれば、ウェブUIが確認できる。 先に設定した、アドミンユーザでとりあえずログインする。
データストアとしてMinIO環境を整える
MinIOのDocker を参考に、Dockerでサーバを立ち上げる。
1 | docker run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001" |
http://<立ち上げたインスタンス>:9000 でMinIOのウェブコンソールにアクセスできる。 特に設定していなければ、ID:minioadmin、パスワード:minioadminである。
別のコンソールで mcクライアントを立ち上げる。
1 | docker run --name my-mc --hostname my-mc -it --entrypoint /bin/bash --rm minio/mc |
エイリアスを設定し、バケットを作成する。 (URLは、MinIO起動時にコンソールに表示されるAPI用のURLを利用すること)
1 | mc alias set myminio http://172.17.0.2:9000 minioadmin minioadmin |
ファイルを作成し、MinIOにアップロード(コピー)する。
1 | echo "hoge" > /tmp/hoge.txt |
AWS CLIでアクセスする
AWS
CLI v2 Docker image を利用してAWS CLIを起動し、MinIOにアクセスする。
なお、コンテナで起動するのでそのままではホスト側の ~/.aws
にアクセスできない。そこで -v
オプションを利用しマウントしてから configure するようにしている。
また、S3プロトコルでアクセスする際には、今回は手元のMinIO環境を利用するため、エンドポイントを指定していることに注意。
1 | docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli configure --profile myminio |
無事にS3プロトコルでアクセスできたことが確かめられた。
CKANのUIで操作
組織の作成
データセット作成
先ほどのS3プロトコルURL( s3://mybucket/hoge.txt
)を登録する。
(補足)初期化
何らかの理由でDockerの環境をまっさらに戻したいことがあるかもしれない。 その場合は以下の通り。
1 | docker-compose down |
(補足)FIWAREのCKANは拡張済?
FIWAREのCKAN
の説明を見ると、Dataset登録時に Searchable
のような項目がある。公式2.9.5で試したときにはなかった。 他にも
Additional Info という項目があり、そこには
OAuth-Token という項目もあった。
このように、特にアクセス管理や認証認可の機能が拡張されているのか、と思った。
インストール(パッケージ)
Ubuntu18環境にCKANをインストールする。 基本的には、 Installing CKAN from package に従う。
参考
CKAN
- CKAN公式サイト
- CKANの特徴
- 公式ドキュメント
- Installing CKAN with Docker Compose
- オープンソースのデータ管理システム「CKAN」を試してみた
- FIWAREのCKAN
- Users, organizations and authorization
- Adding a new dataset
- DataPusher
- Data Dictionary
- Downloading Resources
- API reference
- Extending DataStore
- DatastoreBackend
- Background jobs
- background-job-queues