從筆記型電腦 Connect 到 Amazon EMR 叢集 - Amazon SageMaker

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

從筆記型電腦 Connect 到 Amazon EMR 叢集

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

  • 將參數傳遞到您的 Amazon EMR 連接命令中。在 SparkMagic 內核中,由於造紙廠傳遞參數的方式以及如何EMR接 SparkMagic 收參數的差異,您傳遞給 Amazon 連接命令的參數可能無法如預期般運作。此限制的解決方法是將參數作為環境變數傳遞。如需與此問題和解決方法相關的詳細資訊,請參閱將參數傳遞給您的EMR連接命令

  • 使用者登入資料傳遞至 Kerberos 或HTTP基本驗證的 Amazon 叢集。LDAP EMR在互動模式下,Studio 會要求在快顯表單中輸入憑證,您可以在表單中輸入登錄憑證。在非互動式排程筆記本中,您必須 AWS Secrets Manager透過傳遞憑證。如需有關如何在已排程筆記本工作 AWS Secrets Manager 中使用的詳細資訊,請參閱將使用者登入資料傳遞至您的 Kerberos 或HTTP基本驗證驗證的 Amazon 叢集 LDAP EMR

將參數傳遞給您的EMR連接命令

如果您將影像與 SparkMagic PySpark 和 Spark 核心搭配使用,而且想要參數化EMR連線指令,請在 [建立 Job] 表單 (在 [其他選項] 下拉式功能表中) 的 [環境變數] 欄位中提供參數,而不是 [參數] 欄位。請確定 Jupyter 筆記本中的EMR連線指令會將這些參數當做環境變數傳遞。例如,假設您在建立工作時以環境變數的形式傳遞 cluster-id。您的EMR連接命令看起來應如下所示:

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

您需要此解決方法以滿足 SparkMagic 和造紙廠的要求。對於後台上下文,內 SparkMagic 核期望 %%local magic 命令伴隨您定義的任何局部變量。但是,Papermill 不會將 %%local 魔術命令與您的覆寫內容一起傳遞。為了解決此 Papermill 限制,您必須在環境變數欄位中將參數作為環境變數提供。

將使用者登入資料傳遞至您的 Kerberos 或HTTP基本驗證驗證的 Amazon 叢集 LDAP EMR

若要建立與使用 Kerberos 或HTTP基本驗證身份驗證的 Amazon EMR 叢集的安全連線LDAP,您可以使用將使用者登入資料傳遞 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) 方法來設定彈性存取原則,該方法會根據特殊標記指派存取權。您可以設定彈性存取許可,為帳戶中的所有使用者建立單一機密,或為每個使用者建立機密。下列程式碼範例對這些案例進行示範:

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

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