DatahubのユーザープロファイルをカスタマイズしたDockerイメージを作ってデプロイしてみる

2021.11.15

どーもsutoです。

LinkedIn製のOSSデータカタログ、DataHubに触れる機会があっていろいろ検証しています。

DataHubってどんな製品?という方は、弊社ブログでご紹介している記事があるのでそちらをご参照いただければと思います。

今回やってみたこと

公式ドキュメントのクイックスタートでは、ローカルPCのDockerコンテナ上でデプロイすることができますが、AWS上でデプロイするための手順もあるようなので今回はそちらを試していきます。

また、Datahubをデプロイする際にユーザプロファイルを変更するなどDockerイメージをカスタマイズしたものからデプロイできるようにしておきたいと考えました。ですので、本記事ではUI画面となる「datahub-frontend」のDockerイメージを更新してECRリポジトリにpushし、それを参照するかたちでDatahubをデプロイします。

作業環境の準備

※作業環境はMacによる手順となります ※Pthon3.6以降の環境、AWS CLIインストールとCredentials,Configをセットアップしておくことが前提です

  • Dockerをbrewでインストール(既にDockerがインストール済の場合はスキップ)
brew install docker
  • Docker Desktopアプリをインストール

  • DatahubCLIをインストール

python3 -m pip install --upgrade pip wheel setuptools
python3 -m pip uninstall datahub acryl-datahub || true  # sanity check - ok if it fails
python3 -m pip install --upgrade acryl-datahub
datahub version

DatahubのDockerイメージをローカルにデプロイし、ユーザプロファイルを編集

まず、変更元となるDockerイメージを取得したいので、手っ取り早くクイックスタートで最新バージョンのDatahubをDockerで起動します。

datahub docker quickstart

このコマンド一発でローカルのDockerコンテナが立ち上がってすぐにDatahubを触れる状態になります。OSSなのに公式がここまでスクリプトを作り込んでくれていることに感動です。実際にhttp://localhost:9002にアクセスしてみると以下のようなTop画面が表示され、デフォルトユーザ(user:datahub,password:datahub)でログインできます。

Docker Desktopでコンテナ一覧を見てみると各種コンポーネントごとにコンテナが立ち上がっています。

Datahubにログインユーザを追加してイメージをCommit

  • Docker Desktopアプリからdatahub-frontend-reactコンテナへsshログイン

  • cliコンソール画面を見るとこんなかんじです

  • user.propファイルを編集してユーザを追加して保存
vi /datahub-frontend/conf/user.props

# 以下のようにユーザを追加して保存

datahub:datahub
user1:userpass # ←このように「ユーザ名:パスワード」と入力


# コンテナからログアウト
exit

Dockerイメージを別名で作成してECRにpush

  • datahub-frontend-reactを別名保存でイメージ更新
docker commit datahub-frontend-react datahub-frontend-react1

docker images
# datahub-frontend-react1があることを確認
  • ECRリポジトリ作成
    • 今回はプライベートリポジトリで作成します。AWSコンソールで作成するか、以下のようにCLIコマンドで作成します
aws ecr create-repository \
    --repository-name <<任意の名前>> \
    --image-scanning-configuration scanOnPush=true \
    --region <<region>>
  • CLIでECRリポジトリにログインし、作成したイメージをpush
aws ecr get-login-password --region <<region>> --profile <<aws-cli profile-name>> | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com

docker tag datahub-frontend-react1:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/<<ECRリポジトリ名>>:latest

docker images
# 「123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/<<ECRリポジトリ名>>」があることを確認

docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/<<ECRリポジトリ名>>:latest

Datahub公式GithubリポジトリのDocker-composeファイルを使ってデプロイ

  • DataHubのリポジトリをダウンロード
git clone https://github.com/linkedin/datahub.git

cd datahub/docker
  • 次にECRにpushしたイメージを使って起動させるため、ここでquickstartで起動していたdatahubを停止しておきます
datahub docker nuke
  • ローカルPC内にDLしてきたDatahubのdocker-compose.ymlを開いてイメージ名を修正して保存
datahub-frontend-react:
    build:
      context: ../
      dockerfile: docker/datahub-frontend/Dockerfile
    image: 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/datahub-frontend-dev:latest
#             ↑ここをECRリポジトリのURIに変更
    env_file: datahub-frontend/env/docker.env
    hostname: datahub-frontend-react
    container_name: linkedin/datahub-frontend-react${DATAHUB_VERSION:-head} 
    ports:
      - "9002:9002"
    depends_on:
      - datahub-gms
  • docker-composeでコンテナを起動してDatahubをデプロイ
docker-compose -p datahub -f docker-compose.yml up -d
  • http://localhost:9002をブラウザで開き、追加したユーザでログインできることを確認

  • ログイン画面が表示されたら、自ら追加したユーザ/パスワードでログインできます。(以下の画面では私の方でユーザ名「user1」を追加してログインした際のキャプチャです)

参考

Datahubでアプリケーションに変更を加えたイメージでデプロイする際は、ECRリポジトリを使用して一部イメージの参照先を変えても問題なくデプロイできました。

Datahubの検証を進めてブログにできそうな部分があったらまた記事を書きたいと思います。