

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

# 使用 Amazon EMR 進行資料準備
<a name="studio-notebooks-emr-cluster"></a>

**重要**  
Amazon SageMaker Studio 和 Amazon SageMaker Studio Classic 是兩種機器學習環境，可用來與 SageMaker AI 互動。  
如果您的網域是在 2023 年 11 月 30 日之後建立的，則 Studio 是您的預設體驗。  
如果您的網域是在 2023 年 11 月 30 日之前建立的，Amazon SageMaker Studio Classic 是您的預設體驗。若要在 Amazon SageMaker Studio Classic 是您的預設體驗時使用 Studio，請參閱[從 Amazon SageMaker Studio Classic 遷移](studio-updated-migrate.md)。  
當您從 Amazon SageMaker Studio Classic 遷移至 Amazon SageMaker Studio 時，功能可用性不會有任何損失。Studio Classic 也會以應用程式的形式存在於 Amazon SageMaker Studio 內，以協助您執行舊版機器學習工作流程。

Amazon SageMaker Studio 和 Studio Classic 隨附與 [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) 的內建整合。在 JupyterLab 和 Studio Classic 筆記本內，資料科學家和資料工程師可以探索並連線至現有的 Amazon EMR 叢集，然後使用 [Apache Spark](https://aws.amazon.com/emr/features/spark)、[Apache Hive](https://aws.amazon.com/emr/features/hive) 或 [Presto](https://aws.amazon.com/emr/features/presto)，以互動方式探索、視覺化和準備機器學習的大規模資料。只需按一下，他們就可以存取 Spark UI 來監控 Spark 任務的狀態和指標，而無需離開筆記本。

管理員可以建立定義 Amazon EMR 叢集的 [CloudFormation 範本](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。然後，他們可以在 [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/userguide/end-user-console.html) 中將這些叢集範本提供給 Studio 和 Studio Classic 使用者以啟動。然後，資料科學家可以選擇預先定義的範本，直接從其Studio 環境自行佈建 Amazon EMR 叢集。管理員可以進一步參數化範本，讓使用者在預先定義值內選擇叢集的各個層面。例如，使用者可能想要指定核心節點的數量，或從下拉式功能表中選取節點的執行個體類型。

 CloudFormation管理員可以使用 控制 Amazon EMR 叢集的組織、安全和聯網設定。然後，資料科學家和資料工程師可以為其工作負載自訂這些範本，直接從 Studio 和 Studio Classic 建立隨需 Amazon EMR 叢集，而無需設定複雜的組態。使用者也可以在使用之後終止 Amazon EMR 叢集。
+ **如果您是管理員**：

  確定您已啟用 Studio 或 Studio Classic 與 Amazon EMR 叢集之間的通訊。如需指示，請參閱[設定 Amazon EMR 叢集的網路存取](studio-notebooks-emr-networking.md)區段。一旦啟用了此通訊，您就可以：
  + [在 Service Catalog 中設定 Amazon EMR CloudFormation 範本](studio-notebooks-set-up-emr-templates.md)
  + [設定列出 Amazon EMR 叢集](studio-notebooks-configure-discoverability-emr-cluster.md)
+ **如果您是資料科學家或資料工程師**，您可以：
  + [從 Studio 或 Studio Classic 啟動 Amazon EMR 叢集](studio-notebooks-launch-emr-cluster-from-template.md)
  + [從 Studio 或 Studio Classic 列出 Amazon EMR 叢集](discover-emr-clusters.md)
  + [從 SageMaker Studio 或 Studio Classic 連線至 Amazon EMR 叢集](connect-emr-clusters.md)
  + [從 Studio 或 Studio Classic 終止 Amazon EMR 叢集](terminate-emr-clusters.md)
  + [從 Studio 或 Studio Classic 存取 Spark UI](studio-notebooks-access-spark-ui.md)

**Topics**
+ [快速入門：建立 SageMaker AI 沙盒網域以在 Studio 中啟動 Amazon EMR 叢集](studio-notebooks-emr-cluster-quickstart.md)
+ [管理員指南](studio-emr-admin-guide.md)
+ [使用者指南](studio-emr-user-guide.md)
+ [部落格和白皮書](studio-notebooks-emr-resources.md)
+ [疑難排解](studio-notebooks-emr-troubleshooting.md)

# 快速入門：建立 SageMaker AI 沙盒網域以在 Studio 中啟動 Amazon EMR 叢集
<a name="studio-notebooks-emr-cluster-quickstart"></a>

本節會逐步引導您在 Amazon SageMaker Studio 中快速設定完整的測試環境。您將建立新的 Studio 網域，讓使用者直接從 Studio 啟動新的 Amazon EMR 叢集。這些步驟提供範例筆記本，您可以將其連線到 Amazon EMR 叢集以開始執行 Spark。工作負載。使用此筆記本，您將使用 Amazon EMR Spark 分散式處理和 OpenSearch 向量資料庫來建置檢索增強生成系統 (RAG)。

**注意**  
若要開始使用，請使用具有管理員許可的 AWS Identity and Access Management (IAM) 使用者帳戶登入 AWS 管理主控台。如需如何註冊 AWS 帳戶並建立具有管理存取權之使用者的相關資訊，請參閱 [完成 Amazon SageMaker AI 先決條件](gs-set-up.md)。

**若要設定 Studio 測試環境並開始執行 Spark 任務：**
+ [步驟 1：建立 SageMaker AI 網域以在 Studio 中啟動 Amazon EMR 叢集](#studio-notebooks-emr-cluster-quickstart-setup)
+ [步驟 2：從 Studio UI 啟動新的 Amazon EMR 叢集](#studio-notebooks-emr-cluster-quickstart-launch)
+ [步驟 3：將 JupyterLab 筆記本連線至 Amazon EMR 叢集](#studio-notebooks-emr-cluster-quickstart-connect)
+ [步驟 4：清除 CloudFormation 堆疊](#studio-notebooks-emr-cluster-quickstart-clean-stack)

## 步驟 1：建立 SageMaker AI 網域以在 Studio 中啟動 Amazon EMR 叢集
<a name="studio-notebooks-emr-cluster-quickstart-setup"></a>

在下列步驟中，您會套用 CloudFormation 堆疊來自動建立新的 SageMaker AI 網域。堆疊也會建立使用者設定檔，並設定所需的環境和許可。SageMaker AI 網域會設定為讓您直接從 Studio 啟動 Amazon EMR 叢集。在此範例中，Amazon EMR 叢集是在與 SageMaker AI 相同的 AWS 帳戶中建立，無需驗證。您可以在 [get\$1started](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub 儲存庫中找到支援 Kerberos 等各種身分驗證方法的其他 CloudFormation 堆疊。

**注意**  
SageMaker AI 預設允許每個 AWS 帳戶 5 個 Studio 網域 AWS 區域 。在您建立堆疊之前，請確定您的帳戶在您的區域中具有不超過 4 個網域。

**請遵循下列步驟設定 SageMaker AI 網域，以從 Studio 啟動 Amazon EMR 叢集。**

1. 從 `sagemaker-studio-emr` GitHub 儲存庫下載此 [CloudFormation 範本](https://github.com/aws-samples/sagemaker-studio-foundation-models/blob/main/workshop-artifacts/cfn/workshop-cfn.yaml)的原始檔案。

1. 前往 CloudFormation 主控台：https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)

1. 選擇**建立堆疊**，然後從下拉式功能表中選取**使用新資源 (標準)**。

1. 在**步驟 1** 中。

   1. 在**準備範本**區段中，選取**選擇現有範本**。

   1. 在 **Specify template (指定範本)** 區段中，選擇 **Upload a template file (上傳範本檔案)**。

   1. 上傳下載的 CloudFormation 範本，然後選擇**下一步**。

1. 在**步驟 2** 中，輸入**堆疊名稱**和 **SageMakerDomainName**，然後選擇**下一步**。

1. 在**步驟 3** 中，保留所有預設值，然後選擇**下一步**。

1. 在**步驟 4** 中，勾選方塊以確認資源建立，然後選擇**建立堆疊**。這會在您的帳戶和區域中建立 Studio 網域。

## 步驟 2：從 Studio UI 啟動新的 Amazon EMR 叢集
<a name="studio-notebooks-emr-cluster-quickstart-launch"></a>

在下列步驟中，您可以從 Studio UI 建立新的 Amazon EMR 叢集。

1. 前往 SageMaker AI 主控台 (網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/))，然後在左側功能表中選擇**網域**。

1. 按一下您的網域名稱 **GenerativeAIDomain** 以開啟**網域詳細資訊**頁面。

1. 從使用者設定檔 `genai-user` 中啟動 Studio。

1. 在左側導覽窗格中，前往**資料**，然後前往 **Amazon EMR 叢集**。

1. 在 Amazon EMR 叢集頁面上，選擇**建立**。選取 CloudFormation 堆疊建立的範本 **SageMaker Studio Domain No Auth EMR**，然後選擇**下一步**。

1. 輸入新 Amazon EMR 叢集的名稱。選擇性地更新其他參數，例如核心節點和主節點的執行個體類型、閒置逾時或核心節點數量。

1. 選擇**建立資源**以啟動新的 Amazon EMR 叢集。

   建立 Amazon EMR 叢集後，請遵循 **EMR 叢集**頁面上的狀態。當狀態變更為 `Running/Waiting` 時，您的 Amazon EMR 叢集已準備好在 Studio 中使用。

## 步驟 3：將 JupyterLab 筆記本連線至 Amazon EMR 叢集
<a name="studio-notebooks-emr-cluster-quickstart-connect"></a>

在下列步驟中，您將 JupyterLab 中的筆記本連線至執行中的 Amazon EMR 叢集。在此範例中，您匯入筆記本，讓您可以使用 Amazon EMR Spark 分散式處理和 OpenSearch 向量資料庫建置檢索增強生成 (RAG) 系統。

1. 

**啟動 JupyterLab**

   從 Studio 啟動 JupyterLab 應用程式。

1. 

**建立私有空間**

   如果您尚未為 JupyterLab 應用程式建立空間，請選擇**建立 JupyterLab 空間**。輸入空間的名稱，並將空間保留為**私有**。將所有其他設定保留為預設值，然後選擇**建立空間**。

   否則，執行您的 JupyterLab 空間以啟動 JupyterLab 應用程式。

1. 

**部署您的 LLM 和嵌入模型以進行推論**
   + 在頂端功能表中，依序選擇**檔案**、**新增**、**終端機**。
   + 在終端機中，執行下列命令。

     ```
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-00-setup/Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb
     mkdir AWSGuides
     cd AWSGuides
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/AmazonSageMakerDeveloperGuide.pdf
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/EC2DeveloperGuide.pdf
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/S3DeveloperGuide.pdf
     ```

     這會將 `Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb` 筆記本擷取至您的本機目錄，並將三個 PDF 檔案下載到本機 `AWSGuides` 資料夾。
   + 開啟 `lab-00-setup/Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb`、保留 `Python 3 (ipykernel)` 核心，然後執行每個儲存格。
**警告**  
在 **Llama 2 授權合約**區段中，確保接受 Llama2 EULA 再繼續。  
筆記本會在 `ml.g5.2xlarge` 上部署兩個模型 (`Llama 2` 和 `all-MiniLM-L6-v2 Models`) 以進行推論。

     部署模型和建立端點可能需要一些時間。

1. 

**開啟您的主要筆記本**

   在 JupyterLab 中，開啟您的終端機並執行下列命令。

   ```
   cd ..
   wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb
   ```

   您應該會在 JupyterLab 的左側面板中看到額外的 `Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` 筆記本。

1. 

**選擇 `PySpark` 核心**

   開啟您的 `Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` 筆記本，並確保您使用的是 `SparkMagic PySpark` 核心。您可以在筆記本的右上角切換核心。選擇目前的核心名稱以開啟核心選擇模式，然後選擇 `SparkMagic PySpark`。

1. 

**將您的筆記本連線至叢集**

   1. 在筆記本的右上角，選擇**叢集**。此動作會開啟模態視窗，其中列出您有權存取的所有執行中叢集。

   1. 選取您的叢集，然後選擇**連線**。新的憑證類型選擇模態視窗隨即開啟。

   1. 選擇**無憑證**，然後選擇**連線**。  
![\[顯示如何為 JupyterLab 筆記本選取 Amazon EMR 憑證的模態。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-credential-selection.png)

   1. 筆記本儲存格會自動填入並執行。筆記本儲存格會載入 `sagemaker_studio_analytics_extension.magics` 延伸模組，其中提供連線至 Amazon EMR 叢集的功能。然後，它會使用 `%sm_analytics` 魔術命令來啟動與 Amazon EMR 叢集和 Spark 應用程式的連線。
**注意**  
確定 Amazon EMR 叢集的連線字串已將驗證類型設定為 `None`。這是由下列範例中的值 `--auth-type None` 說明。如有必要，您可以修改欄位。  

      ```
      %load_ext sagemaker_studio_analytics_extension.magics
      %sm_analytics emr connect --verify-certificate False --cluster-id your-cluster-id --auth-type None --language python
      ```

   1. 一旦您成功建立了連線，您的連線儲存格輸出訊息應會顯示您的 `SparkSession` 詳細資訊，包括叢集 ID、`YARN` 應用程式 ID，以及 Spark UI 的連結，以監控您的 Spark 任務。

您已準備好使用 `Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb`。筆記本。此範例筆記本會執行分散式 PySpark 工作負載，以使用 LangChain 和 OpenSearch 建置 RAG 系統。

## 步驟 4：清除 CloudFormation 堆疊
<a name="studio-notebooks-emr-cluster-quickstart-clean-stack"></a>

完成後，請務必終止您的兩個端點並刪除您的 CloudFormation 堆疊，以避免繼續收費。刪除堆疊會清除堆疊已佈建的所有資源。

**在完成 CloudFormation 堆疊時將其刪除**

1. 前往 CloudFormation 主控台：https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)

1. 選取您要刪除的模型。您可以依名稱進行搜尋，或在堆疊清單中尋找該堆疊。

1. 按一下**刪除**按鈕以完成刪除堆疊，然後再次按一下**刪除**，以確認這將刪除堆疊建立的所有資源。

   等待堆疊刪除完成。這可能需要幾分鐘的時間。 CloudFormation 會自動清除堆疊範本中定義的所有資源。

1. 驗證堆疊建立的所有資源是否都已刪除。例如，檢查是否有任何剩餘的 Amazon EMR 叢集。

**移除模型的 API 端點**

1. 前往 SageMaker AI 主控台：[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左側導覽窗格中，開啟**推論**，然後選擇**端點**。

1. 選取端點 `hf-allminil6v2-embedding-ep`，然後在**動作**下拉式清單中選擇**刪除**。針對端點 `meta-llama2-7b-chat-tg-ep` 重複步驟。

# 管理員指南
<a name="studio-emr-admin-guide"></a>

本節提供允許 Studio 或 Studio Classic 與 Amazon EMR 叢集之間通訊的先決條件和聯網指示。它涵蓋不同的部署案例 - 當 Studio 和 Amazon EMR 在私有 Amazon VPC 內佈建而沒有公有網際網路存取時，以及它們需要透過網際網路通訊時。

它會逐步解說管理員如何使用 AWS Service Catalog 為 Studio 提供 CloudFormation 範本，讓資料科學家直接從 Studio 中探索和自行佈建 Amazon EMR 叢集。這涉及建立 Service Catalog 產品組合、授予必要許可、參考 Amazon EMR 範本，以及將這些範本參數化，以在叢集建立期間啟用自訂。

最後，它提供從 Studio 和 Studio Classic 設定現有執行中 Amazon EMR 叢集可探索性的指引，涵蓋單一帳戶和跨帳戶存取案例，以及必要的 IAM 許可。

**Topics**
+ [在 Service Catalog 中設定 Amazon EMR CloudFormation 範本](studio-notebooks-set-up-emr-templates.md)
+ [設定列出 Amazon EMR 叢集](studio-notebooks-configure-discoverability-emr-cluster.md)
+ [在 Studio 中設定用於 Amazon EMR 叢集存取的 IAM 執行時期角色](studio-notebooks-emr-cluster-rbac.md)
+ [參考政策](studio-set-up-emr-permissions-reference.md)

# 在 Service Catalog 中設定 Amazon EMR CloudFormation 範本
<a name="studio-notebooks-set-up-emr-templates"></a>

本主題假設管理員熟悉 [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)、[產品組合和產品 AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-portfolio.html)，以及 [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)。

為了簡化從 Studio 建立 Amazon EMR 叢集的操作，管理員可以將 [Amazon EMR CloudFormation 範本](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html)註冊為 [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) 產品組合中的產品。為了讓資料科學家可以使用範本，他們必須將產品組合與 Studio 或 Studio Classic 中使用的 SageMaker AI 執行角色建立關聯。最後，若要允許使用者探索範本、佈建叢集，以及從 Studio 或 Studio Classic 連線至 Amazon EMR 叢集，管理員需要設定適當的存取許可。

Amazon EMR CloudFormation 範本可讓最終使用者自訂各種叢集層面。例如，管理員可以定義核准的執行個體類型清單，使用者可以在建立叢集時從中選擇執行個體類型。

下列指示會使用端對端 [CloudFormation 堆疊](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started)來設定 Studio 或 Studio Classic 網域、使用者設定檔、Service Catalog 產品組合，並填入 Amazon EMR 啟動範本。下列步驟強調了管理員必須在其端對端堆疊中套用的特定設定，這些設定可讓 Studio 或 Studio Classic 存取 Service Catalog 產品和佈建 Amazon EMR 叢集。

**注意**  
GitHub 儲存庫 [aws-samples/sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) 包含端對端 CloudFormation 堆疊，其中部署必要的 IAM 角色、聯網、SageMaker 網域、使用者設定檔、Service Catalog 產品組合，以及新增 Amazon EMR 啟動 CloudFormation 範本。這些範本會在 Studio 或 Studio Classic 與 Amazon EMR 叢集之間提供不同的驗證選項。在這些範例中，父系 CloudFormation 堆疊會將 SageMaker AI VPC、安全群組及子網路參數傳遞至 Amazon EMR 叢集範本。  
[sagemaker-studio-emr/cloudformation/emr\$1servicecatalog\$1templates](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/emr_servicecatalog_templates) 儲存庫包含各種範例 Amazon EMR CloudFormation 啟動範本，包括單一帳戶和跨帳戶部署的選項。  
如需您可以用來連線至 Amazon EMR 叢集之驗證方法的詳細資訊，請參閱[從 SageMaker Studio 或 Studio Classic 連線至 Amazon EMR 叢集](connect-emr-clusters.md)。

若要讓資料科學家探索 Amazon EMR CloudFormation 範本，並從 Studio 或 Studio Classic 佈建叢集，請遵循下列步驟。

## 步驟 0：檢查您的聯網並準備您的 CloudFormation 堆疊
<a name="studio-set-up-emr-prereq"></a>

開始之前：
+ 確定您已檢閱[設定 Amazon EMR 叢集的網路存取](studio-notebooks-emr-networking.md)中的聯網和安全要求。
+ 您必須具有一個現有的端對端 CloudFormation 堆疊，支援您選擇的驗證方法。您可以在 [aws-samples/sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) 中找到這類 CloudFormation 範本的範例。下列步驟會醒目提示端對端堆疊中的特定組態，讓您可在 Studio 或 Studio Classic 內使用 Amazon EMR 範本。

## 步驟 1：將您的 Service Catalog 產品組合與 SageMaker AI 建立關聯
<a name="studio-set-up-emr-service-catalog-portfolio"></a>

**在您的 Service Catalog 產品組合中**，將您的產品組合 ID 與存取您叢集的 SageMaker AI 執行角色建立關聯。

若要這麼做，請將以下區段 (此處為 YAML 格式) 新增至您的堆疊。這會授予 SageMaker AI 執行角色存取指定 Service Catalog 產品組合的權限，其中包含 Amazon EMR 範本等產品。它允許 SageMaker AI 擔任的角色啟動這些產品。

 將 *SageMakerExecutionRole.Arn* 和 *SageMakerStudioEMRProductPortfolio.ID* 取代為其實際值。

```
SageMakerStudioEMRProductPortfolioPrincipalAssociation:
    Type: AWS::ServiceCatalog::PortfolioPrincipalAssociation
    Properties:
      PrincipalARN: SageMakerExecutionRole.Arn
      PortfolioId: SageMakerStudioEMRProductPortfolio.ID
      PrincipalType: IAM
```

如需必要 IAM 許可集的詳細資訊，請參閱[許可](#studio-emr-permissions)一節。

## 步驟 2：參考 Service Catalog 產品中的 Amazon EMR 範本
<a name="studio-set-up-emr-service-catalog-product"></a>

**在產品組合的 Service Catalog 產品**中，參考 Amazon EMR 範本資源，並確保其在 Studio 或 Studio Classic 中的可見性。

若要這樣做，請參考 Service Catalog 產品定義中的 Amazon EMR 範本資源，然後新增下列設定為值 `"true"` 的標籤金鑰 `"sagemaker:studio-visibility:emr"` (請參閱 YAML 格式的範例)。

在 Service Catalog 產品定義中，透過 URL 參考叢集的 CloudFormation 範本。設定為 true 的其他標籤可確保 Studio 或 Studio Classic 中 Amazon EMR 範本的可見性。

**注意**  
範例中所提供 URL 參考的 Amazon EMR 範本在啟動時不會強制執行任何驗證要求。此選項用於示範和學習目的。因此不建議用於實際執行環境中。

```
SMStudioEMRNoAuthProduct:
    Type: AWS::ServiceCatalog::CloudFormationProduct
    Properties:
      Owner: AWS
      Name: SageMaker Studio Domain No Auth EMR
      ProvisioningArtifactParameters:
        - Name: SageMaker Studio Domain No Auth EMR
          Description: Provisions a SageMaker domain and No Auth EMR Cluster
          Info:
            LoadTemplateFromURL: Link to your CloudFormation template. For example, https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/astra-m4-sagemaker/end-to-end/CFN-EMR-NoStudioNoAuthTemplate-v3.yaml
      Tags:
        - Key: "sagemaker:studio-visibility:emr"
          Value: "true"
```

## 步驟 3：參數化 Amazon EMR CloudFormation 範本
<a name="studio-set-up-emr-cfn-template"></a>

**用來在 Service Catalog 產品內定義 Amazon EMR 叢集的 CloudFormation 範本**可讓管理員指定可設定的參數。管理員可以在範本的 `Parameters` 區段中定義這些參數的 `Default` 值和 `AllowedValues` 範圍。在叢集啟動過程中，資料科學家可以提供自訂輸入，或從這些預先定義的選項中進行選擇，以自訂其 Amazon EMR 叢集的某些層面。

下列範例說明管理員在建立 Amazon EMR 範本時可設定的其他輸入參數。

```
"Parameters": {
    "EmrClusterName": {
      "Type": "String",
      "Description": "EMR cluster Name."
    },
    "MasterInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR master node.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge"
      ]
    },
    "CoreInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR core nodes.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge",
        "m3.medium",
        "m3.large",
        "m3.xlarge",
        "m3.2xlarge"
      ]
    },
    "CoreInstanceCount": {
      "Type": "String",
      "Description": "Number of core instances in the EMR cluster.",
      "Default": "2",
      "AllowedValues": [
        "2",
        "5",
        "10"
      ]
    },
    "EmrReleaseVersion": {
      "Type": "String",
      "Description": "The release version of EMR to launch.",
      "Default": "emr-5.33.1",
      "AllowedValues": [
        "emr-5.33.1",
        "emr-6.4.0"
      ]
    }
  }
```

在管理員使 Amazon EMR CloudFormation 範本可在 Studio 內使用之後，資料科學家可以使用它們自行佈建 Amazon EMR 叢集。範本中定義的 `Parameters` 區段會轉換為 Studio 或 Studio Classic 內叢集建立表單上的輸入欄位。對於每個參數，資料科學家可以將自訂值輸入至輸入方塊，或從下拉式功能表中列出的預先定義選項中選取，該值對應至範本中指定的 `AllowedValues`。

下圖顯示了從 CloudFormation Amazon EMR 範本組合的動態表單，以在 Studio 或 Studio Classic 中建立 Amazon EMR 叢集。

![\[從 CloudFormation Amazon EMR 範本組合的動態表單圖，該表單可從 Studio 或 Studio Classic 中建立 Amazon EMR 叢集。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)


造訪 [從 Studio 或 Studio Classic 啟動 Amazon EMR 叢集](studio-notebooks-launch-emr-cluster-from-template.md) 以了解如何使用這些 Amazon EMR 範本從 Studio 或 Studio Classic 啟動叢集。

## 步驟 4：設定許可，以啟用從 Studio 列出和啟動 Amazon EMR 叢集
<a name="studio-emr-permissions"></a>

最後，連接必要的 IAM 許可，以啟用從 Studio 或 Studio Classic 列出現有的執行中 Amazon EMR 叢集，以及自行佈建新叢集。

您必須將這些政策新增至其中的角色取決於 Studio 及 Amazon EMR 是部署在同一帳戶 (選擇*單一帳戶*) 還是不同帳戶 (選擇*跨帳戶*)。

**重要**  
您只能探索並連線至從私有空間啟動的 JupyterLab 和 Studio Classic 應用程式的 Amazon EMR 叢集。確保 Amazon EMR 叢集與您的 Studio 環境位於相同的 AWS 區域。

### 單一帳戶
<a name="studio-set-up-emr-permissions-singleaccount"></a>

如果您的 Amazon EMR 叢集和 Studio 或 Studio Classic 部署在同一個 AWS 帳戶中，請將下列許可連接到存取叢集的 SageMaker AI 執行角色。

1. **步驟 1**：擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

   如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

   如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

1. **步驟 2**：將下列許可附加至存取 Amazon EMR 叢集的 SageMaker AI 執行角色。

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 選擇**角色**，然後在**搜尋**欄位中依名稱搜尋您的執行角色。角色名稱是 ARN 的最後一部分，在最後一個正斜線 (/) 之後。

   1. 遵循角色的連結。

   1. 選擇**新增許可**，然後選擇**建立內嵌政策**。

   1. 在 **JSON** 索引標籤中，新增允許 Amazon EMR 存取和操作的 Amazon EMR 許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*。將陳述式清單複製到角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

   1. 重複**建立內嵌政策**步驟，以新增另一個政策，授與執行角色使用 CloudFormation 範本佈建新 Amazon EMR 叢集的許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*建立 Amazon EMRclusters 政策*。將陳述式清單複製到您角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

**注意**  
連線至 Amazon EMR 叢集的角色型存取控制 (RBAC) 使用者也應該參閱 [當您的 Amazon EMR 叢集和 Studio 位於相同帳戶時，設定執行期的角色身分驗證](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)。

### 跨帳戶
<a name="studio-set-up-emr-permissions-crossaccount"></a>

開始使用之前，請先擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

如果您的 Amazon EMR 叢集和 Studio 或 Studio Classic 部署在不同的 AWS 帳戶中，您可以在兩個帳戶上設定許可。

**注意**  
連線至 Amazon EMR 叢集的角色型存取控制 (RBAC) 使用者也應該參閱 [當叢集和 Studio 位於不同帳戶時，設定執行期角色驗證](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)。

#### 在 Amazon EMR 叢集帳戶上
<a name="studio-set-up-emr-permissions-crossaccount-emraccount"></a>

請遵循下列步驟，在部署 Amazon EMR 的帳戶 (也稱為*信任帳戶*) 上建立必要的角色和政策：

1. **步驟 1**：擷取 [Amazon EMR 叢集服務角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)的 ARN。

   若要了解如何尋找叢集服務角色的 ARN，請參閱[設定 IAM 服務角色以取得 Amazon EMR 對 AWS 服務和資源的許可](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)。

1. **步驟 2**：使用下列組態建立名為 `AssumableRole` 的自訂 IAM 角色：
   + 許可：將必要的許可授與 `AssumableRole`，以允許存取 Amazon EMR 資源。在涉及跨帳戶存取的案例中，此角色也稱為*存取角色*。
   + 信任關係：設定 `AssumableRole` 的信任政策，以允許從需要存取的 Studio 帳戶中擔任執行角色 (跨帳戶圖表中的 `SageMakerExecutionRole`)。

   透過擔任該角色，Studio 或 Studio Classic 可以暫時存取其在 Amazon EMR 中所需的許可。

   如需如何在 `AssumableRole` Amazon EMR AWS 帳戶中建立新 的詳細說明，請遵循下列步驟：

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 在左側導覽窗格中，選擇**政策**，然後選擇**建立政策**。

   1. 在 **JSON** 索引標籤中，新增允許 Amazon EMR 存取和操作的 Amazon EMR 許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*。將陳述式清單複製到角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

   1. 在左側導覽窗格中，選擇**角色**，然後選擇**建立角色**。

   1. 在**建立角色**頁面上，選擇**自訂信任政策**作為信任的實體。

   1. 在**自訂信任政策**區段中貼入下列 JSON 文件，然後選擇**下一步**。

------
#### [ For users of Studio and JupyterLab ]

      將 `studio-account` 取代為 Studio 帳戶 ID，並將 `AmazonSageMaker-ExecutionRole` 取代為 JupyterLab 空間使用的執行角色。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      將 `studio-account` 取代為 Studio Classic 帳戶 ID。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. 在**新增許可**頁面中，新增您剛建立的許可，然後選擇**下一步**。

   1. 在**檢閱**頁面上，輸入角色名稱 (例如 `AssumableRole`) 和選用描述。

   1. 檢閱角色詳細資訊，並選擇 **Create role (建立角色)**。

   如需在 AWS 帳戶建立角色的詳細資訊，請參閱[建立 IAM 角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

#### 在 Studio 帳戶上
<a name="studio-set-up-emr-permissions-crossaccount-studioaccount"></a>

在部署 Studio 的帳戶 (也稱為*信任帳戶*) 上，請使用存取信任帳戶中資源所需的許可，更新存取您叢集的 SageMaker AI 執行角色。

1. **步驟 1**：擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

   如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

   如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

1. **步驟 2**：將下列許可附加至存取 Amazon EMR 叢集的 SageMaker AI 執行角色。

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 選擇**角色**，然後在**搜尋**欄位中依名稱搜尋您的執行角色。角色名稱是 ARN 的最後一部分，在最後一個正斜線 (/) 之後。

   1. 遵循角色的連結。

   1. 選擇**新增許可**，然後選擇**建立內嵌政策**。

   1. 在 **JSON** 索引標籤中，新增內嵌政策，授與角色更新網域、使用者設定檔和空間的許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*網域、使用者設定檔和空間更新動作政策*。將陳述式清單複製到您角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

   1. 重複**建立內嵌政策**步驟，以新增另一個政策，授與執行角色擔任 `AssumableRole` 的許可，然後執行角色存取政策所允許的動作。將 `emr-account` 取代為 Amazon EMR 帳戶 ID，並將 `AssumableRole` 取代為 Amazon EMR 帳戶中建立的可擔任角色名稱。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. 重複**建立內嵌政策**步驟，以新增另一個政策，授與執行角色使用 CloudFormation 範本佈建新 Amazon EMR 叢集的許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*建立 Amazon EMRclusters 政策*。將陳述式清單複製到您角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. (選用) 若要允許列出在與 Studio 相同的帳戶中部署的 Amazon EMR 叢集，請將額外的內嵌政策新增至 Studio 執行角色，如 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*所定義。

1. **步驟 3**：將您的可擔任角色 (存取角色) 與您的網域或使用者設定檔建立關聯。Studio 中的 JupyterLab 使用者可以使用 SageMaker AI 主控台或提供的指令碼。

    選擇對應至使用案例的索引標籤。

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   若要使用 SageMaker AI 主控台，將您的可擔任角色與使用者設定檔或網域建立關聯：

   1. 導覽至 SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

   1. 在左側導覽窗格中，選擇**網域**，然後使用您更新其許可的 SageMaker AI 執行角色選取網域。

   1. 
      + 若要在**網域詳細資訊**頁面的**應用程式組態**索引標籤中，將您的可擔任角色 (存取角色) 新增至您的網域，請導覽至 **JupyterLab** 區段。
      + 若要將您的可擔任角色 (存取角色) 新增至您的使用者設定檔：在**網域詳細資訊**頁面上，選擇**使用者設定檔**索引標籤，然後使用您已更新其許可的 SageMaker AI 執行角色選取使用者設定檔。在**應用程式組態**索引標籤中，導覽至 **JupyterLab** 區段。

   1. 選擇**編輯**並新增您的可擔任角色 (存取角色) ARN。

   1. 選擇**提交**。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    在使用您已更新其許可的 SageMaker AI 執行角色，從空間啟動的 JupyterLab 應用程式中，請在終端機中執行下列命令。將 `domainID`、`user-profile-name`、`emr-accountID` 和 `AssumableRole` (`EMRServiceRole` 表示 [RBAC 執行時期角色]()) 取代為其適當的值。此程式碼片段會更新 SageMaker AI 網域內特定使用者設定檔 (使用 `client.update_userprofile`) 或網域設定 (使用 `client.update_domain`) 的使用者設定檔設定。具體而言，它允許 JupyterLab 應用程式擔任 Amazon EMR 帳戶內執行 Amazon EMR 叢集的特定 IAM 角色 (`AssumableRole`)。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   將 `AssumableRole` 的 ARN 提供給 Studio Classic 執行角色。ARN 會在啟動時由 Jupyter 伺服器載入。Studio 使用的執行角色擔任該跨帳戶角色，以探索並連線至*信任帳戶*中的 Amazon EMR 叢集。

   您可以使用生命週期組態 (LCC) 指令碼來指定此資訊。您可以將 LCC 附加至您的網域或特定使用者設定檔。您使用的 LCC 指令碼必須是 JupyterServer 組態。如需如何建立 LCC 指令碼的詳細資訊，請參閱[搭配 Studio Classic 使用生命週期組態](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

   下列為範例 LCC 指令碼。若要修改指令碼，請將 `AssumableRole` 和 `emr-account` 取代為其各自的值。跨帳戶的數量限制為五個。

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    執行 LCC 並寫入檔案之後，伺服器會讀取檔案 `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json` 並儲存跨帳戶 ARN。

------

# 設定列出 Amazon EMR 叢集
<a name="studio-notebooks-configure-discoverability-emr-cluster"></a>

管理員可以設定 SageMaker Studio 執行角色的許可，以授予使用者檢視其可存取之 Amazon EMR 叢集清單的能力，讓他們能夠連線到這些叢集。您想要存取的叢集可以部署在與 Studio 相同的 AWS 帳戶 （選擇*單一帳戶*) 或個別帳戶 （選擇*跨帳戶*)。下頁描述如何授予從 Studio 或 Studio Classic 檢視 Amazon EMR 叢集的許可。

**重要**  
您只能探索並連線至從私有空間啟動的 JupyterLab 和 Studio Classic 應用程式的 Amazon EMR 叢集。確保 Amazon EMR 叢集與您的 Studio 環境位於相同的 AWS 區域。

若要讓資料科學家從 Studio 或 Studio Classic 探索 Amazon EMR 叢集，然後連線至其中，請遵循下列步驟。

## 單一帳戶
<a name="studio-set-up-emr-permissions-singleaccount-list-clusters"></a>

如果您的 Amazon EMR 叢集和 Studio 或 Studio Classic 部署在同一個 AWS 帳戶中，請將下列許可附加至存取您叢集的 SageMaker AI 執行角色。

1. **步驟 1**：擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

   如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

   如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

1. **步驟 2**：將下列許可附加至存取 Amazon EMR 叢集的 SageMaker AI 執行角色。

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 選擇**角色**，然後在**搜尋**欄位中依名稱搜尋您的執行角色。角色名稱是 ARN 的最後一部分，在最後一個正斜線 (/) 之後。

   1. 遵循角色的連結。

   1. 選擇**新增許可**，然後選擇**建立內嵌政策**。

   1. 在 **JSON** 索引標籤中，新增允許 Amazon EMR 存取和操作的 Amazon EMR 許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*。將陳述式清單複製到角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

**注意**  
連線至 Amazon EMR 叢集的角色型存取控制 (RBAC) 使用者也應該參閱 [當您的 Amazon EMR 叢集和 Studio 位於相同帳戶時，設定執行期的角色身分驗證](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)。

## 跨帳戶
<a name="studio-set-up-emr-permissions-crossaccount-list-clusters"></a>

開始使用之前，請先擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

如果您的 Amazon EMR 叢集和 Studio 部署在不同的 AWS 帳戶中，您可以在這兩個帳戶上設定許可。

**注意**  
連線至 Amazon EMR 叢集的角色型存取控制 (RBAC) 使用者也應該參閱 [當叢集和 Studio 位於不同帳戶時，設定執行期角色驗證](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)。

**在 Amazon EMR 叢集帳戶上**

請遵循下列步驟，在部署 Amazon EMR 的帳戶 (也稱為*信任帳戶*) 上建立必要的角色和政策：

1. **步驟 1**：擷取 [Amazon EMR 叢集服務角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)的 ARN。

   若要了解如何尋找叢集服務角色的 ARN，請參閱[設定 IAM 服務角色以取得 Amazon EMR 對 AWS 服務和資源的許可](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)。

1. **步驟 2**：使用下列組態建立名為 `AssumableRole` 的自訂 IAM 角色：
   + 許可：將必要的許可授與 `AssumableRole`，以允許存取 Amazon EMR 資源。在涉及跨帳戶存取的案例中，此角色也稱為*存取角色*。
   + 信任關係：設定 `AssumableRole` 的信任政策，以允許從需要存取的 Studio 帳戶中擔任執行角色 (跨帳戶圖表中的 `SageMakerExecutionRole`)。

   透過擔任該角色，Studio 或 Studio Classic 可以暫時存取其在 Amazon EMR 中所需的許可。

   如需如何在 `AssumableRole` Amazon EMR AWS 帳戶中建立新 的詳細說明，請遵循下列步驟：

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 在左側導覽窗格中，選擇**政策**，然後選擇**建立政策**。

   1. 在 **JSON** 索引標籤中，新增允許 Amazon EMR 存取和操作的 Amazon EMR 許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*。將陳述式清單複製到角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

   1. 在左側導覽窗格中，選擇**角色**，然後選擇**建立角色**。

   1. 在**建立角色**頁面上，選擇**自訂信任政策**作為信任的實體。

   1. 在**自訂信任政策**區段中貼入下列 JSON 文件，然後選擇**下一步**。

------
#### [ For users of Studio and JupyterLab ]

      將 `studio-account` 取代為 Studio 帳戶 ID，並將 `AmazonSageMaker-ExecutionRole` 取代為 JupyterLab 空間使用的執行角色。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      將 `studio-account` 取代為 Studio Classic 帳戶 ID。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. 在**新增許可**頁面中，新增您剛建立的許可，然後選擇**下一步**。

   1. 在**檢閱**頁面上，輸入角色名稱 (例如 `AssumableRole`) 和選用描述。

   1. 檢閱角色詳細資訊，並選擇 **Create role (建立角色)**。

   如需在 AWS 帳戶上建立角色的詳細資訊，請參閱[建立 IAM 角色 （主控台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

**在 Studio 帳戶上**

在部署 Studio 的帳戶 (也稱為*信任帳戶*) 上，請使用存取信任帳戶中資源所需的許可，更新存取您叢集的 SageMaker AI 執行角色。

1. **步驟 1**：擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

   如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

   如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

1. **步驟 2**：將下列許可附加至存取 Amazon EMR 叢集的 SageMaker AI 執行角色。

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 選擇**角色**，然後在**搜尋**欄位中依名稱搜尋您的執行角色。角色名稱是 ARN 的最後一部分，在最後一個正斜線 (/) 之後。

   1. 遵循角色的連結。

   1. 選擇**新增許可**，然後選擇**建立內嵌政策**。

   1. 在 **JSON** 索引標籤中，新增內嵌政策，授與角色更新網域、使用者設定檔和空間的許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*網域、使用者設定檔和空間更新動作政策*。將陳述式清單複製到您角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

   1. 重複**建立內嵌政策**步驟，以新增另一個政策，授與執行角色擔任 `AssumableRole` 的許可，然後執行角色存取政策所允許的動作。將 `emr-account` 取代為 Amazon EMR 帳戶 ID，並將 `AssumableRole` 取代為 Amazon EMR 帳戶中建立的可擔任角色名稱。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. (選用) 若要允許列出在與 Studio 相同的帳戶中部署的 Amazon EMR 叢集，請將額外的內嵌政策新增至 Studio 執行角色，如 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*所定義。

1. **步驟 3**：將您的可擔任角色 (存取角色) 與您的網域或使用者設定檔建立關聯。Studio 中的 JupyterLab 使用者可以使用 SageMaker AI 主控台或提供的指令碼。

    選擇對應至使用案例的索引標籤。

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   若要使用 SageMaker AI 主控台，將您的可擔任角色與使用者設定檔或網域建立關聯：

   1. 導覽至 SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

   1. 在左側導覽窗格中，選擇**網域**，然後使用您更新其許可的 SageMaker AI 執行角色選取網域。

   1. 
      + 若要在**網域詳細資訊**頁面的**應用程式組態**索引標籤中，將您的可擔任角色 (存取角色) 新增至您的網域，請導覽至 **JupyterLab** 區段。
      + 若要將您的可擔任角色 (存取角色) 新增至您的使用者設定檔：在**網域詳細資訊**頁面上，選擇**使用者設定檔**索引標籤，然後使用您已更新其許可的 SageMaker AI 執行角色選取使用者設定檔。在**應用程式組態**索引標籤中，導覽至 **JupyterLab** 區段。

   1. 選擇**編輯**並新增您的可擔任角色 (存取角色) ARN。

   1. 選擇**提交**。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    在使用您已更新其許可的 SageMaker AI 執行角色，從空間啟動的 JupyterLab 應用程式中，請在終端機中執行下列命令。將 `domainID`、`user-profile-name`、`emr-accountID` 和 `AssumableRole` (`EMRServiceRole` 表示 [RBAC 執行時期角色]()) 取代為其適當的值。此程式碼片段會更新 SageMaker AI 網域內特定使用者設定檔 (使用 `client.update_userprofile`) 或網域設定 (使用 `client.update_domain`) 的使用者設定檔設定。具體而言，它允許 JupyterLab 應用程式擔任 Amazon EMR 帳戶內執行 Amazon EMR 叢集的特定 IAM 角色 (`AssumableRole`)。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   將 `AssumableRole` 的 ARN 提供給 Studio Classic 執行角色。ARN 會在啟動時由 Jupyter 伺服器載入。Studio 使用的執行角色擔任該跨帳戶角色，以探索並連線至*信任帳戶*中的 Amazon EMR 叢集。

   您可以使用生命週期組態 (LCC) 指令碼來指定此資訊。您可以將 LCC 附加至您的網域或特定使用者設定檔。您使用的 LCC 指令碼必須是 JupyterServer 組態。如需如何建立 LCC 指令碼的詳細資訊，請參閱[搭配 Studio Classic 使用生命週期組態](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

   下列為範例 LCC 指令碼。若要修改指令碼，請將 `AssumableRole` 和 `emr-account` 取代為其各自的值。跨帳戶的數量限制為五個。

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    執行 LCC 並寫入檔案之後，伺服器會讀取檔案 `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json` 並儲存跨帳戶 ARN。

------

請參閱[從 Studio 或 Studio Classic 列出 Amazon EMR 叢集](discover-emr-clusters.md)，以了解如何從 Studio 或 Studio Classic 筆記本探索並連線至 Amazon EMR 叢集。

# 在 Studio 中設定用於 Amazon EMR 叢集存取的 IAM 執行時期角色
<a name="studio-notebooks-emr-cluster-rbac"></a>

當您從 Studio 或 Studio Classic 筆記本連線到 Amazon EMR 叢集時，可以視覺化方式瀏覽 IAM 角色清單 (稱為執行時期角色)，然後即時選取一個角色。接著，從您的筆記本建立的所有 Apache Spark、Apache Hive 或 Presto 任務，只會存取連接至執行時期角色的政策所允許的資料及資源。此外，從使用 管理的資料湖存取資料時 AWS Lake Formation，您可以使用連接到執行期角色的政策來強制執行資料表層級和資料欄層級的存取。

透過這項功能，您和團隊成員可以連線到同一個叢集，每個叢集都使用執行期角色，其許可範圍將與您個別的資料存取層級相符。您的工作階段也會在共用叢集上彼此隔離。

若要使用 Studio Classic 試用此功能，請參閱[使用 AWS Lake Formation 和 Amazon SageMaker Studio Classic 的 Amazon EMR 套用精細資料存取控制](https://aws.amazon.com/blogs/machine-learning/apply-fine-grained-data-access-controls-with-aws-lake-formation-and-amazon-emr-from-amazon-sagemaker-studio/)。這篇部落格文章可協助您設定示範環境，方便您嘗試使用預先設定的執行期角色連線至 Amazon EMR 叢集。

## 先決條件
<a name="studio-notebooks-emr-cluster-rbac-prereq"></a>

開始之前，請確定您符合以下先決條件：
+ 使用 Amazon EMR 版本 6.9 或以上。
+ **若為 Studio Classic 使用者**：在 Studio Classic Jupyter 伺服器應用程式組態中使用 JupyterLab 第 3 版。此版本支援 Studio Classic 使用執行時期角色連線至 Amazon EMR 叢集。

  **若為 Studio 使用者**：使用 [SageMaker Distribution 映像](sagemaker-distribution.md)版本 `1.10` 或更新版本。
+ 允許在您叢集的安全組態中使用執行時期角色。如需詳細資訊，請參閱 [Amazon EMR 步驟的執行期角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-steps-runtime-roles.html)。
+ 使用 [支援的映像和核心，可從 Studio 或 Studio Classic 連線至 Amazon EMR 叢集](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels) 中列出的任何核心建立筆記本。
+ 確定您檢閱[設定 Studio 以使用執行期 IAM 角色](#studio-notebooks-emr-cluster-iam)中的指示，以設定您的執行時期角色。

## 跨帳戶連線案例
<a name="studio-notebooks-emr-cluster-rbac-scen"></a>

當您的資料位於 Studio 帳戶之外時，執行期角色驗證可支援各種跨帳戶連線案例。下列影像顯示您可以在 Studio 和資料帳戶之間指派 Amazon EMR 叢集、資料，甚至 Amazon EMR 執行時期執行角色的三種不同方式：

![\[執行期 IAM 角色驗證支援的跨帳戶案例。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio-emr-rbac-scenarios.png)


在選項 1 中，您的 Amazon EMR 叢集和 Amazon EMR 執行時期執行角色位於與 Studio 帳戶不同的資料帳戶中。您可以定義個別的 Amazon EMR 存取角色 (也稱為 `Assumable role`) 許可政策，該政策會授予 Studio 或 Studio Classic 執行角色擔任 Amazon EMR 存取角色的許可。接著，Amazon EMR 存取角色會代表您的 Studio 或 Studio Classic 執行角色呼叫 Amazon EMR API `GetClusterSessionCredentials`，讓您可以存取叢集。

在選項 2 中，您的 Amazon EMR 叢集和 Amazon EMR 執行時期執行角色位於您的 Studio 帳戶中。您的 Studio 執行角色具有使用 Amazon EMR API `GetClusterSessionCredentials` 存取叢集的許可。若要存取 Amazon S3 儲存貯體，請提供 Amazon EMR 執行時期執行角色跨帳戶 Amazon S3 儲存貯體存取許可 — 您可以在 Amazon S3 儲存貯體政策中授予這些許可。

在選項 3 中，您的 Amazon EMR 叢集位於您的 Studio 帳戶中，而 Amazon EMR 執行時期執行角色位於資料帳戶中。您的 Studio 或 Studio Classic 執行角色具有使用 Amazon EMR API `GetClusterSessionCredentials` 存取叢集的許可。將 Amazon EMR 執行時期執行角色新增到執行角色組態 JSON。接著即可在選擇叢集時在使用者介面中選取角色。如需如何設定執行角色設定 JSON 檔案的詳細資訊，請參閱[將您的執行角色預先載入至 Studio 或 Studio Classic](#studio-notebooks-emr-cluster-iam-preload)。

## 設定 Studio 以使用執行期 IAM 角色
<a name="studio-notebooks-emr-cluster-iam"></a>

若要為 Amazon EMR 叢集建立執行期角色身分驗證，請設定必要的 IAM 政策、網路和可用性增強功能。您的設定取決於您是否會處理任何跨帳戶作業，以及您的 Amazon EMR 叢集、Amazon EMR 執行時期執行角色或兩者是否都位於 Studio 帳戶之外。下節將引導您完成要安裝的政策，並說明如何設定網路以允許跨帳戶之間的流量，以及設定用於自動化 Amazon EMR 連線的本機組態檔案。

### 當您的 Amazon EMR 叢集和 Studio 位於相同帳戶時，設定執行期的角色身分驗證
<a name="studio-notebooks-emr-cluster-iam-same"></a>

如果您的 Amazon EMR 叢集位於您的 Studio 帳戶中，請完成下列步驟，將必要的許可新增至您的 Studio 執行政策：

1. 新增必要的 IAM 政策，以連線到 Amazon EMR 叢集。如需詳細資訊，請參閱[設定列出 Amazon EMR 叢集](studio-notebooks-configure-discoverability-emr-cluster.md)。

1. 當您傳遞政策中指定的一或多個允許的 Amazon EMR 執行時期執行角色時，授予呼叫 Amazon EMR API `GetClusterSessionCredentials` 的許可。

1. (選用) 授與許可，以傳遞遵循任何使用者定義命名慣例的 IAM 角色。

1. (選用) 授與許可，以存取使用特定使用者定義字串標記的 Amazon EMR 叢集。

1. 預先載入您的 IAM 角色，讓您可以選取要在連線至 Amazon EMR 叢集時使用的角色。如需有關預先載入 IAM 角色的詳細資訊，請參閱[將您的執行角色預先載入至 Studio 或 Studio Classic](#studio-notebooks-emr-cluster-iam-preload)。

下列範例政策允許屬於建模和訓練群組的 Amazon EMR 執行時期執行角色呼叫 `GetClusterSessionCredentials`。此外，政策擁有者可存取標記為字串 `modeling` 或 `training` 的 Amazon EMR 叢集。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "elasticmapreduce:GetClusterSessionCredentials",
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "elasticmapreduce:ExecutionRoleArn": [
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-modeling*",
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-training*"
			]},
		"StringLike":{
                    "elasticmapreduce:ResourceTag/group": [
                        "*modeling*",
                        "*training*"
                    ]
                }
            }
        }
    ]
}
```

------

### 當叢集和 Studio 位於不同帳戶時，設定執行期角色驗證
<a name="studio-notebooks-emr-cluster-iam-diff"></a>

如果您的 Amazon EMR 叢集不在您的 Studio 帳戶中，請允許您的 SageMaker AI 執行角色扮演跨帳戶 Amazon EMR 存取角色，以便您可以連線到叢集。若要設定跨帳戶組態，請完成以下步驟：

1. 建立您的 SageMaker AI 執行角色許可政策，以便執行角色可以擔任 Amazon EMR 存取角色。以下為政策的範例：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowAssumeCrossAccountEMRAccessRole",
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Resource": "arn:aws:iam::111122223333:role/emr-access-role-name"
           }
       ]
   }
   ```

------

1. 建立信任政策以指定哪些 Studio 帳戶 ID 受信任，以擔任 Amazon EMR 存取角色。以下為政策的範例：

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
           "Sid": "AllowCrossAccountSageMakerExecutionRoleToAssumeThisRole",
           "Effect": "Allow",
           "Principal": {
             "AWS": "arn:aws:iam::111122223333:role/studio_execution_role"
           },
           "Action": "sts:AssumeRole"
         }
       ]
   }
   ```

------

1. 建立 Amazon EMR 存取角色許可政策，該政策授予 Amazon EMR 執行時期執行角色在叢集上執行預定任務所需的許可。設定 Amazon EMR 存取角色，以使用存取角色許可政策中指定的 Amazon EMR 執行時期執行角色呼叫 API `GetClusterSessionCredentials`。以下為政策的範例：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowCallingEmrGetClusterSessionCredentialsAPI",
               "Effect": "Allow",
               "Action": "elasticmapreduce:GetClusterSessionCredentials",
               "Resource": "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/cluster-id",
               "Condition": {
                   "StringLike": {
                       "elasticmapreduce:ExecutionRoleArn": [
                           "arn:aws:iam::111122223333:role/emr-execution-role-name"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 設定跨帳戶網路，讓流量可以在您的帳戶之間來回移動。如需指引式指示，請參閱*[設定 Amazon EMR 叢集的網路存取](studio-notebooks-emr-networking.md)設定*。本節中的步驟可協助您完成下列任務：

   1. VPC 會對等您的 Studio 帳戶和您的 Amazon EMR 帳戶以建立連線。

   1. 手動將路由新增至兩個帳戶中的私人子網路路由表。這樣一來，將可從 Studio 帳戶建立和連線至 Amazon EMR 叢集到遠端帳戶的私有子網路。

   1. 設定連接到 Studio 網域的安全群組，以允許傳出流量和 Amazon EMR 主要節點的安全群組允許來自 Studio 執行個體安全群組的傳入 TCP 流量。

1. 預先載入您的 IAM 執行時期角色，讓您可以選取要在連線至 Amazon EMR 叢集時使用的角色。如需有關預先載入 IAM 角色的詳細資訊，請參閱[將您的執行角色預先載入至 Studio 或 Studio Classic](#studio-notebooks-emr-cluster-iam-preload)。

### 設定 Lake Formation 存取權
<a name="studio-notebooks-emr-cluster-iam-lf"></a>

當您從 管理的資料湖存取資料時 AWS Lake Formation，您可以使用連接到執行期角色的政策來強制執行資料表層級和資料欄層級的存取。若要設定 Lake Formation 存取權限，請參閱[將 Amazon EMR 與 AWS Lake Formation整合](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-lake-formation.html)。

### 將您的執行角色預先載入至 Studio 或 Studio Classic
<a name="studio-notebooks-emr-cluster-iam-preload"></a>

您可以預先載入 IAM 執行時期角色，讓您可以選取要在連線至 Amazon EMR 叢集時使用的角色。Studio 中 JupyterLab 的使用者可以使用 SageMaker AI 主控台或提供的指令碼。

------
#### [ Preload runtime roles in JupyterLab using the SageMaker AI console ]

若要使用 SageMaker AI 主控台，將您的執行時期角色與使用者設定檔或網域建立關聯：

1. 導覽至 SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左側導覽窗格中，選擇**網域**，然後使用您更新其許可的 SageMaker AI 執行角色選取網域。

1. 
   + 若要將您的執行時期 (和跨帳戶使用案例的存取角色) 新增至您的網域：在**網域詳細資訊**頁面**的應用程式組態**索引標籤中，導覽至 **JupyterLab** 區段。
   + 若要將您的執行時期 (和跨帳戶使用案例的存取角色) 新增至您的使用者設定檔：在**網域詳細資訊**頁面上，選擇**使用者設定檔**索引標籤，然後使用您已更新其許可的 SageMaker AI 執行角色選取使用者設定檔。在**應用程式組態**索引標籤中，導覽至 **JupyterLab** 區段。

1. 選擇**編輯**並新增您的存取角色 (可擔任角色) 和 EMR Serverless 執行時期執行角色的 ARN。

1. 選擇**提交**。

當您下次連線至 Amazon EMR 伺服器時，執行時期角色應該會出現在下拉式功能表中以供選取。

------
#### [ Preload runtime roles in JupyterLab using a Python script ]

在使用您已更新其許可的 SageMaker AI 執行角色，從空間啟動的 JupyterLab 應用程式中，請在終端機中執行下列命令。將 `domainID`、`user-profile-name`、`emr-accountID` 和 `EMRServiceRole` 取代為其適當的值。此程式碼片段會在跨帳戶使用案例中更新 SageMaker AI 網域內的使用者設定檔設定 (`client.update_user_profile`)。具體而言，它會設定 Amazon EMR 的服務角色。它還允許 JupyterLab 應用程式擔任特定 IAM 角色 (`AssumableRole` 或 `AccessRole`)，以在 Amazon EMR 帳戶內執行 Amazon EMR。

或者，如果您的空間使用網域層級設定的執行角色，請使用 `client.update_domain` 更新網域設定。

```
import botocore.session
import json
sess = botocore.session.get_session()
client = sess.create_client('sagemaker')

client.update_user_profile(
DomainId="domainID", 
UserProfileName="user-profile-name",
UserSettings={
    'JupyterLabAppSettings': {
        'EmrSettings': {
            'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
            'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                             "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
        }
        
    }
})
resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")

resp['CreationTime'] = str(resp['CreationTime'])
resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
print(json.dumps(resp, indent=2))
```

------
#### [ Preload runtime roles in Studio Classic ]

將 `AccessRole` (`AssumableRole`) 的 ARN 提供給您的 SageMaker AI 執行角色。ARN 會在啟動時由 Jupyter 伺服器載入。Studio 使用的執行角色擔任該跨帳戶角色，以探索並連線至*信任帳戶*中的 Amazon EMR 叢集。

您可以使用生命週期組態 (LCC) 指令碼來指定此資訊。您可以將 LCC 附加至您的網域或特定使用者設定檔。您使用的 LCC 指令碼必須是 JupyterServer 組態。如需如何建立 LCC 指令碼的詳細資訊，請參閱[搭配 Studio Classic 使用生命週期組態](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

下列為範例 LCC 指令碼。若要修改指令碼，請將 `AssumableRole` 和 `emr-account` 取代為其各自的值。跨帳戶的數量限制為五個。

下列程式碼片段為範例 LCC bash 指令碼，如果您的 Studio Classic 應用程式和叢集位於相同的帳戶中則可套用：

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::123456789012:role/emr-execution-role-1",
          "arn:aws:iam::123456789012:role/emr-execution-role-2"
      ]
    }
}
EOF
```

如果您的 Studio Classic 應用程式和叢集位於不同的帳戶中，請指定可以使用該叢集的 Amazon EMR 存取角色。在下列範例政策中，*123456789012* 是 Amazon EMR 叢集帳戶 ID，而 *212121212121* 和 *434343434343* 則是允許的 Amazon EMR 存取角色的 ARN。

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::212121212121:role/emr-execution-role-1",
          "arn:aws:iam::434343434343:role/emr-execution-role-2"
      ]
    }
}
EOF

# add your cross-account EMR access role
FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "123456789012": "arn:aws:iam::123456789012:role/cross-account-emr-access-role"
}
EOF
```

------

# 參考政策
<a name="studio-set-up-emr-permissions-reference"></a>
+ **列出 Amazon EMR 政策**：此政策允許執行下列動作：
  + `AllowPresignedUrl` 允許產生預先簽章的 URL，用於從 Studio 內存取 Spark UI。
  + `AllowClusterDiscovery` 和 `AllowClusterDetailsDiscovery` 允許列出和描述所提供區域和帳戶中的 Amazon EMR 叢集。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowPresignedUrl",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:CreatePersistentAppUI",
                  "elasticmapreduce:DescribePersistentAppUI",
                  "elasticmapreduce:GetPersistentAppUIPresignedURL",
                  "elasticmapreduce:GetOnClusterAppUIPresignedURL"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDetailsDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:DescribeCluster",
                  "elasticmapreduce:ListInstances",
                  "elasticmapreduce:ListInstanceGroups",
                  "elasticmapreduce:DescribeSecurityConfiguration"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:ListClusters"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ **建立 Amazon EMR 叢集政策**：此政策允許執行下列動作：
  + `AllowEMRTemplateDiscovery` 允許在 Service Catalog 中搜尋 Amazon EMR 範本。Studio 和 Studio Classic 使用此項目來顯示可用的範本。
  + `AllowSagemakerProjectManagement` 啟用 [什麼是 SageMaker AI 專案？](sagemaker-projects-whatis.md) 的建立。在 Studio 或 Studio Classic 中，存取 AWS Service Catalog 是透過 管理[什麼是 SageMaker AI 專案？](sagemaker-projects-whatis.md)。

  所提供 JSON 中定義的 IAM 政策會授予這些許可。將陳述式清單複製到您角色的內嵌政策之前，請將 *region* 和 *accountID* 取代為您的實際區域和 AWS 帳戶 ID 值。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowEMRTemplateDiscovery",
              "Effect": "Allow",
              "Action": [
                  "servicecatalog:SearchProducts"
              ],
              "Resource": "*"
          },
          {
              "Sid": "AllowSagemakerProjectManagement",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:CreateProject",
                  "sagemaker:DeleteProject"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:111122223333:project/*"
          }
      ]
  }
  ```

------
+ **網域、使用者設定檔和空間更新動作政策 **：以下政策授予許可，以更新指定區域和 AWS 帳戶中的 SageMaker AI 網域、使用者設定檔和空間。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "SageMakerUpdateResourcesPolicy",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:UpdateDomain",
                  "sagemaker:UpdateUserprofile",
                  "sagemaker:UpdateSpace"
              ],
              "Resource": [
                  "arn:aws:sagemaker:us-east-1:111122223333:domain/*",
                  "arn:aws:sagemaker:us-east-1:111122223333:user-profile/*"
              ]
          }
      ]
  }
  ```

------

# 使用者指南
<a name="studio-emr-user-guide"></a>

本節涵蓋資料科學家和資料工程師如何從 Studio 或 Studio Classic 啟動、探索、連線至或終止 Amazon EMR 叢集。

在使用者可以列出或啟動叢集之前，管理員必須已在 Studio 環境中設定必要的設定。如需管理員如何設定 Studio 環境以允許自行佈建和列出 Amazon EMR 叢集的相關資訊，請參閱[管理員指南](studio-emr-admin-guide.md)。

**Topics**
+ [支援的映像和核心，可從 Studio 或 Studio Classic 連線至 Amazon EMR 叢集](#studio-notebooks-emr-cluster-connect-kernels)
+ [使用您自己的映像](#studio-notebooks-emr-byoi)
+ [從 Studio 或 Studio Classic 啟動 Amazon EMR 叢集](studio-notebooks-launch-emr-cluster-from-template.md)
+ [從 Studio 或 Studio Classic 列出 Amazon EMR 叢集](discover-emr-clusters.md)
+ [從 SageMaker Studio 或 Studio Classic 連線至 Amazon EMR 叢集](connect-emr-clusters.md)
+ [從 Studio 或 Studio Classic 終止 Amazon EMR 叢集](terminate-emr-clusters.md)
+ [從 Studio 或 Studio Classic 存取 Spark UI](studio-notebooks-access-spark-ui.md)

## 支援的映像和核心，可從 Studio 或 Studio Classic 連線至 Amazon EMR 叢集
<a name="studio-notebooks-emr-cluster-connect-kernels"></a>

下列映像與核心隨附 [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/)，這是 JupyterLab 延伸模組，其會使用 [Apache Livy](https://livy.apache.org/) 透過 [SparkMagic](https://github.com/jupyter-incubator/sparkmagic) 程式庫連線至遠端 Spark (Amazon EMR) 叢集。
+ **若為 Studio 使用者：**SageMaker Distribution 是適用於資料科學的 Docker 環境，用作 JupyterLab 筆記本執行個體的預設映像。所有版本的 [SageMaker AI Distribution](https://github.com/aws/sagemaker-distribution) 都已預先安裝 `sagemaker-studio-analytics-extension`。
+ **若為 Studio Classic 使用者：**下列映像已預先安裝 `sagemaker-studio-analytics-extension`：
  + DataScience–Python 3 核心
  + DataScience 2.0–Python 3 核心
  + DataScience 3.0–Python 3 核心
  + Spark 1.0–Spark 與 PySpark 核心
  + SparkAnalytics 2.0–SparkMagic 與 PySpark 核心
  + SparkMagic–SparkMagic 與 PySpark 核心
  + PyTorch 1.8–Python 3 核心
  + TensorFlow 2.6–Python3 核心
  + TensorFlow 2.11–Python 3 核心

若要使用其他內建映像或您自己的映像連線至 Amazon EMR 叢集，請遵循 [使用您自己的映像](#studio-notebooks-emr-byoi) 指示。

## 使用您自己的映像
<a name="studio-notebooks-emr-byoi"></a>

若要在 Studio 或 Studio Classic 中自帶映像，並允許您的筆記本連線至 Amazon EMR 叢集，請將以下 [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/) 延伸模組安裝到您的核心。它支援透過 [SparkMagic](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html) 程式庫將 SageMaker Studio 或 Studio Classic 筆記本連線至 Spark (Amazon EMR) 叢集。

```
pip install sparkmagic
pip install sagemaker-studio-sparkmagic-lib
pip install sagemaker-studio-analytics-extension
```

此外，若要使用 [Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html) 身分驗證連線至 Amazon EMR，您必須安裝 kinit 用戶端。根據您的作業系統，安裝 kinit 用戶端的指令可能會有所不同。若要使用 Ubuntu (基於 Debian) 映像，請使用 `apt-get install -y -qq krb5-user` 命令。

如需在 SageMaker Studio 或 Studio Classic 中自帶映像的詳細資訊，請參閱[自帶 SageMaker 映像](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html)。

# 從 Studio 或 Studio Classic 啟動 Amazon EMR 叢集
<a name="studio-notebooks-launch-emr-cluster-from-template"></a>

資料科學家和資料工程師可以使用管理員設定的 CloudFormation 範本，從 Studio 或 Studio Classic 自行佈建 Amazon EMR 叢集。在使用者可以啟動叢集之前，管理員必須已在 Studio 環境中設定必要的設定。如需管理員如何設定 Studio 環境以允許自行佈建 Amazon EMR 叢集的相關資訊，請參閱[在 Service Catalog 中設定 Amazon EMR CloudFormation 範本](studio-notebooks-set-up-emr-templates.md)。

若要從 Studio 或 Studio Classic 佈建新的 Amazon EMR 叢集：

1. 在 Studio 或 Studio Classic UI 的左側面板中，選取左側導覽功能表中的**資料**節點。向下導覽至 **Amazon EMR 叢集**。這會開啟一個頁面，列出您可以從 Studio 或 Studio Classic 存取的 Amazon EMR 叢集。

1. 選擇右上角的**建立**按鈕。這會開啟新的模態，列出您可用的叢集範本。

1. 選擇範本名稱來選取叢集範本，然後選擇**下一步**。

1. 輸入叢集詳細資訊，例如叢集名稱和管理員設定的任何特定可設定參數，然後選擇**建立叢集**。建立叢集可能需要幾分鐘的時間。  
![\[從 Studio 或 Studio Classic 建立 Amazon EMR 叢集的表單。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)

一旦佈建了叢集，Studio 或 Studio Classic UI 會顯示*叢集已成功建立*訊息。

若要連線至您的叢集，請參閱[從 SageMaker Studio 或 Studio Classic 連線至 Amazon EMR 叢集](connect-emr-clusters.md)

# 從 Studio 或 Studio Classic 列出 Amazon EMR 叢集
<a name="discover-emr-clusters"></a>

資料科學家與資料工程師可以從 Studio 探索 Amazon EMR 叢集，然後連線至其中。Amazon EMR 叢集可能位於與 Studio 相同的 AWS 帳戶中，也可能位於不同的 AWS 帳戶中。

在使用者可以列出或連線至叢集之前，管理員必須已在 Studio 環境中設定必要的設定。如需管理員如何設定 Studio 環境以允許探索執行中 Amazon EMR 叢集的相關資訊，請參閱[管理員指南](studio-emr-admin-guide.md)。如果您的管理員[已設定 Amazon EMR 叢集的跨帳戶探索](studio-notebooks-configure-discoverability-emr-cluster.md)，您可以檢視叢集的合併清單。此清單包含 Studio 所用 AWS 帳戶的叢集，以及已授予您存取權之遠端帳戶的叢集。

若要從 Studio 內檢視可用的 Amazon EMR 叢集清單：

1. 在 Studio UI 的左側導覽功能表中，向下捲動至 **EMR 叢集**。這會開啟一個頁面，列出您可以存取的 Amazon EMR 叢集。

   清單會顥示下列階段中的叢集：**引導中**、**啟動中**、**執行中**、**等待中**。您可以使用篩選條件圖示，依顯示的叢集目前狀態縮小顯示這些叢集的範圍。

1. 選擇您要連線至其中的特定**執行中**叢集，然後參閱[從 SageMaker Studio 或 Studio Classic 連線至 Amazon EMR 叢集](connect-emr-clusters.md)。

# 從 SageMaker Studio 或 Studio Classic 連線至 Amazon EMR 叢集
<a name="connect-emr-clusters"></a>

資料科學家和資料工程師可以直接從 Studio 使用者介面探索 Amazon EMR 叢集，然後連線至其中。開始之前，請確定您已如 [步驟 4：設定許可，以啟用從 Studio 列出和啟動 Amazon EMR 叢集](studio-notebooks-set-up-emr-templates.md#studio-emr-permissions) 一節所述設定必要的許可。這些許可授予 Studio 建立、啟動、檢視、存取和終止叢集的能力。

您可以將 Amazon EMR 叢集直接從 Studio UI 連線至新的 JupyterLab 筆記本，或選擇在執行中 JupyterLab 應用程式的筆記本中啟動連線。

**重要**  
您只能探索並連線至從私有空間啟動的 JupyterLab 和 Studio Classic 應用程式的 Amazon EMR 叢集。確保 Amazon EMR 叢集與您的 Studio 環境位於相同的 AWS 區域。您的 JupyterLab 空間必須使用 SageMaker Distribution 映像版本 `1.10` 或更高版本。

## 使用 Studio UI 連線至 Amazon EMR 叢集
<a name="connect-emr-clusters-ui-options"></a>

若要使用 Studio 或 Studio Classic UI 連線至您的叢集，您可以從 [從 Studio 或 Studio Classic 列出 Amazon EMR 叢集](discover-emr-clusters.md) 中存取的叢集清單或從 SageMaker Studio 或 Studio Classic 中的筆記本啟動連線。

**若要從 Studio UI 將 Amazon EMR 叢集連線至新的 JupyterLab 筆記本：**

1. 在 Studio UI 的左側面板中，選取左側導覽功能表中的**資料**節點。向下導覽至 **Amazon EMR 應用程式和叢集**。這會開啟一個頁面，在 **Amazon EMR 叢集**索引標籤中列出您可以從 Studio 存取的 Amazon EMR 叢集。
**注意**  
如果您或您的管理員已設定允許跨帳戶存取 Amazon EMR 叢集的許可，您可以檢視您已授予 Studio 存取權之所有帳戶的叢集合併清單。

1. 選取您要將其連線至新筆記本的 Amazon EMR 叢集，然後選擇**連接至筆記本**。這會開啟一個模態視窗，其中顯示 JupyterLab 空間的清單。

1. 
   + 選取您要從中啟動 JupyterLab 應用程式的空間，然後選擇**開啟筆記本**。這會從您選擇的空間啟動 JupyterLab 應用程式，並開啟新的筆記本。
**注意**  
Studio Classic 的使用者需要選取映像和核心。如需支援的映像清單，請參閱[支援的映像和核心，可從 Studio 或 Studio Classic 連線至 Amazon EMR 叢集](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels)或參閱[使用您自己的映像](studio-emr-user-guide.md#studio-notebooks-emr-byoi)。
   + 或者，您也可以選擇模態視窗頂端的**建立新空間**按鈕來建立新的私有空間。輸入空間的名稱，然後選擇**建立空間並開啟筆記本**。這會建立一個具有預設執行個體類型和最新可用 SageMaker Distribution 映像的私有空間、啟動 JupyterLab 應用程式，並開啟新的筆記本。

1. 如果您選取的叢集不使用 Kerberos、LDAP 或[執行時期角色]()驗證，Studio 會提示您選取憑證類型。選擇 **Http 基本身分驗證**或**無憑證**，然後輸入您的憑證 (如果適用)。

   如果您選取的叢集支援執行時期角色，請選擇 Amazon EMR 叢集可為任務執行而擔任的 IAM 角色名稱。
**重要**  
若要成功將 JupyterLab 筆記本連線至支援執行時期角色的 Amazon EMR 叢集，您必須先將執行時期角色清單與您的網域或使用者設定檔建立關聯，如 [在 Studio 中設定用於 Amazon EMR 叢集存取的 IAM 執行時期角色](studio-notebooks-emr-cluster-rbac.md) 中所述。若無法完成此步驟，將阻止您建立連線。

   選取後，連線命令會填入筆記本的第一個儲存格，並啟動與 Amazon EMR 叢集的連線。

   一旦連接成功，將顯示一則訊息確認連線並啟動 Spark 應用程式。

**或者，您可以從 JupyterLab 或 Studio Classic 筆記本連線至叢集。**

1. 選擇筆記本頂端的**叢集**按鈕。這會開啟模態視窗，列出處於 `Running` 狀態且您可以存取的 Amazon EMR 叢集。您可以在 **Amazon EMR 叢集**索引標籤中查看 `Running` Amazon EMR 叢集。
**注意**  
對於 Studio Classic 的使用者，只有在您從 [支援的映像和核心，可從 Studio 或 Studio Classic 連線至 Amazon EMR 叢集](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels) 或從 [使用您自己的映像](studio-emr-user-guide.md#studio-notebooks-emr-byoi) 使用核心時，才能看到**叢集**。如果您在筆記本頂端看不到**叢集**，請確定您的系統管理員[已設定叢集的可探索性](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-configure-discoverability-emr-cluster.html)，並切換至支援的核心。

1. 選取要連線的叢集，然後選擇**連線**。

1. 如果您已將 Amazon EMR 叢集設定為支援[執行時期 IAM 角色](studio-notebooks-emr-cluster-rbac.md)，則可以從 **Amazon EMR 執行角色**下拉式功能表中選取您的角色。
**重要**  
若要成功將 JupyterLab 筆記本連線至支援執行時期角色的 Amazon EMR 叢集，您必須先將執行時期角色清單與您的網域或使用者設定檔建立關聯，如 [在 Studio 中設定用於 Amazon EMR 叢集存取的 IAM 執行時期角色](studio-notebooks-emr-cluster-rbac.md) 中所述。若無法完成此步驟，將阻止您建立連線。

   否則，如果您選擇的叢集不使用 Kerberos、LDAP 或執行時期角色驗證，Studio 或 Studio Classic 會提示您選取憑證類型。您可以選擇 **HTTP 基本身分驗證**或**無憑證**。

1. Studio 新增程式碼區塊，然後將其執行到作用中儲存格以建立連線。此儲存格包含連線魔術命令，以根據您的驗證類型將您的筆記本連線至您的應用程式。

   一旦連接成功，將顯示一則訊息確認連線並啟動 Spark 應用程式。

## 使用連線命令連線至 Amazon EMR 叢集
<a name="connect-emr-clusters-manually"></a>

若要建立與 Amazon EMR 叢集的連線，您可以在筆記本儲存格內執行連線命令。

建立連線時，您可以使用 [Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html)、[輕量型目錄存取通訊協定 (LDAP)](https://docs.aws.amazon.com/) 或[執行時期 IAM 角色](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-emr-cluster-rbac.html)驗證進行驗證。您選擇的驗證方法取決於您的叢集組態。

您可以參考此範例[在啟用 Kerberos 的 Amazon EMR 叢集上使用 Network Load Balancer 存取 Apache Livy](https://aws.amazon.com/blogs/big-data/access-apache-livy-using-a-network-load-balancer-on-a-kerberos-enabled-amazon-emr-cluster/)，以設定使用 Kerberos 驗證的 Amazon EMR 叢集。或者，您可以在 [aws-samples/sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub 儲存庫中探索使用 Kerberos 或 LDAP 驗證的 CloudFormation 範例範本。

如果您的管理員已啟用跨帳戶存取，您可以從 Studio Classic 筆記本連線至 Amazon EMR 叢集，無論您的 Studio Classic 應用程式和叢集位於相同的 AWS 帳戶或不同的帳戶中。

對於以下每種驗證類型，請使用指定的命令從 Studio 或 Studio Classic 筆記本連線至叢集。
+ **Kerberos**

  如果您需要跨帳戶 Amazon EMR 存取，請附加 `--assumable-role-arn` 引數。如果您使用 HTTPS 連線至叢集，請附加 `--verify-certificate` 引數。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Kerberos --language python 
  [--assumable-role-arn EMR_access_role_ARN ] 
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **LDAP**

  如果您需要跨帳戶 Amazon EMR 存取，請附加 `--assumable-role-arn` 引數。如果您使用 HTTPS 連線至叢集，請附加 `--verify-certificate` 引數。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Basic_Access --language python 
  [--assumable-role-arn EMR_access_role_ARN ]
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **NoAuth**

  如果您需要跨帳戶 Amazon EMR 存取，請附加 `--assumable-role-arn` 引數。如果您使用 HTTPS 連線至叢集，請附加 `--verify-certificate` 引數。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type None --language python
  [--assumable-role-arn EMR_access_role_ARN ]
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **執行期 IAM 角色**

  如果您需要跨帳戶 Amazon EMR 存取，請附加 `--assumable-role-arn` 引數。如果您使用 HTTPS 連線至叢集，請附加 `--verify-certificate` 引數。

  如需使用執行期 IAM 角色連線至 Amazon EMR 叢集的更多資訊，請參閱[在 Studio 中設定用於 Amazon EMR 叢集存取的 IAM 執行時期角色](studio-notebooks-emr-cluster-rbac.md)。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Basic_Access \
  --emr-execution-role-arn arn:aws:iam::studio_account_id:role/emr-execution-role-name
  [--assumable-role-arn EMR_access_role_ARN]
  [--verify-certificate /home/user/certificateKey.pem]
  ```

