從筆記本連線至 Amazon EMR 叢集 - Amazon SageMaker AI

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

從筆記本連線至 Amazon EMR 叢集

如果在 Studio 中透過 Jupyter 筆記本連線至 Amazon EMR 叢集,您可能需要執行其他設定。特別是下面討論的內容涉及兩個問題:

  • 將參數傳遞到 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 筆記本中的 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 魔術命令與您的覆寫內容一起傳遞。為了解決此 Papermill 限制,您必須在環境變數欄位中將參數作為環境變數提供。

將使用者憑證傳遞至經過 Kerberos、LDAP 或 HTTP 基本身分驗證的 Amazon EMR 叢集

若要建立使用 Kerberos、LDAP 或 HTTP 基本身分驗證的 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

您的管理員可以使用屬性型存取控制 (ABAC) 方法來設定彈性存取政策,會根據特殊標記指派存取權。您可以設定彈性存取許可,為帳戶中的所有使用者建立單一機密,或為每個使用者建立機密。下列程式碼範例對這些案例進行示範:

為帳戶中的所有使用者建立單一機密

{ "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" ] } ] }