この記事は、Retty Advent Calender 2021 Part1の13日目の記事です。
はじめに
Rettyの広告コンテンツ開発チームで機械学習エンジニアをしている本川です。
私のチームでは、機械学習の実験・開発環境としてAmazon SageMakerを使用しています。 SageMakerのnotebookインスタンスでは、jupyter notebook or jupyter labを使用して開発を行いますが、デバッグなどを行う場合にブラウザ上でのUIのみでは使いにくく感じることもあります。 そこでVSCodeなどで開発を行うために、SageMakerのnotebookインスタンスにssh接続できるようにする方法を紹介します。
方法
SageMakerのnotebookインスタンスでは、EC2インスタンスが立ち上がるので、通常であればそのEC2インスタンスにssh接続をすればOKです。 しかしSageMakerはAWSによるフルマネージドサービスのため、EC2インスタンスのネットワーク設定などを細かく制御は出来ない仕様となっており、パブリックIPアドレスを割り当てることなどができません。
このような場合、何らかのプロキシサーバを用意して、そのプロキシを介してssh接続する必要があります。 そこで今回は(おそらく最も手軽な方法である)ngrokを利用したssh接続方法をとります。
手順
以下に接続手順を示します。
- https://ngrok.com/ でngrokのアカウントを作成する
- https://dashboard.ngrok.com/get-started/setup にアクセスし、authtokenを取得する
- SageMakerのターミナル上で以下の手順でコマンド実行する
$ curl https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip > ngrok.zip $ unzip ngrok.zip $ ./ngrok authenticate [authtoken] $ ./ngrok tcp 22 > ngrok.log &
- ローカルPC上で
ssh-keygen
コマンドでssh鍵のペアを作成する - SageMakerのターミナル上で~/.ssh/authorized_keysに上記で作成した公開鍵を追記する
- https://dashboard.ngrok.com/endpoints/status にアクセスし、PortとHostNameを確認する
ssh -p XXXX -i [ssh_key_path] ec2-user@0.tcp.ngrok.io
で以下のような画面が出れば成功 (XXXX
と0.tcp.ngrok.io
の部分を https://dashboard.ngrok.com/endpoints/status で確認する)
おわりに
ここまで読んでいただきありがとうございます。
今回はngrokを利用したSageMakerのnotebookインスタンスへのssh接続方法を紹介しました。 この方法は簡単ですが、細かいアクセス制御などは出来ないためセキュリティ的な観点で問題があります。 これを解消するためには、EC2インスタンスを別途立ち上げ、踏み台サーバ(bastion)を構築するという方法もあります。
明日以降の Retty Advent Calendar 2021 もどうぞよろしくお願いします。