Amazon SageMaker実運用: NAT GatewayでNotebookの接続元IPアドレスを固定する
Amazon SageMakerを使っていて Notebook インスタンスから以下を行いたくなったので構成を考えてみた。
- Notebook インスタンスから外部システムにアクセスしたい
- 対象のシステムはアクセス制限を行なっており接続元 IP アドレスを固定したい
- Notebook インスタンスマネージド NFS サービスであるAmazon EFSをマウントしたい
- VPC 内のインスタンスからはマウントできるよう設定済み
解答
AWS Machine Learning Blogに正解が書いてあった。
- Customize your Amazon SageMaker notebook instances with lifecycle configurations and the option to disable internet access
- Mount an EFS file system to an Amazon SageMaker notebook (with lifecycle configurations)
構成
上記を踏まえて以下のような構成を考えた。
Notebook インスタンス
前提として人間が Notebook を使用する方法は当然ながら Web UI を使う。
Notebook インスタンスからの VPC 内/外部アクセス
後述するように Notebook 作成時に VPC と Private Subnet を紐づける。
すると指定した Private Subnet 内に NIC が作成され、Notebook インスタンスから VPC 内にアクセスできるようになる。
NAT Gateway を配置しているので、NAT Gateway に attach した EIP アドレスを接続元として外部にアクセスできるようになる。
ちなみに Public Subnet から NAT Gateway への route は動作しない(?)ので、Private Subnet を紐づける必要がある。
おそらく Notebook インスタンス自体は専用の不可視 VPC 内で起動されている。
(No VPC
設定で Notebook インスタンスを起動しても NIC が 2 つ存在する,VPC を紐づけると NIC がもう 1 つ増える)
なお接続対象の外部システムについてこの記事では触れないが、以下のような外部システムを想定している。
- 接続元 IP アドレスによるアクセス制限を行なっている
- HTTPS と SSH 両方で接続したい
Notebook インスタンスからの EFS ボリュームマウント
Private Subnet に NIC が作成されているので EFS ボリュームにも問題なくアクセスできる。
Web UI から Terminal(こちらも Web UI)を開いて sudo mount ~
等実行することもできる。
しかし Lifecycle configuration
なる便利機能が追加されており、スクリプトを指定するとある程度自動化できる。
その他 GPU インスタンス他
既存のいわゆる AI プロジェクトで使うことを想定しているため GPU インスタンス等がある。
以下に少し情報がある。
- https://speakerdeck.com/sonots/dena-aisisutemubu-niokerukuraudowohuo-yong-sitaji-jie-xue-xi-ji-pan-falsegou-zhu?slide=27
- https://speakerdeck.com/mazgi/dena-ai-cloud-infrastructure-2018-summary?slide=13
ELB と Web インスタンス
機械学習 Job の結果を Web から閲覧したいことがあるのでシンプルな Web サーバーを立てる。
ELB を Public Subnet に、Web サーバー用の EC2 インスタンスを同じ AZ の Private Subnet 上に立てて追加してしまうのが AI R&D エンジニアにとって楽そう。
SSH 接続について
最初に SSH ログインする踏み台ホストの IP アドレスは固定したいのでインスタンスに EIP を振る。
可用性を考えると AZ ごとに配置すると安全。
万が一 AZ がダウンした場合は手動でログインし直すことにする。
ファイルは EFS に置いておけばそれほど困らない想定。
Notebook インスタンス作成方法
以前より細かく設定できるようになっている。ありがたい。
2018.03 に書いた記事からの差分は以下。
- VPC
- 今回は VPC を選択する
- Subnet(s)
- 現時点では Subnet が 1 つ指定できる
- 表示された Subnet から Private Subnet を選ぶ
- Security group(s)
- 必要な Security Group を選ぶ
- こちらは複数選択できる
- Direct internet access
- NAT でインターネットアクセスするので
Disable
を選ぶ
- NAT でインターネットアクセスするので
- Lifecycle configuration
- Notebook インスタンスの作成/起動時にスクリプトを実行できるようになっていた、便利
(たぶん)次の記事で書く=> 書いた
ということで SageMaker の進歩のおかげで希望に近い構成が作れそうな予感がしてきた。
おれは
— Hidenori Matsuki (@mazgi) May 7, 2018
kaggle masterに
sedとかmountとか
叩かせたくないんや!