## 透過 HTTPS 連線至 Amazon EMR 叢集
<a name="connect-emr-clusters-ssl"></a>

如果您已將 Amazon EMR 叢集設定為啟用傳輸加密，以及為 HTTPS 設定了 Apache Livy 伺服器，並希望 Studio 或 Studio Classic 使用 HTTPS 與 Amazon EMR 通訊，則需要設定 Studio 或 Studio Classic 以存取您的憑證金鑰。

對於自我簽署或本機憑證授權單位 (CA) 簽署憑證，您可以透過兩個步驟執行此作業：

1. 使用下列其中一個選項，將憑證的 PEM 檔案下載至本機檔案系統：
   + Jupyter 的內建檔案上傳功能。
   + 筆記本儲存格。
   + (僅適用於 Studio Classic 使用者) 生命週期組態 (LCC) 指令碼。

     如需如何使用 LCC 指令碼的相關資訊，請參閱[使用生命週期組態指令碼自訂筆記本執行個體](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-lifecycle-config.html)

1. 在連線命令的 `--verify-certificate` 引數中提供憑證路徑，以啟用憑證驗證。

   ```
   %sm_analytics emr connect --cluster-id cluster_id \
   --verify-certificate /home/user/certificateKey.pem ...
   ```

對於公有 CA 發行憑證，請將 `--verify-certificate` 參數設定為 `true` 來設定憑證驗證。

