ノートブックから Amazon EMRクラスターに接続する - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ノートブックから Amazon EMRクラスターに接続する

Studio で Jupyter Notebook から Amazon EMRクラスターに接続する場合は、追加のセットアップが必要になる場合があります。特に、以下の説明では 2 つの問題を取り上げています。

  • Amazon EMR接続コマンド にパラメータを渡します。 SparkMagic カーネルでは、Papermill がパラメータを渡す方法と がパラメータ SparkMagic を受け取る方法が異なるため、Amazon EMR接続コマンドに渡すパラメータが期待どおりに機能しない場合があります。この制限に対処する回避策は、パラメータを環境変数として渡すことです。問題と回避策の詳細については、「EMR 接続コマンドにパラメータを渡す」を参照してください。

  • ユーザー認証情報を Kerberos、LDAP、またはHTTP基本的な認証済みの Amazon EMRクラスター に渡します。インタラクティブモードでは、Studio はサインイン認証情報を入力できるポップアップフォームで認証情報を要求します。スケジュール済み非インタラクティブなノートブックでは、認証情報を AWS Secrets Manager経由で渡す必要があります。スケジュールされたノートブックジョブ AWS Secrets Manager で を使用する方法の詳細については、「」を参照してくださいユーザー認証情報を Kerberos、LDAP、またはHTTP基本的な認証済みの Amazon EMRクラスターに渡す

EMR 接続コマンドにパラメータを渡す

SparkMagic PySpark および Spark カーネルでイメージを使用していて、EMR接続コマンドをパラメータ化する場合は、ジョブの作成フォーム (追加オプションドロップダウンメニュー) のパラメータフィールドではなく、環境変数フィールドにパラメータを指定します。Jupyter Notebook EMRの接続コマンドが、これらのパラメータを環境変数として渡すことを確認します。例えば、ジョブの作成時に環境変数として cluster-id を渡したとします。EMR 接続コマンドは次のようになります。

%%local import os
%sm_analytics emr connect —cluster-id {os.getenv('cluster_id')} --auth-type None

この回避策は、 SparkMagic と Papermill の要件を満たすために必要です。背景コンテキストの場合、 SparkMagic カーネルは%%local、マジックコマンドが定義したローカル変数に付随していることを期待します。ただし、Papermill はオーバーライド時に %%local magic コマンドを渡しません。この Papermill の制限を回避するには、[環境変数] フィールドに環境変数としてパラメータを指定する必要があります。

ユーザー認証情報を Kerberos、LDAP、またはHTTP基本的な認証済みの Amazon EMRクラスターに渡す

Kerberos、、LDAPまたは HTTP Basic Auth 認証を使用する Amazon EMRクラスターへの安全な接続を確立するには、 を使用してユーザー認証情報 AWS Secrets Manager を接続コマンドに渡します。Secrets Manager シークレットの作成については、「AWS Secrets Manager シークレットを作成する」を参照してください。シークレットにはユーザー名とパスワードが含まれている必要があります。次の例に示すように、--secrets 引数を使用してシークレットを渡します。

%sm_analytics emr connect --cluster-id j_abcde12345 --auth Kerberos --secret aws_secret_id_123

管理者は、特別なタグに基づいてアクセスを割り当てる attribute-based-access-control (ABAC) メソッドを使用して、柔軟なアクセスポリシーを設定できます。柔軟なアクセスを設定して、アカウント内のすべてのユーザーに 1 つのシークレットを作成したり、ユーザーごとにシークレットを作成したりできます。以下のコードサンプルはこれらのシナリオを示しています。

アカウントのすべてのユーザーに 1 つのシークレットを作成する

{ "Version" : "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : {"AWS" : "arn:aws:iam::AWS_ACCOUNT_ID:role/service-role/AmazonSageMaker-ExecutionRole-20190101T012345"}, "Action" : "secretsmanager:GetSecretValue", "Resource" : [ "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes123-1a2b3c", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes456-4d5e6f", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes789-7g8h9i" ] } ] }

ユーザーごとに異なるシークレットを作成する

次の例で示すように、PrincipleTag タグを使用してユーザーごとに異なるシークレットを作成できます。

{ "Version" : "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : {"AWS" : "arn:aws:iam::AWS_ACCOUNT_ID:role/service-role/AmazonSageMaker-ExecutionRole-20190101T012345"}, "Condition" : { "StringEquals" : { "aws:ResourceTag/user-identity": "${aws:PrincipalTag/user-identity}" } }, "Action" : "secretsmanager:GetSecretValue", "Resource" : [ "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes123-1a2b3c", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes456-4d5e6f", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes789-7g8h9i" ] } ] }