在 Service Catalog 中設定 Amazon EMR CloudFormation 範本 - Amazon SageMaker AI

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

在 Service Catalog 中設定 Amazon EMR CloudFormation 範本

本主題假設管理員熟悉 AWS CloudFormation產品組合和產品 AWS Service Catalog,以及 Amazon EMR

為了簡化從 Studio 建立 Amazon EMR 叢集,管理員可以將 Amazon EMR CloudFormation 範本註冊為AWS Service Catalog產品組合中的產品。若要讓資料科學家使用範本,他們必須將產品組合與 Studio 或 Studio Classic 中使用的 SageMaker AI 執行角色建立關聯。最後,若要允許使用者探索範本、佈建叢集,以及從 Studio 或 Studio Classic 連線至 Amazon EMR 叢集,管理員需要設定適當的存取許可。

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

下列指示使用end-to-end CloudFormation 堆疊來設定 Studio 或 Studio Classic 網域、使用者設定檔、Service Catalog 產品組合,並填入 Amazon EMR 啟動範本。下列步驟會反白顯示管理員必須在end-to-end堆疊中套用的特定設定,讓 Studio 或 Studio Classic 能夠存取 Service Catalog 產品和佈建 Amazon EMR 叢集。

注意

GitHub 儲存庫 aws-samples/sagemaker-studio-emr 包含end-to-end CloudFormation 堆疊,可部署必要的 IAM 角色、聯網、SageMaker 網域、使用者描述檔、Service Catalog 產品組合,並新增 Amazon EMR 啟動 CloudFormation 範本。範本在 Studio 或 Studio Classic 與 Amazon EMR 叢集之間提供不同的身分驗證選項。在這些範例範本中,父 CloudFormation 堆疊會將 SageMaker AI VPC、安全群組和子網路參數傳遞至 Amazon EMR 叢集範本。

sagemaker-studio-emr/cloudformation/emr_servicecatalog_templates 儲存庫包含各種範例 Amazon EMR CloudFormation 啟動範本,包括單一帳戶和跨帳戶部署的選項。

如需可用來連線至 從 SageMaker Studio 或 Studio Classic 連線至 Amazon EMR 叢集 Amazon EMR 叢集之身分驗證方法的詳細資訊,請參閱 。

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

步驟 0:檢查您的聯網並準備 CloudFormation 堆疊

開始之前:

  • 請確定您已檢閱 中的聯網和安全需求設定 Amazon EMR 叢集的網路存取

  • 您必須擁有支援您選擇的身分驗證方法的現有end-to-end CloudFormation 堆疊。您可以在 aws-samples/sagemaker-studio-emr GitHub 儲存庫中找到這類 CloudFormation 範本的範例。下列步驟會強調end-to-end堆疊中的特定組態,以啟用 Studio 或 Studio Classic 中的 Amazon EMR 範本。

步驟 1:將您的 Service Catalog 產品組合與 SageMaker AI 建立關聯

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

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

SageMakerExecutionRole.ArnSageMakerStudioEMRProductPortfolio.ID 取代為實際值。

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

如需必要 IAM 許可集的詳細資訊,請參閱許可區段。

步驟 2:參考 Service Catalog 產品中的 Amazon EMR 範本

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

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

在 Service Catalog 產品定義中,叢集的 AWS CloudFormation 範本是透過 URL 參考。設為 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 範本

用於在 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" ] } }

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

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

從 CloudFormation Amazon EMR 範本組合的動態表單圖解,以從 Studio 或 Studio Classic 建立 Amazon EMR 叢集。

請造訪 從 Studio 或 Studio Classic 啟動 Amazon EMR 叢集 ,了解如何使用這些 Amazon EMR 範本從 Studio 或 Studio Classic 啟動叢集。

步驟 4:設定許可,以從 Studio 啟用列出和啟動 Amazon EMR 叢集

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

