

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

# 使用 EMR Serverless 準備資料
<a name="studio-notebooks-emr-serverless"></a>

從 [SageMaker Distribution 映像](sagemaker-distribution.md)版本 `1.10` 開始，Amazon SageMaker Studio 與 EMR Serverless 整合。在 SageMaker Studio 的 JupyterLab 筆記本內，資料科學家和資料工程師可以探索並連線至 EMR Serverless 應用程式，然後以互動方式探索、視覺化和準備大規模 Apache Spark 或 Apache Hive 工作負載。此整合允許大規模執行互動式資料預先處理，以準備 ML 模型訓練和部署。

具體而言，[SageMaker AI Distribution](https://github.com/aws/sagemaker-distribution/tree/main/build_artifacts/v1) 映像版本 `1.10` 中的更新版本 [https://pypi.org/project/sagemaker-studio-analytics-extension/](https://pypi.org/project/sagemaker-studio-analytics-extension/) 會利用 Apache Livy 與 EMR Serverless 之間的整合，允許透過 JupyterLab 筆記本連線至 Apache Livy 端點。本節假設事先了解 [EMR Serverless 互動式應用程式](https://docs.aws.amazon.com/EMR-Serverless-UserGuide/interactive-workloads.html)。

**重要**  
使用 Studio 時，您只能針對從私有空間啟動的 JupyterLab 應用程式探索並連線至 EMR Serverless 應用程式。確保 EMR Serverless 應用程式與您的 Studio 環境位於相同的 AWS 區域。

## 先決條件
<a name="studio-set-up-emr-serverless-prerequisites"></a>

開始從 JupyterLab 筆記本中使用 EMR Serverless 執行互動式工作負載之前，請確定您符合下列先決條件：

1. 您的 JupyterLab 空間必須使用 SageMaker Distribution 映像版本 `1.10` 或更高版本。

1. 使用 Amazon EMR 版本 `6.14.0` 或更新版本建立 EMR Serverless 互動式應用程式。您可以遵循[從 Studio 建立 EMR Serverless 應用程式](create-emr-serverless-application.md)中的步驟，從 Studio 使用者介面建立 EMR Serverless 應用程式。
**注意**  
如需最簡單的設定，您可以在 Studio UI 中建立 EMR Serverless 應用程式，而無需變更**虛擬私有雲端 (VPC)** 選項的任何預設設定。這允許在您的網域 VPC 內建立應用程式，而不需要任何聯網組態。在此情況下，您可以略過下列聯網設定步驟。

1. 在[設定 Amazon EMR 叢集的網路存取](studio-notebooks-emr-networking.md)中檢閱聯網和安全要求。具體而言，請確定您：
   + 在 Studio 帳戶與 EMR Serverless 帳戶之間建立 VPC 對等互連。
   + 將路由新增至這兩個帳戶中的私有子網路路由表。
   + 設定連接到 Studio 網域的安全群組以允許傳出流量，以及設定 VPC 的安全群組，您計劃在其中執行 EMR Serverless，以允許來自 Studio 執行個體安全群組的傳入 TCP 流量。

1. 若要在 EMR Serverless 上存取您的互動式應用程式，並在 SageMaker Studio 中執行從 JupyterLab 筆記本提交的工作負載，您必須指派特定許可和角色。如需必要角色和許可的詳細資訊，請參閱[設定許可，以啟用從 SageMaker Studio 列出和啟動 Amazon EMR 應用程式](studio-emr-serverless-permissions.md)一節。

**Topics**
+ [先決條件](#studio-set-up-emr-serverless-prerequisites)
+ [設定許可，以啟用從 SageMaker Studio 列出和啟動 Amazon EMR 應用程式](studio-emr-serverless-permissions.md)
+ [從 Studio 建立 EMR Serverless 應用程式](create-emr-serverless-application.md)
+ [從 Studio 連線至 EMR Serverless 應用程式](connect-emr-serverless-application.md)
+ [從 Studio UI 停止或刪除 EMR Serverless 應用程式](terminate-emr-serverless-application.md)

# 設定許可，以啟用從 SageMaker Studio 列出和啟動 Amazon EMR 應用程式
<a name="studio-emr-serverless-permissions"></a>

在本節中，我們會詳細說明從 SageMaker Studio 列出和連線至 EMR Serverless 應用程式所需的角色和許可，並考量 Studio 和 EMR Serverless 應用程式部署在同一 AWS 帳戶或跨不同帳戶的情況。

您必須新增必要許可的角色取決於 Studio 和 EMR Serverless 應用程式是否位於相同 AWS 帳戶 (*單一帳戶*) 或個別帳戶 (*跨帳戶*)。涉及兩種類型的角色：
+ 執行角色
  + EMR Serverless 使用的[執行時間執行角色](https://docs.aws.amazon.com/http://emr/latest/EMR-Serverless-UserGuide/jobs-spark.html#spark-defaults-executionRoleArn) （以角色為基礎的存取控制角色）：這些是 EMR Serverless 任務執行環境用來存取執行時間期間所需其他服務 AWS 和資源的 IAM 角色，例如 Amazon S3 用於資料存取、CloudWatch 用於記錄、存取 AWS Glue Data Catalog 或根據您的工作負載需求的其他 服務。我們建議您在 EMR Serverless 應用程式執行所在的帳戶中建立這些角色。

    若要進一步了解執行時期角色，請參閱《EMR Serverless 使用者指南》**中的[工作執行時期角色](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)。
**注意**  
您可以為 EMR Serverless 應用程式定義多個 RBAC 角色。這些角色可以基於您組織內不同使用者或群組所需的責任和存取層級。如需 RBAC 許可的詳細資訊，請參閱 [Amazon EMR Serverless 的安全最佳實務](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-best-practices.html#security-practice-rbac)。
  + SageMaker AI 執行角色：執行角色允許 SageMaker AI 執行特定任務，例如從 Amazon S3 儲存貯體讀取資料、將日誌寫入 CloudWatch，以及存取工作流程可能需要的其他 AWS 服務。SageMaker AI 執行角色也具有稱為 `iam:PassRole` 的特殊許可，允許 SageMaker AI 將臨時執行時期執行角色傳遞至 EMR Serverless 應用程式。這些角色提供 EMR Serverless 應用程式在執行時與其他 AWS 資源互動所需的許可。
+ 可擔任的角色 (也稱為*服務存取角色*)：
  + 這些是 SageMaker AI 執行角色可以擔任的 IAM 角色，以執行與管理 EMR Serverless 應用程式相關的操作。這些角色定義列出、連線至或管理 EMR Serverless 應用程式時所需的許可和存取政策。它們通常用於跨帳戶案例，其中 EMR Serverless 應用程式位於與 SageMaker AI 網域不同的 AWS 帳戶中。擁有 EMR Serverless 應用程式的專用 IAM 角色有助於遵循最低權限原則，並確保 Amazon EMR 僅具有執行任務所需的許可，同時保護 AWS 帳戶中的其他資源。

透過正確了解和設定這些角色，您可以確保 SageMaker Studio 具有與 EMR Serverless 應用程式互動的必要許可，無論它們是部署在相同的帳戶中還是跨不同的帳戶部署。

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

下圖說明當 Studio 和應用程式部署在同一個 AWS 帳戶中時，從 Studio 列出和連線至 EMR Serverless 應用程式所需的角色和許可。

![\[此圖顯示當 Studio 和應用程式位於相同 AWS 帳戶中時，從 Studio 列出和連接 EMR Serverless 應用程式所需的角色和許可。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-permissions-setup-singleaccount.png)


如果您的 Amazon EMR 應用程式和 Studio 部署在相同的 AWS 帳戶中，請遵循下列步驟：

1. **步驟 1**：擷取您在 [Amazon S3 主控台](https://console.aws.amazon.com/S3)中用於資料來源和輸出資料儲存的 Amazon S3 儲存貯體 ARN。

   若要了解如何依名稱尋找儲存貯體，請參閱[存取和列出 Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)。如需如何建立 Amazon S3 儲存貯體的相關資訊，請參閱[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

1. **步驟 2**：在您的帳戶中為您的 EMR Serverless 應用程式建立至少一個任務執行時期執行角色 (上述*單一帳戶*使用案例圖表中的 `EMRServerlessRuntimeExecutionRoleA`)。選擇**自訂信任政策**作為信任的實體。新增任務所需的許可 您至少需要 Amazon S3 儲存貯體的完整存取權，以及建立和讀取 AWS Glue Data Catalog 的存取權。

   如需如何為 EMR Serverless 應用程式建立新執行時期執行角色的詳細指示，請遵循下列步驟：

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

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

   1. 新增執行時期角色所需的許可、為政策命名，然後選擇**建立政策**。

      您可以參考 [EMR Serverless 的任務執行時期角色](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)，以尋找 EMR Serverless 執行時期角色的範例執行時期政策。

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

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

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

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "emr-serverless.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

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

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

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

   透過這些角色，您和團隊成員可以連線到同一個應用程式，每個應用程式都使用執行時期角色，其許可範圍將與您個別的資料存取層級相符。
**注意**  
Spark 工作階段以不同方式操作。Spark 工作階段會根據從 Studio 使用的執行角色進行隔離，因此具有不同執行角色的使用者將具有個別隔離的 Spark 工作階段。此外，如果您已啟用網域的來源身分，則會進一步隔離不同來源身分的 Spark 工作階段。

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

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

   如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。
**注意**  
 或者，SageMaker AI 的新手可以透過使用適當的許可自動建立新的 SageMaker AI 執行角色來簡化其設定程序。在此情況下，請略過步驟 3 和 4。反之，使用者可以：  
從 [SageMaker AI 主控台](https://console.aws.amazon.com/sagemaker)左側導覽中的**網域**功能表建立新網域時，選擇**為組織設定**選項。
從主控台的**角色管理員**功能表建立新的執行角色，然後將角色連接到現有的網域或使用者設定檔。
建立角色時，請在**使用者將執行哪些 ML 活動？**中選擇**執行 Studio EMR Serverless 應用程式**選項 然後，提供 Amazon S3 儲存貯體的名稱，以及您想要 EMR Serverless 應用程式使用的任務執行時期執行角色 (步驟 2)。  
SageMaker Role Manager 會自動將執行和連線至 EMR Serverless 應用程式所需的許可新增至新的執行角色。使用 [SageMaker Role Manager]()，您只能將一個執行時期角色指派給您的 EMR Serverless 應用程式，而且應用程式必須在 Studio 部署所在的相同帳戶中執行，從而使用在該相同帳戶內建立的執行時期角色。

1. **步驟 4**：將下列許可連接至存取 EMR Serverless 應用程式的 SageMaker AI 執行角色。

   1. 在 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 開啟 IAM 主控台。

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

   1. 遵循角色的連結。

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

   1. 在 **JSON** 索引標籤中，新增允許 EMR Serverless 存取和操作的 Amazon EMR Serverless 許可。如需政策文件的詳細資訊，請參閱 [參考政策](#studio-set-up-emr-serverless-permissions-reference) 中的 *EMR Serverless 政策*。將陳述式清單複製到您角色的內嵌政策之前，請將 *region*、*accountID* 和傳遞的 *EMRServerlessAppRuntimeRole* 取代為其實際值。
**注意**  
您可以視需要在許可內包含任意數量的執行時間角色 ARN 字串，以逗號分隔。

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

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

   1. 重複**建立內嵌政策**步驟，以新增另一個內嵌政策，授予角色更新網域、使用者設定檔和空間的許可。如需 `SageMakerUpdateResourcesPolicy` 政策文件的詳細資訊，請參閱 [參考政策](#studio-set-up-emr-serverless-permissions-reference) 中的*網域、使用者設定檔和空間更新動作政策*。將陳述式清單複製到角色的內嵌政策之前，請將 *region* 和 *accountID* 取代為實際值。

1. **步驟 5**：

   將執行時期角色清單與您的使用者設定檔或網域建立關聯，以便您以視覺化方式瀏覽角色清單，並選取從 JupyterLab [連線至 EMR Serverless 應用程式](connect-emr-serverless-application.md)時要使用的角色。您可以使用 SageMaker AI 主控台或下列指令碼。接著，從筆記本建立的所有 Apache Spark 或 Apache Hive 任務，只會存取連接至所選執行時期角色的政策所允許的資料及資源。
**重要**  
若無法完成此步驟，將阻止您將 JupyterLab 筆記本連線至 EMR Serverless 應用程式。

------
#### [ 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. 選擇**提交**。

   當您下次透過 JupyterLab 連線至 EMR Serverless 應用程式時，執行時期角色應該會出現在下拉式功能表中以供選取。

------
#### [ Python script ]

   在使用您已更新其許可的 SageMaker AI 執行角色，從私有空間啟動的 JupyterLab 應用程式中，請在終端機中執行下列命令。將 `domainID`、`user-profile-name`、`studio-accountID` 和 `EMRServerlessRuntimeExecutionRole` 取代為其適當的值。此程式碼片段會更新特定使用者設定檔 (`client.update_user_profile`) 或網域設定 (`client.update_domain`) 的使用者設定檔設定，特別是關聯您先前建立的 EMR Serverless 執行時期執行角色。

   ```
   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",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'ExecutionRoleArns': ["arn:aws:iam::studio-accountID:role/EMRServerlessRuntimeExecutionRoleA", 
                                "arn:aws:iam::studio-accountID:role/EMRServerlessRuntimeExecutionRoleAA"]
           }
           
       }
   })
   resp = client.describe_domain(DomainId="domainID")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------

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

下圖說明當 Studio 和應用程式部署在不同 AWS 帳戶中時，從 Studio 列出和連線至 EMR Serverless 應用程式所需的角色和許可。

![\[此圖顯示當 Studio 和應用程式位於不同 AWS 帳戶中時，從 Studio 列出和連線 EMR Serverless 應用程式所需的角色和許可。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-permissions-setup-crossaccount.png)


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

開始之前：
+ 擷取私有空間所使用的 SageMaker AI 執行角色 ARN。如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。
+ 擷取您將用於 [Amazon S3 主控台](https://console.aws.amazon.com/S3)中資料來源和輸出資料儲存的 Amazon S3 儲存貯體 ARN。

  如需如何建立 Amazon S3 儲存貯體的相關資訊，請參閱[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。若要了解如何依名稱尋找儲存貯體，請參閱[存取和列出 Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)。

如果您的 EMR Serverless 應用程式和 Studio 部署在不同的 AWS 帳戶中，您可以在這兩個帳戶上設定許可。

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

請遵循下列步驟，在 EMR Serverless 應用程式執行所在的帳戶 (也稱為*信任帳戶*) 上建立必要的角色和政策：

1. **步驟 1**：在您的帳戶中為您的 EMR Serverless 應用程式建立至少一個任務執行時期執行角色 (上述*跨帳戶*圖表中的 `EMRServerlessRuntimeExecutionRoleB`)。選擇**自訂信任政策**作為信任的實體。新增任務所需的許可 您至少需要 Amazon S3 儲存貯體的完整存取權，以及建立和讀取 AWS Glue Data Catalog 的存取權。

   如需如何為 EMR Serverless 應用程式建立新執行時期執行角色的詳細指示，請遵循下列步驟：

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

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

   1. 新增執行時期角色所需的許可、為政策命名，然後選擇**建立政策**。

      如需 EMR Serverless 執行時期角色的範例執行時期政策，請參閱 [Amazon EMR Serverless 的任務執行時期角色](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)。

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

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

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

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "emr-serverless.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

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

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

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

   透過這些角色，您和團隊成員可以連線到同一個應用程式，每個應用程式都使用執行時期角色，其許可範圍將與您個別的資料存取層級相符。
**注意**  
Spark 工作階段以不同方式操作。Spark 工作階段會根據從 Studio 使用的執行角色進行隔離，因此具有不同執行角色的使用者將具有個別隔離的 Spark 工作階段。此外，如果您已啟用網域的來源身分，則會進一步隔離不同來源身分的 Spark 工作階段。

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

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

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

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

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

   1. 在 **JSON** 索引標籤中，新增允許 EMR Serverless 存取和操作的 Amazon EMR Serverless 許可。如需政策文件的詳細資訊，請參閱 [參考政策](#studio-set-up-emr-serverless-permissions-reference) 中的 *EMR Serverless 政策*。將陳述式清單複製到您角色的內嵌政策之前，請將 `region`、`accountID` 和傳遞的 `EMRServerlessAppRuntimeRole` 取代為其實際值。
**注意**  
這裡的 `EMRServerlessAppRuntimeRole` 是在步驟 1 中建立的任務執行時期執行角色 (上述*跨帳戶*圖表中的 `EMRServerlessAppRuntimeRoleB`)。您可以視需要在許可內包含任意數量的執行時間角色 ARN 字串，以逗號分隔。

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

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

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

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

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

      將 `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"
              }
          ]
      }
      ```

------

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

   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-serverless-permissions-crossaccount-studioaccount"></a>

在部署 Studio 的帳戶 (也稱為*信任帳戶*) 上，請使用存取信任帳戶中資源所需的許可，更新存取 EMR Serverless 應用程式的 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**：將下列許可連接至存取 EMR Serverless 應用程式的 SageMaker AI 執行角色。

   1. 在 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

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

   1. 遵循角色的連結。

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

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

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

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

   1. 重複**建立內嵌政策**步驟，以新增另一個政策，授與執行角色擔任 `AssumableRole` 的許可，然後執行角色存取政策所允許的動作。

      將 `emr-account` 取代為 Amazon EMR Serverless 帳戶 ID，並將 `AssumableRole` 取代為 Amazon EMR Serverless 帳戶中建立的可擔任角色名稱。

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

****  

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

------

1. **步驟 3**：

   將執行時期角色清單與您的網域或使用者設定檔建立關聯，以便您以視覺化方式瀏覽角色清單，並選取從 JupyterLab [連線至 EMR Serverless 應用程式](connect-emr-serverless-application.md)時要使用的角色。您可以使用 SageMaker AI 主控台或下列指令碼。接著，從筆記本建立的所有 Apache Spark 或 Apache Hive 任務，只會存取連接至所選執行時期角色的政策所允許的資料及資源。
**重要**  
若無法完成此步驟，將阻止您將 JupyterLab 筆記本連線至 EMR Serverless 應用程式。

------
#### [ 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 執行時期執行角色的 ARNs。

   1. 選擇**提交**。

   當您下次透過 JupyterLab 連線至 EMR Serverless 應用程式時，執行時期角色應該會出現在下拉式功能表中以供選取。

------
#### [ Python script ]

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

   ```
   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",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServerlessRuntimeExecutionRoleA", 
                                "arn:aws:iam::emr-accountID:role/AnotherRuntimeExecutionRole"]
           }
           
       }
   })
   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))
   ```

------

## 參考政策
<a name="studio-set-up-emr-serverless-permissions-reference"></a>
+ **EMR Serverless 政策**：此政策允許管理 EMR Serverless 應用程式，包括列出、建立 (使用必要的 SageMaker AI 標籤)、啟動、停止、取得詳細資訊、刪除、存取 Livy 端點，以及取得任務執行儀表板。它也允許將所需的 EMR Serverless 應用程式執行時期角色傳遞至服務。
  + `EMRServerlessListApplications`：允許指定區域和 AWS 帳戶中所有 EMR Serverless 資源的 ListApplications 動作。
  + `EMRServerlessPassRole`：允許在提供的 AWS 帳戶中傳遞指定的執行期角色 （僅當角色傳遞至 時）`emr-serverless.amazonaws.com service`。
  + `EMRServerlessCreateApplicationAction`：允許對指定區域和 AWS 帳戶中的 EMR Serverless 資源執行 CreateApplication 和 TagResource 動作。不過，它需要建立或標記的資源具有非 null 值的特定標籤金鑰 (`sagemaker:domain-arn`、`sagemaker:user-profile-arn` 和 `sagemaker:space-arn`)。
  + `EMRServerlessDenyTaggingAction`：如果資源未設定任何指定的標籤索引鍵 (`sagemaker:domain-arn`、 和 `sagemaker:space-arn`)`sagemaker:user-profile-arn`，則指定區域和 AWS 帳戶中 EMR Serverless 資源上的 TagResource 和 UntagResource 動作。
  + `EMRServerlessActions`：允許 EMR Serverless 資源上的各種動作 (`StartApplication`、`StopApplication`、`GetApplication`、`DeleteApplication`、`AccessLivyEndpoints` 和 `GetDashboardForJobRun`)，但僅在資源設定了非 null 值的指定標籤金鑰 (`sagemaker:domain-arn`、`sagemaker:user-profile-arn` 和 `sagemaker:space-arn`)。

  所提供 JSON 文件中定義的 IAM 政策會授予這些許可，但會限制對 EMR Serverless 應用程式上存在的特定 SageMaker AI 標籤的存取，以確保只可以管理與特定 SageMaker AI 網域、使用者設定檔和空間相關聯的 Amazon EMR Serverless 資源。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "EMRServerlessListApplications",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:ListApplications"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*"
          },
          {
              "Sid": "EMRServerlessPassRole",
              "Effect": "Allow",
              "Action": "iam:PassRole",
              "Resource": "arn:aws:iam::111122223333:role/EMRServerlessAppRuntimeRole",
              "Condition": {
                  "StringLike": {
                      "iam:PassedToService": "emr-serverless.amazonaws.com"
                  }
              }
          },
          {
              "Sid": "EMRServerlessCreateApplicationAction",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:CreateApplication",
                  "emr-serverless:TagResource"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*",
              "Condition": {
                  "ForAllValues:StringEquals": {
                      "aws:TagKeys": [
                          "sagemaker:domain-arn",
                          "sagemaker:user-profile-arn",
                          "sagemaker:space-arn"
                      ]
                  },
                  "Null": {
                      "aws:RequestTag/sagemaker:domain-arn": "false",
                      "aws:RequestTag/sagemaker:user-profile-arn": "false",
                      "aws:RequestTag/sagemaker:space-arn": "false"
                  }
              }
          },
          {
              "Sid": "EMRServerlessDenyTaggingAction",
              "Effect": "Deny",
              "Action": [
                  "emr-serverless:TagResource",
                  "emr-serverless:UntagResource"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*",
              "Condition": {
                  "Null": {
                      "aws:ResourceTag/sagemaker:domain-arn": "true",
                      "aws:ResourceTag/sagemaker:user-profile-arn": "true",
                      "aws:ResourceTag/sagemaker:space-arn": "true"
                  }
              }
          },
          {
              "Sid": "EMRServerlessActions",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:StartApplication",
                  "emr-serverless:StopApplication",
                  "emr-serverless:GetApplication",
                  "emr-serverless:DeleteApplication",
                  "emr-serverless:AccessLivyEndpoints",
                  "emr-serverless:GetDashboardForJobRun"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/applications/*",
              "Condition": {
                  "Null": {
                      "aws:ResourceTag/sagemaker:domain-arn": "false",
                      "aws:ResourceTag/sagemaker:user-profile-arn": "false",
                      "aws:ResourceTag/sagemaker:space-arn": "false"
                  }
              }
          }
      ]
  }
  ```