或者，您可以將 `--verify-certificate` 參數設定為 `false` 來停用憑證驗證。

您可以在 [使用連線命令連線至 Amazon EMR 叢集](#connect-emr-clusters-manually) 中找到 Amazon EMR 叢集的可用連線命令清單。

# 從 Studio 或 Studio Classic 終止 Amazon EMR 叢集
<a name="terminate-emr-clusters"></a>

以下程序說明如何從 Studio 或 Studio Classic 筆記本終止 Amazon EMR 叢集。

**若要終止 `Running` 狀態中的叢集，請導覽至可用的 Amazon EMR 叢集清單。**

1. 在 Studio UI 中，向下捲動至左側導覽功能表中的**資料**節點。

1. 向下導覽至 **EMR 叢集**節點。這會開啟一個頁面，列出您可以存取的 Amazon EMR 叢集。

1. 選取您要終止的叢集名稱，然後選擇**終止**。

1. 這會開啟確認視窗，通知您叢集的任何待處理工作或資料將在終止後永久遺失。再次選擇**終止**以確認。

# 從 Studio 或 Studio Classic 存取 Spark UI
<a name="studio-notebooks-access-spark-ui"></a>

以下各節提供了從 SageMaker AI Studio 或 Studio Classic 筆記本存取 Spark UI 的指示。Spark UI 可讓您監控並偵錯從 Studio 或 Studio Classic 筆記本提交以在 Amazon EMR 執行的 Spark 任務。SSH 通道與預先簽署的網址是存取 Spark 使用者介面的兩種方式。

## 設定 SSH 通道以供 Spark 使用者介面存取
<a name="studio-notebooks-emr-ssh-tunneling"></a>

若要設定 SSH 通道以存取 Spark 使用者介面，請遵循本節中的兩個選項之一。

設定 SSH 通道的選項：
+ [選項 1：使用本機連接埠轉送將 SSH 通道設定為主節點](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ssh-tunnel-local.html)
+ [第 1 部分選項 2：使用動態連接埠轉送將 SSH 通道設定為主節點](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ssh-tunnel.html)

  [第 2 部分選項 2：設定代理設定，以查看主節點上託管的網站](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-proxy.html)

如需有關檢視 Amazon EMR 叢集上託管的 Web 介面的詳細資訊，請參閱[檢視 Amazon EMR 叢集上託管的 Web 介面](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html)。您還可以存取您的 Amazon EMR 主控台以存取 Spark 使用者介面。

**注意**  
即使預簽名 URL 不可用，您也可以設定 SSH 通道。

## 預先簽章的 URL
<a name="studio-notebooks-emr-spark-ui-presigned-urls"></a>

若要建立可從 SageMaker Studio 或 Studio Classic 筆記本存取 Amazon EMR 上 Spark UI 的一鍵式 URL，您必須啟用下列 IAM 許可。選擇適用於您的選項：
+ **對於與 SageMaker Studio 或 Studio Classic 筆記本位於相同帳戶的 Amazon EMR 叢集：將下列許可新增至 SageMaker Studio 或 Studio Classic IAM 執行角色。**
+ **對於位於不同帳戶 (不是 SageMaker Studio 或 Studio Classic 筆記本) 中的 Amazon EMR 叢集：將下列許可新增至您為 [從 Studio 或 Studio Classic 列出 Amazon EMR 叢集](discover-emr-clusters.md) 建立的跨帳戶角色。**

**注意**  
您可以從下列區域的主控台存取預先簽署的 URL：  
美國東部 (維吉尼亞北部) 區域
美國西部 (加利佛尼亞北部) 區域
加拿大 (中部) 區域
歐洲 (法蘭克福) 區域
歐洲 (斯德哥爾摩) 區域
歐洲 (愛爾蘭) 區域
歐洲 (倫敦) 區域
歐洲 (巴黎) 區域
亞太區域 (東京) 區域
亞太區域 (首爾) 區域
亞太區域 (雪梨) 區域
亞太區域 (孟買) 區域
亞太地區 (新加坡) 區域
南美洲 (聖保羅)

 下列政策可讓您存取執行角色的預先簽署 URL。

```
{
        "Sid": "AllowPresignedUrl",
        "Effect": "Allow",
        "Action": [
            "elasticmapreduce:DescribeCluster",
            "elasticmapreduce:ListInstanceGroups",
            "elasticmapreduce:CreatePersistentAppUI",
            "elasticmapreduce:DescribePersistentAppUI",
            "elasticmapreduce:GetPersistentAppUIPresignedURL",
            "elasticmapreduce:GetOnClusterAppUIPresignedURL"
        ],
        "Resource": [
            "arn:aws:elasticmapreduce:region:account-id:cluster/*"
        ]
}
```

# 部落格和白皮書
<a name="studio-notebooks-emr-resources"></a>

下列部落格會針對影片檢閱使用情緒預測的案例研究，說明執行完整機器學習工作流程的程序。這包括資料準備、監控 Spark 工作，以及訓練和部署機器學習 (ML) 模型，以直接從您的 Studio 或 Studio Classic 筆記本取得預測。
+ [從 SageMaker Studio 或 Studio Classic 建立和管理 Amazon EMR 叢集，以執行互動式 Spark 和 ML 工作負載](https://aws.amazon.com/blogs/machine-learning/part-1-create-and-manage-amazon-emr-clusters-from-sagemaker-studio-to-run-interactive-spark-and-ml-workloads/)。
+ 若要將使用案例擴展到跨帳戶組態，其中 SageMaker Studio 或 Studio Classic 和您的 Amazon EMR 叢集部署在不同的 AWS 帳戶中，請參閱[從 SageMaker Studio 或 Studio Classic 建立和管理 Amazon EMR 叢集以執行互動式 Spark 和 ML 工作負載 - 第 2 部分](https://aws.amazon.com/blogs/machine-learning/part-2-create-and-manage-amazon-emr-clusters-from-sagemaker-studio-to-run-interactive-spark-and-ml-workloads/)。

另請參閱：
+ 演練在[啟用 Kerberos 的 Amazon EMR 叢集上使用 Network Load Balancer 設定 存取 Apache Livy](https://aws.amazon.com/blogs/big-data/access-apache-livy-using-a-network-load-balancer-on-a-kerberos-enabled-amazon-emr-cluster/)。
+ AWS [SageMaker Studio 或 Studio Classic 最佳實務](https://docs.aws.amazon.com/whitepapers/latest/sagemaker-studio-admin-best-practices/sagemaker-studio-admin-best-practices.html)的白皮書。

# 疑難排解
<a name="studio-notebooks-emr-troubleshooting"></a>

從 Studio 或 Studio Classic 筆記本使用 Amazon EMR 叢集時，您可能會在連線或使用過程中遇到各種潛在問題或挑戰。為了協助您進行疑難排解和解決這些錯誤，本節提供可能發生的常見問題指引。

以下是從 Studio 或 Studio Classic 筆記本連線或使用 Amazon EMR 叢集時可能發生的常見錯誤。

## 對 Livy 連線掛起或失敗進行故障診斷
<a name="studio-notebooks-emr-troubleshooting.memoryerror"></a>

以下是從 Studio 或 Studio Classic 筆記本使用 Amazon EMR 叢集時可能發生的 Livy 連線問題。
+ **您的 Amazon EMR 叢集發生記憶體不足錯誤。**

  透過 `sparkmagic` 進行 Livy 連線掛起或失敗的一個可能原因是您的 Amazon EMR 叢集遇到記憶體不足錯誤。

  依預設，Apache Spark 驅動程式的 Java 設定參數 `spark.driver.defaultJavaOptions` 設定為 `-XX:OnOutOfMemoryError='kill -9 %p'`。這表示當驅動程式遇到 `OutOfMemoryError` 時採取的預設動作是透過發送 SIGKILL 訊號來終止驅動程式。當 Apache Spark 驅動程式終止時，任何依賴該驅動程式透過 `sparkmagic` 的 Livy 連線都會掛起或失敗。這是因為 Spark 驅動程式負責管理 Spark 應用程式資源，包括任務排程與執行。如果沒有驅動程式，Spark 應用程式就無法運作，並且任何嘗試與它互動的嘗試都會失敗。

  如果您懷疑 Spark 叢集遇到記憶體問題，可以檢查 [Amazon EMR 日誌](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html)。由於記憶體不足錯誤而終止的容器通常以代碼 `137` 退出。在這種情況下，您需要重新啟動 Spark 應用程式並建立新的 Livy 連線，以繼續與 Spark 叢集的互動。

  您可以參考知識庫文章[如何解決 Amazon EMR 上的 Spark 中的錯誤「YARN 因超過記憶體限制而終止容器」？](https://repost.aws/knowledge-center/emr-spark-yarn-memory-limit) AWS re:Post 了解可用於解決out-of-memory問題的各種策略和參數。

  我們建議您參閱 [Amazon EMR 最佳實務指南](https://aws.github.io/aws-emr-best-practices/)，以取得有關在 Amazon EMR 叢集上執行 Apache Spark 工作負載的最佳實務和調整指引。
+ **第一次連線至 Amazon EMR 叢集時，您的 Livy 工作階段逾時會逾時。**

  當您最初使用 [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/) 連線至 Amazon EMR 叢集 (此擴展功能允許使用 [Apache Livy](https://livy.apache.org/) 透過 [SparkMagic](https://github.com/jupyter-incubator/sparkmagic) 程式庫連接到遠端 Spark (Amazon EMR) 叢集) 時，您可能會遇到連線逾時錯誤：

  `An error was encountered: Session 0 did not start up in 60 seconds.`

  如果您的 Amazon EMR 叢集在建立連線時需要初始化 Spark 應用程式，則看到連線逾時錯誤的機會就會增加。

  為了減少透過分析擴展模組使用 Livy 連線至 Amazon EMR 叢集時發生逾時的可能性，`sagemaker-studio-analytics-extension` 版本 `0.0.19` 及更新版本會將預設伺服器工作階段逾時覆寫為 `120` 秒，而非 `sparkmagic` 的預設值 `60` 秒。

  我們建議您透過執行下列升級命令來更快地升級您的擴充 `0.0.18` 功能。

  ```
  pip install --upgrade sagemaker-studio-analytics-extension
  ```

  請注意，在 `sparkmagic` 中提供自訂逾時組態時，`sagemaker-studio-analytics-extension` 會遵循此覆寫。不過，將工作階段逾時設定為 `60` 秒會自動觸發 `sagemaker-studio-analytics-extension` 預設伺服器工作階段逾時 `120`秒。