この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
どーもsutoです。
登録したデータに対し、「Google検索」のようにデータの検索ができるLyft社製のOSSデータカタログAmundsenというデータ検出およびメタデータエンジンがあります。
前回の記事ではAmundsenにRedshiftテーブルをロードしてみました。
今回はEC2上にセットアップしたAmundsenに、Glue内のテーブルメタデータを読み込んでみました。
AmundsenをEC2にセットアップ
※セットアップは上記Redshift記事と同じ手順ですので、既にAmundsenを起動している場合はスキップしてください。
本記事ではAmazon Linux2にAmundsenをセットアップしていきます。
以下の参考記事ではローカルPC(Mac)の手順やUbuntu on EC2でAthenaテーブルを読み込む手順がありますので参考に。
まずはEC2インスタンスを作成します。作成するインスタンスは主に以下のようなパラメータで作成しました。
- インスタンスタイプ:
t3.medium
- EBS ボリューム:
20GB
- パブリックIP:有効化
- セキュリティグループ(SG):5000番を許可
- IAMロール:以下のポリシー内容のIAMロールを作成してアタッチします
AmazonSSMManagedInstanceCore
(セッションマネージャ用)AWSGlueConsoleFullAccess
AmazonS3FullAccess
Glueテーブルは同AWSアカウントに既存で作成されているものを使用しています。
インスタンスが起動完了したらセッションマネージャでログインします。
sh-4.2$ sudo su - ec2-user
Last login: Fri Sep 10 01:02:29 UTC 2021 on pts/0
[ec2-user@ip-x-x-x-x ~]$
まずはAmundsenの要件で必要なパッケージをインストールしていきます。
sudo yum -y update
sudo yum install git
sudo yum install python3
echo 'alias python=python3.7' >> ~/.bashrc
source ~/.bashrc
python -V
# Version3.7になることを確認
curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -
sudo yum install --enablerepo=nodesource nodejs
node -v
# Version12になることを確認
次にDocker-composeをインストールします。
sudo amazon-linux-extras install -y docker
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -a -G docker ec2-user
sudo curl -L https://github.com/docker/compose/releases/download/1.28.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo gpasswd -a $USER docker
docker-compose --version
# バージョンが表示されることを確認
ここでインスタンスを再起動を行い、Docker-composeをインストール完了です。
再びログイン後、Elasticsearchのメモリ上限を上げておきます。
sudo vi /etc/sysctl.conf
# vm.max_map_count=262144に変更して保存
sudo sysctl -p
/sbin/sysctl -a
# 変更されていることを確認
git cloneでAmundsenをインストールしてビルド、起動します。
git clone --recursive https://github.com/amundsen-io/amundsen.git
cd amundsen
docker-compose -f docker-amundsen.yml up -d
# docker-compose -f docker-amundsen.yml logs -f)ログ記録
これで初期設定は完了です。ブラウザでhttp://<EC2のパブリックIP>:5000
にアクセスしAmundsenのWeb画面が表示されることを確認しておきます。
Glueの読み込み
仮想環境を立ち上げ、GlueデータロードのPythonスクリプト実行に必要なモジュールをインストールします。その後setup.py
を実行します。
cd ~/amundsen/databuilder
python3 -m venv venv
source venv/bin/activate
# (venv) $ (ここからvenv環境下で実行します)
pip3 install --upgrade pip
pip3 install -r requirements.txt
pip install boto3
python3 setup.py install
※boto3で認証情報を渡すので、aws condfigure
などでCredentialsを設定しておきます。
スクリプトを実行することで、対象アカウント内のGlueデータカタログを全て取得することができます。
python3 example/scripts/sample_glue_loader.py
検索していて気づいたのですが、上の画面のようにハイフン(-)やアンダーバー(_)で区切られているところまで入力すればテーブル名の一部でも検索結果に出てくれました。
【参考】指定したGlueテーブル名のみを取得する場合
特定のテーブルのみを取得するようにFilterをかけることができます。
実行スクリプトであるsample_postgres_loader.py
を以下のように編集します。
vi example/scripts/sample_glue_loader.py
def create_glue_extractor_job(filter_key: []):
# ~~省略~~
'extractor.glue.{}'.format(GlueExtractor.FILTER_KEY): filter_key,
# ~~省略~~
if __name__ == "__main__":
filter = [{
'Key': 'Name',
'Value': '<既存のglueテーブル名>',
}] # glueのaccountsでfilter
glue_job = create_glue_extractor_job(filter)
glue_job.launch()
es_job = create_es_publisher_job()
es_job.launch()
スクリプトを実行すると、スクリプトに記述したテーブルのみを取得することができます。