您必須新增這些許可的角色,取決於 Studio 或 Studio Classic 和 Amazon EMR 是部署在相同的帳戶 (選擇單一帳戶) 還是不同帳戶 (選擇跨帳戶)。

重要

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

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

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

    如需 SageMaker AI 中空間和執行角色的資訊,請參閱 了解網域空間許可和執行角色

    如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊,請參閱 取得您的執行角色

  2. 步驟 2:將下列許可連接到存取 Amazon EMR 叢集的 SageMaker AI 執行角色。

    1. 導覽至 IAM 主控台

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

    3. 遵循您的角色連結。

    4. 選擇新增許可,然後選擇建立內嵌政策

    5. JSON 索引標籤中,新增允許 Amazon EMR 存取和操作的 Amazon EMR 許可。如需政策文件的詳細資訊,請參閱在 中列出 Amazon EMR 政策參考政策。將陳述式清單複製到角色的內嵌政策之前region,請將 、 和 accountID取代為實際值。

    6. 選擇下一步,然後提供政策名稱

    7. 選擇 建立政策

    8. 重複建立內嵌政策步驟,以新增另一個政策,授予執行角色使用 AWS CloudFormation 範本佈建新 Amazon EMR 叢集的許可。如需政策文件的詳細資訊,請參閱在 中建立 Amazon EMRclusters 政策參考政策。將陳述式清單複製到角色的內嵌政策之前,請將 regionaccountID取代為實際值。

注意

角色型存取控制 (RBAC) 連線至 Amazon EMR 叢集的使用者也應該參閱 當您的 Amazon EMR 叢集和 Studio 位於相同帳戶時,設定執行期的角色身分驗證

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

如需 SageMaker AI 中空間和執行角色的資訊,請參閱 了解網域空間許可和執行角色

如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊,請參閱 取得您的執行角色

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

注意

角色型存取控制 (RBAC) 連線至 Amazon EMR 叢集的使用者也應該參閱 當叢集和 Studio 位於不同帳戶時,設定執行期角色驗證

在 Amazon EMR 叢集帳戶上

請依照下列步驟,在部署 Amazon EMR 的帳戶上建立必要的角色和政策,也稱為信任帳戶

  1. 步驟 1:擷取 Amazon EMR 叢集服務角色的 ARN。

    若要了解如何尋找叢集之服務角色的 ARN,請參閱設定 Amazon EMR 許可的 IAM 服務角色以存取 AWS 服務和資源

  2. 步驟 2:使用下列組態建立名為 AssumableRole的自訂 IAM 角色:

    • 許可:將必要的許可授予 AssumableRole,以允許存取 Amazon EMR 資源。在涉及跨帳戶存取的案例中,此角色也稱為存取角色

    • 信任關係:設定 的信任政策AssumableRole,以允許從需要存取的 Studio 帳戶擔任執行角色 (跨帳戶圖表SageMakerExecutionRole中的 )。

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

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

    1. 導覽至 IAM 主控台

    2. 在左側導覽窗格中,選擇政策,然後選擇建立政策

    3. JSON 索引標籤中,新增允許 Amazon EMR 存取和操作的 Amazon EMR 許可。如需政策文件的詳細資訊,請參閱在 中列出 Amazon EMR 政策參考政策。將陳述式清單複製到角色的內嵌政策之前region,請將 、 和 accountID取代為實際值。

    4. 選擇下一步,然後提供政策名稱

    5. 選擇 建立政策

    6. 在左側導覽窗格中,選擇角色,然後選擇建立角色

    7. 建立角色頁面上,選擇自訂信任政策做為信任的實體。

    8. 自訂信任政策區段中貼上下列 JSON 文件,然後選擇下一步

      For users of Studio and JupyterLab

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

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::studio-account:role/service-role/AmazonSageMaker-ExecutionRole" }, "Action": "sts:AssumeRole" } ] }
      For users of Studio Classic

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

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::studio-account:root" }, "Action": "sts:AssumeRole" } ] }
    9. 新增許可頁面中,新增您剛建立的許可,然後選擇下一步

    10. 檢閱頁面上,輸入角色的名稱,例如 AssumableRole和選用的描述。

    11. 檢閱角色詳細資訊,並選擇 Create role (建立角色)

    如需在 AWS 帳戶上建立角色的詳細資訊,請參閱建立 IAM 角色 (主控台)

