Glueの開発にSageMaker使っていたのですが、いくつか自分の使い方では問題があったので自分で立ててみたら簡単でした。
SageMakerはネットワークが特徴的
SageMakerは色々なネットワーク設定があるのですが、VPCと一緒にインターネット出さないで使うとなると、少し面倒です。
いつもは便利なPre-Signed URLも現時点(2019/01/31)では無効化することはできないとサポートから回答もらいました。IAMで制限したりと方法はありますが、それにしても外からアクセスができてしまうのは嫌な場合があります。
このあたりをしっかり理解した上で、
このスライド読めばセキュリティのコントロールはできます。
現場によっては単純にEC2の方が良かったりもします。 ではEC2で使えるZeppelinは?となりますが、これはどうしても使い慣れたJupyer使いたい。
ということで、SageMakerを内部からアクセスする方法模索していたら自分でEC2立ててしまうこともできることに気付きました。
これでEC2ベースで作られたポリシーの現場でも、Glueの開発環境が構築できます。
構成
エンドポイント経由でLivyに接続できるので、そこを使います。
JupyterとSparkMagicインストール
早速環境構築から。
こちらの記事でLinuxの時のは書いたので、今度はWindows 2019で。
Livy+SparkmagicでWSL上のSparkをWindows側のJupyter notebookから使う - YOMON8.NET
① Anacondaインストール
ここからダウンロードしてクリックするだけ。
② (Anaconda Prompt) widgetsnbextension有効化
> jupyter nbextension enable --py --sys-prefix widgetsnbextension
③ (Anaconda Prompt) SparkMagicインストール
> pip install sparkmagic
④ (Anaconda Prompt) Glueの開発で利用するカーネルをインストール
> jupyter kernelspec install C:\Anaconda3\Lib\site-packages\sparkmagic\kernels\pysparkkernel
GlueのエンドポイントにSSHトンネル構築
公開鍵の登録
事前に利用する鍵の公開鍵側を開発エンドポイントに登録しておきます。
新規にエンドポイント作成する時に指定することもできますし、作成後に「アクション」>「SSHキーのローテーション」のメニューからも登録することができます。
SSHコマンドでトンネル構築
トンネルを 8998
番ポートに向けて掘ります。左側のリスニングポートは何でもいいですが、特になければ同じ 8998
で良いと思います。
> ssh -i .ssh/id_rsa -vnNT -L :8998:169.254.76.1:8998 glue@ip-x-x-x-x.ap-northeast-1.compute.internal
トンネル実行できたら、curlコマンドで確認してみます。
> curl http://localhost:8998/sessions {"from":0,"total":0,"sessions":[]}
Glue上のSparkを実行してみる
問題無く動いています。EC2上で大きな処理が流れるわけではないので、小さめのマシンでも開発用途には十分です。
構成は自由自在
SSHトンネルを実行しているマシンと、Jupyterを実行するマシンは分けることも可能です。
その場合はJupyter実行するマシンでSparkMagicの宛先を設定する必要があります。
設定ファイルは.sparkmagicのフォルダに置きます。
%USERPROFILE%\.sparkmagic\config.json
~\.sparkmagic\config.json
例えば 10.1.0.1
のサーバーでこんなトンネルをほっていたとしたら、
ssh -i .ssh/id_rsa -vnNT -L :7777:169.254.76.1:8998 glue@ip-x-x-x-x.ap-northeast-1.compute.internal
こうやって設定入れます。
{ "kernel_python_credentials" : { "username": "", "password": "", "url": "http://10.1.0.1:7777", "auth": "None" } }