翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
セルフホスト型 Jupyter Notebook を使用する
Jupyter または JupyterLab ノートブックは、Amazon EC2インスタンスまたは独自の Amazon EKSクラスターで、セルフホスト型の Jupyter Notebook としてホストおよび管理できます。その後、セルフホスト型 Jupyter Notebook でインタラクティブワークロードを実行できます。以下のセクションでは、セルフホスト型の Jupyter Notebook を Amazon EKSクラスターにセットアップしてデプロイするプロセスについて説明します。
EKS クラスターでのセルフホスト型 Jupyter Notebook の作成
セキュリティグループの作成
インタラクティブエンドポイントを作成してセルフホスト型の Jupyter または JupyterLab ノートブックを実行する前に、ノートブックとインタラクティブエンドポイント間のトラフィックを制御するセキュリティグループを作成する必要があります。Amazon EC2コンソールまたは Amazon を使用してセキュリティグループEC2SDKを作成するには、「Amazon EC2 ユーザーガイド」の「セキュリティグループを作成する」の手順を参照してください。ノートブックサーバーをデプロイVPCする にセキュリティグループを作成する必要があります。
このガイドの例に従うには、Amazon EKSクラスターVPCと同じ を使用します。Amazon EKSクラスターの VPCとは異なる でノートブックVPCをホストする場合は、これら 2 つの 間にピアリング接続を作成する必要がある場合がありますVPCs。2 つの 間でピアリング接続を作成する手順についてはVPCs、Amazon VPC入門ガイドのVPC「ピアリング接続の作成」を参照してください。
次のステップでEKSインタラクティブエンドポイントEMRに Amazon を作成するには、セキュリティグループの ID が必要です。
EKS インタラクティブエンドポイントEMRで Amazon を作成する
ノートブックのセキュリティグループを作成したら、「仮想クラスターのインタラクティブエンドポイントを作成する」に記載されている手順に従ってインタラクティブエンドポイントを作成します。「セキュリティグループの作成」でノートブック用に作成したセキュリティグループ ID を指定する必要があります。
の代わりにセキュリティ ID を挿入する your-notebook-security-group-id
次の設定オーバーライド設定の :
--configuration-overrides '{ "applicationConfiguration": [ { "classification": "endpoint-configuration", "properties": { "notebook-security-group-id": "
your-notebook-security-group-id
" } } ], "monitoringConfiguration": { ...'
インタラクティブエンドポイントURLのゲートウェイサーバーを取得する
インタラクティブエンドポイントを作成したら、 の describe-managed-endpoint
コマンドURLを使用してゲートウェイサーバーを取得します AWS CLI。ノートブックをエンドポイントに接続するURLには、これが必要です。ゲートウェイサーバーはプライベートエンドポイントURLです。
aws emr-containers describe-managed-endpoint \ --region
region
\ --virtual-cluster-idvirtualClusterId
\ --idendpointId
最初、エンドポイントの状態は CREATING です。数分後、ACTIVE 状態に遷移します。エンドポイントが ACTIVE となっていれば、使用準備が完了しています。
serverUrl
コマンドがアクティブなエンドポイントから返す aws emr-containers
describe-managed-endpoint
属性を書き留めておきます。セルフホスト型 Jupyter またはノートブック をデプロイするときに JupyterLab 、ノートブックをエンドポイントURLに接続するには、これが必要です。
認証トークンを取得してインタラクティブエンドポイントに接続します。
Jupyter または JupyterLab ノートブックからインタラクティブエンドポイントに接続するには、 GetManagedEndpointSessionCredentials
を使用してセッショントークンを生成する必要がありますAPI。このトークンは、インタラクティブエンドポイントサーバーに接続するための認証証明として機能します。
次のコマンドについて、出力例を示してさらに詳しく説明します。
aws emr-containers get-managed-endpoint-session-credentials \ --endpoint-identifier
endpointArn
\ --virtual-cluster-identifiervirtualClusterArn
\ --execution-role-arnexecutionRoleArn
\ --credential-type "TOKEN" \ --duration-in-secondsdurationInSeconds
\ --regionregion
endpointArn
-
エンドポイントARNの 。は、
describe-managed-endpoint
呼び出しARNの結果で確認できます。 virtualClusterArn
-
仮想クラスターARNの 。
executionRoleArn
-
実行ロールARNの 。
durationInSeconds
-
トークンの有効期間 (秒単位)。デフォルトの有効期間は 15 分 (
900
) で、最長は 12 時間 (43200
) です。 region
-
エンドポイントと同じリージョン。
出力は次の例のようになります。セルフホスト型 Jupyter または JupyterLab ノートブック をデプロイするときに使用する
値を書き留めます。session-token
{
"id": "credentialsId
",
"credentials": {
"token": "session-token
"
},
"expiresAt": "2022-07-05T17:49:38Z"
}
例: ノートブックを JupyterLabデプロイする
上記のステップを完了したら、このサンプル手順を試して、インタラクティブエンドポイントを使用して Amazon EKSクラスターに JupyterLab ノートブックをデプロイできます。
-
ノートブックサーバーを実行する名前空間を作成します。
-
notebook.yaml
というファイルを次の内容でローカルに作成します。ファイルの内容は次のとおりです。apiVersion: v1 kind: Pod metadata: name: jupyter-notebook namespace:
namespace
spec: containers: - name: minimal-notebook image: jupyter/all-spark-notebook:lab-3.1.4 # open source image ports: - containerPort: 8888 command: ["start-notebook.sh"] args: ["--LabApp.token=''"] env: - name: JUPYTER_ENABLE_LAB value: "yes" - name: KERNEL_LAUNCH_TIMEOUT value: "400" - name: JUPYTER_GATEWAY_URL value: "serverUrl
" - name: JUPYTER_GATEWAY_VALIDATE_CERT value: "false" - name: JUPYTER_GATEWAY_AUTH_TOKEN value: "session-token
"Jupyter Notebook を Fargate 専用クラスターにデプロイする場合は、次の例のように Jupyter ポッドに
role
ラベルを付けます。... metadata: name: jupyter-notebook namespace: default labels: role:
example-role-name-label
spec: ...namespace
-
ノートブックをデプロイする Kubernetes 名前空間。
serverUrl
-
インタラクティブエンドポイントURLのゲートウェイサーバーを取得する で
describe-managed-endpoint
コマンドが返したserverUrl
属性。 session-token
-
認証トークンを取得してインタラクティブエンドポイントに接続します。 で
get-managed-endpoint-session-credentials
コマンドが返したsession-token
属性。 KERNEL_LAUNCH_TIMEOUT
-
インタラクティブエンドポイントが、カーネルが RUNNING 状態になるのを待つ時間 (秒単位)。カーネル起動タイムアウトを適切な値 (最大 400 秒) に設定して、カーネルの起動が完了するまで十分な時間を確保します。
KERNEL_EXTRA_SPARK_OPTS
-
オプションで、Spark カーネルに追加の Spark 構成を渡すことができます。以下の例のように、この環境変数に Spark 設定プロパティとして値を設定します。
- name: KERNEL_EXTRA_SPARK_OPTS value: "--conf spark.driver.cores=2 --conf spark.driver.memory=2G --conf spark.executor.instances=2 --conf spark.executor.cores=2 --conf spark.executor.memory=2G --conf spark.dynamicAllocation.enabled=true --conf spark.dynamicAllocation.shuffleTracking.enabled=true --conf spark.dynamicAllocation.minExecutors=1 --conf spark.dynamicAllocation.maxExecutors=5 --conf spark.dynamicAllocation.initialExecutors=1 "
-
ポッド仕様を Amazon EKSクラスターにデプロイします。
kubectl apply -f notebook.yaml -n
namespace
これにより、EKSインタラクティブエンドポイントEMRで Amazon に接続された最小限の JupyterLab ノートブックが起動します。ポッドが RUNNING になるまでお待ちください。次のコマンドを使用して、ポッドのステータスを確認します。
kubectl get pod jupyter-notebook -n
namespace
ポッドの準備が整うと、
get pod
コマンドは次のような出力を返します。NAME READY STATUS RESTARTS AGE jupyter-notebook 1/1 Running 0 46s
-
ノートブックセキュリティグループを、ノートブックがスケジュールされているノードにアタッチします。
-
まず、
jupyter-notebook
ポッドがスケジュールされているノードをdescribe pod
コマンドで特定します。kubectl describe pod jupyter-notebook -n
namespace
https://console.aws.amazon.com/eks/home#/clusters で Amazon
EKSコンソールを開きます。 -
Amazon EKSクラスターのコンピューティングタブに移動し、
describe pod
コマンドで識別されるノードを選択します。ノードのインスタンス ID を選択します。 -
[アクション] メニューから [セキュリティ] > [セキュリティグループを変更] を選択し、セキュリティグループの作成 で作成したセキュリティグループをアタッチします。
-
Jupyter Notebook ポッドを にデプロイする場合は AWS Fargate、 を作成して、ロールラベルを使用して Jupyter Notebook ポッド
SecurityGroupPolicy
に適用します。cat >my-security-group-policy.yaml <<EOF apiVersion: vpcresources.k8s.aws/v1beta1 kind: SecurityGroupPolicy metadata: name:
example-security-group-policy-name
namespace: default spec: podSelector: matchLabels: role:example-role-name-label
securityGroups: groupIds: -your-notebook-security-group-id
EOF
-
-
次に、ポートフォワードして、 JupyterLab インターフェイスにローカルにアクセスできるようにします。
kubectl port-forward jupyter-notebook 8888:8888 -n
namespace
実行したら、ローカルブラウザに移動し、
localhost:8888
にアクセスして JupyterLab インターフェイスを確認します。 -
から JupyterLab、新しい Scala ノートブックを作成します。Pi の値を概算するために実行できるサンプルコードスニペットを次に示します。
import scala.math.random import org.apache.spark.sql.SparkSession /** Computes an approximation to pi */ val session = SparkSession .builder .appName("Spark Pi") .getOrCreate() val slices = 2 // avoid overflow val n = math.min(100000L * slices, Int.MaxValue).toInt val count = session.sparkContext .parallelize(1 until n, slices) .map { i => val x = random * 2 - 1 val y = random * 2 - 1 if (x*x + y*y <= 1) 1 else 0 }.reduce(_ + _) println(s"Pi is roughly ${4.0 * count / (n - 1)}") session.stop()
セルフホスト型 Jupyter Notebook を削除する
セルフホスト型ノートブックを削除する準備ができたら、インタラクティブエンドポイントとセキュリティグループも削除できます。次の順番でアクションを実行します。
-
次のコマンドを使用して、
jupyter-notebook
ポッドを削除します。kubectl delete pod jupyter-notebook -n
namespace
-
次に、
delete-managed-endpoint
コマンドを使用してインタラクティブエンドポイントを削除します。インタラクティブエンドポイントを削除する手順については、「インタラクティブエンドポイントを削除する」を参照してください。最初、エンドポイントは TERMINATING 状態になります。すべてのリソースがクリーンアップされると、TERMINATED 状態に移行します。 -
セキュリティグループの作成 で作成したノートブックセキュリティグループを他の Jupyter Notebook デプロイに使用する予定がない場合は、削除できます。詳細については、「Amazon ユーザーガイド」の「セキュリティグループの削除」を参照してください。 EC2