

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

# 從您的筆記本連線至 Amazon EMR 叢集
<a name="scheduled-notebook-connect-emr"></a>

如果在 Studio 中透過 Jupyter 筆記本連線至 Amazon EMR 叢集，您可能需要執行其他設定。特別是下面討論的內容涉及兩個問題：
+ **將參數傳遞到 Amazon EMR 連線命令**。在 SparkMagic 核心中，由於 Papermill 傳遞參數的方式與 SparkMagic 接收參數的方式有所差異，因此您傳遞給 Amazon EMR 連線命令的參數可能無法依預期運作。此限制的解決方法是將參數作為環境變數傳遞。如需與此問題和解決方法相關的詳細資訊，請參閱[將參數傳遞至 EMR 連線命令](#scheduled-notebook-connect-emr-pass-param)。
+ **將使用者憑證傳遞至經過 Kerberos、LDAP 或 HTTP 基本身分驗證的 Amazon EMR 叢集**。在互動模式下，Studio 會要求在快顯表單中輸入憑證，您可以在表單中輸入登錄憑證。在非互動式排程筆記本中，您必須 AWS Secrets Manager透過傳遞憑證。如需如何在排程筆記本任務 AWS Secrets Manager 中使用 的詳細資訊，請參閱 [將使用者憑證傳遞至經過 Kerberos、LDAP 或 HTTP 基本身分驗證的 Amazon EMR 叢集](#scheduled-notebook-connect-emr-credentials)。

## 將參數傳遞至 EMR 連線命令
<a name="scheduled-notebook-connect-emr-pass-param"></a>

如果您正在搭配 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 叢集
<a name="scheduled-notebook-connect-emr-credentials"></a>

若要建立使用 Kerberos、LDAP 或 HTTP 基本驗證身分驗證的 Amazon EMR 叢集的安全連線，您可以使用 AWS Secrets Manager 將使用者憑證傳遞至您的連線命令。如需與建立 Secrets Manager 機密相關的資訊，請參閱[建立 AWS Secrets Manager 機密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。您的秘密必須包含使用者名稱和密碼。您可以使用 `--secrets` 引數傳遞機密，如下列範例所示：

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

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

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

------
#### [ JSON ]

****  

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

------

**為每個使用者建立不同的機密**

您可以使用 `PrincipleTag` 標籤為每個使用者建立不同的機密，如下列範例所示：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}: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:{{111122223333}}:secret:aes123-1a2b3c",
                "arn:aws:secretsmanager:us-west-2:{{111122223333}}:secret:aes456-4d5e6f",
                "arn:aws:secretsmanager:us-west-2:{{111122223333}}:secret:aes789-7g8h9i"
            ]
        }
    ]
}
```

------