在 Studio 帳戶上

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

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

    如需 SageMaker AI 中空間和執行角色的資訊,請參閱 了解網域空間許可和執行角色

    如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊,請參閱 取得您的執行角色

  2. 步驟 2:將下列許可連接到存取 Amazon EMR 叢集的 SageMaker AI 執行角色。

    1. 導覽至 IAM 主控台

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

    3. 遵循您的角色連結。

    4. 選擇新增許可,然後選擇建立內嵌政策

    5. JSON 索引標籤中,新增內嵌政策,授予角色更新網域、使用者設定檔和空格的許可。如需政策文件的詳細資訊,請參閱 中的網域、使用者設定檔和空間更新動作政策參考政策。將陳述式清單複製到角色的內嵌政策之前,請將 regionaccountID取代為實際值。

    6. 選擇下一步,然後提供政策名稱

    7. 選擇 建立政策

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

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRoleAssumptionForCrossAccountDiscovery", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": ["arn:aws:iam::emr-account:role/AssumableRole" ] }] }
    9. 重複建立內嵌政策步驟,以新增另一個政策,授予執行角色使用 AWS CloudFormation 範本佈建新 Amazon EMR 叢集的許可。如需政策文件的詳細資訊,請參閱在 中建立 Amazon EMRclusters 政策參考政策。將陳述式清單複製到角色的內嵌政策之前,請將 regionaccountID取代為實際值。

    10. (選用) 若要允許列出部署在與 Studio 相同帳戶中的 Amazon EMR 叢集,請將額外的內嵌政策新增至 Studio 執行角色,如 中的列出 Amazon EMR 政策所定義參考政策

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

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

    Associate your assumable roles in JupyterLab using the SageMaker AI console

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

    1. 導覽至 SageMaker AI 主控台,網址為 https://https://console.aws.amazon.com/sagemaker/

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

      • 若要將假設角色 (存取角色) 新增至您的網域:在網域詳細資訊頁面的應用程式組態索引標籤中,導覽至 JupyterLab 區段。

      • 若要將假設角色 (存取角色) 新增至您的使用者設定檔:在網域詳細資訊頁面上,選擇使用者設定檔索引標籤,使用您更新其許可的 SageMaker AI 執行角色來選取使用者設定檔。在應用程式組態索引標籤中,導覽至 JupyterLab 區段。

    3. 選擇編輯並新增您擔任角色 (存取角色) 的 ARNs。

    4. 選擇提交

    Associate your assumable roles in JupyterLab using a Python script

    在 JupyterLab 應用程式中,使用您更新許可的 SageMaker AI 執行角色從空間啟動,請在終端機中執行下列命令。將 domainIDuser-profile-nameemr-accountIDAssumableRole( EMRServiceRole 用於 RBAC 執行時間角色) 取代為適當的值。此程式碼片段會更新 SageMaker AI 網域中特定使用者設定檔 (使用 client.update_userprofile) 或網域設定 (使用 client.update_domain) 的使用者設定檔設定。具體而言,它允許 JupyterLab 應用程式擔任特定 IAM 角色 (AssumableRole),以在 Amazon EMR 帳戶中執行 Amazon EMR 叢集。

    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

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

    您可以使用生命週期組態 (LCC) 指令碼來指定此資訊。您可以將 LCC 連接至您的網域或特定使用者設定檔。您使用的 LCC 指令碼必須是 JupyterServer 組態。如需如何建立 LCC 指令碼的詳細資訊,請參閱搭配 Studio Classic 使用生命週期組態

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

    # 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。