SageMaker Tips: ngrokを利用したnotebookインスタンスへのssh接続方法

この記事は、Retty Advent Calender 2021 Part1の13日目の記事です。

adventar.org

はじめに

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接続方法をとります。

f:id:rettydev:20211211153724p:plain
ngrokによるssh接続概要

手順

以下に接続手順を示します。

$ 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で以下のような画面が出れば成功 (XXXX0.tcp.ngrok.ioの部分を https://dashboard.ngrok.com/endpoints/status で確認する)

f:id:rettydev:20211211153823p:plain
notebookインスタンスへのssh接続成功画面

おわりに

ここまで読んでいただきありがとうございます。

今回はngrokを利用したSageMakerのnotebookインスタンスへのssh接続方法を紹介しました。 この方法は簡単ですが、細かいアクセス制御などは出来ないためセキュリティ的な観点で問題があります。 これを解消するためには、EC2インスタンスを別途立ち上げ、踏み台サーバ(bastion)を構築するという方法もあります。

明日以降の Retty Advent Calendar 2021 もどうぞよろしくお願いします。