------
+ **網域、使用者設定檔和空間更新動作政策**：下列政策授與許可，以更新指定區域和 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/*"
              ]
          }
      ]
  }
  ```

------

# 從 Studio 建立 EMR Serverless 應用程式
<a name="create-emr-serverless-application"></a>

資料科學家和資料工程師可以直接從 Studio 使用者介面建立 EMR Serverless 應用程式。開始之前，請確定您已如 [設定許可，以啟用從 SageMaker Studio 列出和啟動 Amazon EMR 應用程式](studio-emr-serverless-permissions.md) 一節所述設定必要的許可。這些許可授予 Studio 建立、啟動、檢視、存取和終止應用程式的能力。

若要從 Studio 建立 EMR Serverless 應用程式：

1. 在 Studio UI 中，導覽至左側面板，並在左側導覽功能表中選取**資料**節點。然後，捲動並選擇 **Amazon EMR 應用程式和叢集**選項。這會開啟一個頁面，其中顯示您可以從 Studio 環境內**無伺服器應用程式**索引標籤下存取的 Amazon EMR 應用程式。

1. 選擇右上角的**建立無伺服器應用程式**按鈕。這會開啟**建立應用程式**頁面，類似於您在**應用程式設定選項**中選擇**使用自訂設定**時，將在 [EMR Serverless 主控台](https://console.aws.amazon.com/emrserverless)中看到的檢視。

1. 提供應用程式的必要詳細資訊，包括名稱和您要設定的任何特定可設定參數，然後選擇**建立應用程式**。  
![\[從 Studio 建立 EMR Serverless 應用程式的表單。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-create-app.png)

   所有組態設定都有預設值，而且可選擇性地修改。如需每個可用參數的詳細資訊，請參閱 EMR Serverless 使用者指南中的[設定應用程式](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/application-capacity.html)。
**注意**  
在 Studio UI 中建立應用程式的過程中，您可以選擇**建立應用程式**或**建立和啟動應用程式**。根據您的選擇，應用程式將分別進入 `Creating` 或 `Starting` 狀態。  
如果您選擇建立應用程式而不立即將其啟動，請確保**在任務提交時自動啟動應用程式**選項保持選取狀態。這將確保當您稍後提交要在其上執行的任務時，應用程式會自動轉換為 `Starting` 狀態。
如需最簡單的設定，建議您將**虛擬私有雲端 (VPC)** 選項設定為其預設值，即**網路連線**區段下的 **VPC 中的資源沒有網路連線**。這允許在您的網域 VPC 內建立應用程式，而不需要任何額外的聯網組態。  
 在任何其他情況下，請確定您執行下列步驟：  
對等互連您的 VPC。
將路由新增至您的私有子網路路由表。
設定您的安全群組，如[設定 Amazon EMR 叢集的網路存取](studio-notebooks-emr-networking.md)中所述。
這確保您的應用程式進行適當的聯網設定，超出了預設的**無網路連線**選項。
對於從 Studio Classic UI 建立的應用程式，會自動套用下列組態：  
已啟用的 Apache Livy 端點。
應用程式會加上下列標籤：  
sagemaker:user-profile-arn
sagemaker:domain-arn
sagemaker:space-arn
如果您在 Studio 外部建立應用程式，請確定您手動啟用 Apache Livy 端點，並將相同的標籤集套用至應用程式。

一旦建立了應用程式，Studio Classic UI 會顯示*應用程式已成功建立*訊息，而新的應用程式會出現在**無伺服器應用程式**清單中。

若要連線至 EMR Serverless 應用程式，請參閱[從 Studio 連線至 EMR Serverless 應用程式](connect-emr-serverless-application.md)

# 從 Studio 連線至 EMR Serverless 應用程式
<a name="connect-emr-serverless-application"></a>

資料科學家和資料工程師可以直接從 Studio 使用者介面探索 EMR Serverless 應用程式，然後連線至其中。開始之前，請先遵循[從 Studio 建立 EMR Serverless 應用程式](create-emr-serverless-application.md)中的指示，確認您已建立 EMR Serverless 應用程式。

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

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

**若要從 Studio UI 將 EMR Serverless 應用程式連線至新的 JupyterLab 筆記本：**

1. 在 Studio UI 中，導覽至左側面板，並在左側導覽功能表中選取**資料**節點。然後，捲動並選擇 **Amazon EMR 應用程式和叢集**選項。這會開啟一個頁面，其中顯示您可以從 Studio 環境內**無伺服器應用程式**索引標籤下存取的 Amazon EMR 應用程式。
**注意**  
如果您或您的管理員已設定允許跨帳戶存取 EMR Serverless 應用程式的許可，您可以檢視您已授予 Studio 存取權之所有帳戶的合併應用程式清單。

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

1. 
   + 選取您要從中啟動 JupyterLab 應用程式的私有空間，然後選擇**開啟筆記本**。這會從您選擇的空間啟動 JupyterLab 應用程式，並開啟新的筆記本。
   + 或者，您也可以選擇模態視窗頂端的**建立新空間**按鈕來建立新的私有空間。輸入空間的名稱，然後選擇**建立空間並開啟筆記本**。這會建立一個具有預設執行個體類型和最新可用 SageMaker Distribution 映像的私有空間、啟動 JupyterLab 應用程式，並開啟新的筆記本。

1. 選擇 EMR Serverless 應用程式可以為任務執行而擔任的 IAM 執行時期執行角色名稱。選擇後，連線命令會填入筆記本的第一個儲存格，並啟動與 EMR Serverless 應用程式的連線。
**重要**  
若要成功將 JupyterLab 筆記本連線至 EMR Serverless 應用程式，您必須先將執行時期角色清單與您的網域或使用者設定檔建立關聯，如[設定許可，以啟用從 SageMaker Studio 列出和啟動 Amazon EMR 應用程式](studio-emr-serverless-permissions.md)中所述。若無法完成此步驟，將阻止您建立連線。

   一旦連線成功，訊息就會確認連線、啟動 EMR Serverless 應用程式，以及啟動 Spark 工作階段。
**注意**  
當您連線至 EMR Serverless 應用程式時，其狀態會從 `Stopped` 或 `Created` 轉換為 `Started`。

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

1. 選擇筆記本右上角的**叢集**按鈕。這會開啟模態視窗，列出您可以存取的 EMR Serverless 應用程式。您可以在**無伺服器應用程式索引標籤中**查看應用程式。

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

1. EMR Serverless 支援在設定所需許可時預先載入的執行時期 IAM 角色，如[設定許可，以啟用從 SageMaker Studio 列出和啟動 Amazon EMR 應用程式](studio-emr-serverless-permissions.md)中所述。若無法完成此步驟，將阻止您建立連線。

   您可以從 **Amazon EMR 執行角色**下拉式功能表中選取您的角色。當您連線至叢集時，Studio 會將程式碼區塊新增至筆記本的作用中儲存格，以建立連線。

1. 作用中儲存格會填入並執行。此儲存格包含連線魔術命令，可將您的筆記本連線至應用程式。

   一旦連接成功，將顯示一則訊息確認連線並啟動 Spark 應用程式。您可以開始將資料處理任務提交至 EMR Serverless 應用程式。

# 從 Studio UI 停止或刪除 EMR Serverless 應用程式
<a name="terminate-emr-serverless-application"></a>

您可以從 Studio UI 中的應用程式清單中停止 (轉換至 `Stopped` 狀態) 或刪除 (轉換至 `Deleted` 狀態) EMR Serverless 應用程式。

**若要停止或刪除應用程式，請導覽至可用的 EMR Serverless 應用程式清單。**

1. 在 Studio UI 中，導覽至左側面板，並在左側導覽功能表中選取**資料**節點。然後，捲動並選擇 **Amazon EMR 應用程式和叢集**選項。這會開啟一個頁面，其中顯示您可以從 Studio 環境內**無伺服器應用程式**索引標籤下存取的 Amazon EMR 應用程式。

1. 選取您要停止或刪除的應用程式名稱，然後選擇對應的**停止**或**刪除**按鈕。

1. 確認訊息會通知您，任何待定任務都將永久失去。