Service Catalog で Amazon EMR CloudFormation テンプレートを設定する - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 実行ロールに関連付ける必要があります。最後に、ユーザーが Studio または Studio Classic からテンプレートを検出し、クラスターをプロビジョニングし、Amazon EMRクラスターに接続できるようにするには、管理者は適切なアクセス許可を設定する必要があります。

Amazon EMR AWS CloudFormation テンプレートを使用すると、エンドユーザーはクラスターのさまざまな側面をカスタマイズできます。例えば、管理者は、クラスターの作成時にユーザーが選択できるインスタンスタイプの承認済みリストを定義できます。

次の手順では end-to-end CloudFormation 、 スタックを使用して Studio または Studio Classic ドメイン、ユーザープロファイル、Service Catalog ポートフォリオを設定し、Amazon EMR起動テンプレートを設定します。次の手順では、Studio または Studio Classic が Service Catalog 製品にアクセスし、Amazon EMRクラスターをプロビジョニングできるように、管理者が end-to-end スタックに適用する必要がある特定の設定に焦点を当てます。

注記

GitHub リポジトリ aws-samples/sagemaker-studio-emr には、必要なIAMロール、ネットワーク、 SageMaker ドメイン、ユーザープロファイル、Service Catalog ポートフォリオをデプロイし、Amazon EMR起動 CloudFormation テンプレートを追加するスタックの例 end-to-end CloudFormationが含まれています。テンプレートには、Studio または Studio Classic と Amazon EMRクラスター間で異なる認証オプションが用意されています。これらのテンプレート例では、親 CloudFormation スタックは VPC、セキュリティグループ、サブネットパラメータを Amazon EMRクラスターテンプレートに渡 SageMakerします。

sagemaker-studio-emr/cloudformation/emr_servicecatalog_templates リポジトリには、単一アカウントおよびクロスアカウントデプロイのオプションなど、さまざまなサンプル Amazon EMR CloudFormation 起動テンプレートが含まれています。

Amazon EMRクラスターへの接続に使用できる認証方法の詳細については、 SageMaker Studio または Studio Classic から Amazon EMRクラスターに接続する「」を参照してください。

データサイエンティストが Studio または Studio Classic から Amazon EMR CloudFormation テンプレートを検出し、クラスターをプロビジョニングできるようにするには、次の手順に従います。

ステップ 0: ネットワークを確認し、 CloudFormation スタックを準備する

開始する前に:

  • のネットワークとセキュリティの要件を確認していることを確認しますネットワークを設定する

  • 選択した認証方法をサポートする既存の end-to-end CloudFormation スタックが必要です。このような CloudFormation テンプレートの例は、aws-samples/sagemaker-studio-emr GitHub repository にあります。次の手順では、Studio または Studio Classic 内で Amazon EMR テンプレートを使用できるように、スタック内の特定の設定に焦点を当てます end-to-end。

ステップ 1: Service Catalog ポートフォリオを に関連付ける SageMaker

Service Catalog ポートフォリオ で、ポートフォリオ ID をクラスターにアクセスする SageMaker 実行ロールに関連付けます。

そのためには、次のセクション (ここでは YAML 形式) をスタックに追加します。これにより、Amazon EMR テンプレートなどの製品を含む指定された Service Catalog ポートフォリオへのアクセス権が SageMaker 実行ロールに付与されます。これにより、 が引き受けたロールがそれらの製品を起動 SageMaker できるようになります。

置換 SageMakerExecutionRole.Arn また、SageMakerStudioEMRProductPortfolio.ID を実際の値で指定します。

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

必要なIAMアクセス許可のセットの詳細については、「 アクセス許可」セクションを参照してください。

ステップ 2: Service Catalog 製品で Amazon EMR テンプレートを参照する

ポートフォリオ の Service Catalog 製品で、Amazon テンプレートリソースを参照し、Studio または Studio Classic でその可視性を確保します。 EMR

これを行うには、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指定された に対応します。

次の図は、Studio または Studio Classic で Amazon CloudFormationEMRクラスターを作成するために Amazon EMR テンプレートからアセンブルされた動的フォームを示しています。

Studio または Studio Classic から CloudFormation Amazon EMRクラスターを作成するために Amazon EMR テンプレートからアセンブルされた動的フォームの図。

これらの Amazon EMR テンプレートを使用して Studio または Studio Classic からクラスターを起動するStudio または Studio Classic から Amazon EMRクラスターを起動する方法については、「」を参照してください。

ステップ 4: Studio からの Amazon EMRクラスターの一覧表示と起動を有効にするアクセス許可を設定する

最後に、必要なIAMアクセス許可をアタッチして、Studio または Studio Classic から既存の実行中の Amazon EMRクラスターと自己プロビジョニングの新しいクラスターを一覧表示できるようにします。

これらのアクセス許可を追加する必要があるロール (複数可) は、Studio または Studio Classic と Amazon EMRが同じアカウント (単一アカウントを選択) にデプロイされているか、異なるアカウント (クロスアカウントを選択) にデプロイされているかによって異なります。

重要

プライベートスペースから起動される および JupyterLab Studio Classic アプリケーションの Amazon EMRクラスターのみを検出して接続できます。Amazon EMRクラスターが同じ にあることを確認します。 AWS Studio 環境としての リージョン。

Amazon EMRクラスターと Studio または Studio Classic が同じ にデプロイされている場合 AWS アカウントで、クラスターにアクセスする SageMaker 実行ロールに次のアクセス許可をアタッチします。

  1. ステップ 1: プライベートスペースで使用される SageMaker 実行ロールARNの を取得します。

    のスペースと実行ロールの詳細については SageMaker、「」を参照してくださいドメインスペースのアクセス許可と実行ロールについて

    の実行ロールARNの を取得する方法の詳細については、 SageMaker「」を参照してください実行ロールを取得する

  2. ステップ 2: Amazon EMRクラスターにアクセスする SageMaker 実行ロールに次のアクセス許可をアタッチします。

    1. IAM コンソールに移動します。

    2. 「ロール」を選択し、「検索」フィールドで実行ロールを名前で検索します。ロール名はARN、最後のスラッシュ (/) の後の の最後の部分です。

    3. ロールへのリンクに従います。

    4. アクセス許可を追加 を選択し、インラインポリシー を作成します。

    5. JSON タブに、Amazon アクセスとオペレーションを許可する Amazon EMR アクセスEMR許可を追加します。ポリシードキュメントの詳細については、「」の「Amazon EMRポリシーを一覧表示する」を参照してくださいリファレンスポリシー。ステートメントのリストをロールのインラインポリシーにコピーする前にregion、、、 を実際の値accountIDに置き換えます。

    6. 次へ を選択し、ポリシー名 を指定します。

    7. [Create policy] を選択します。

    8. インラインポリシーの作成ステップを繰り返して、 を使用して新しい Amazon EMRクラスターをプロビジョニングするアクセス許可を実行ロールに付与する別のポリシーを追加します。 AWS CloudFormation テンプレート。ポリシードキュメントの詳細については、「 で Amazon EMRclustersポリシーを作成する」を参照してくださいリファレンスポリシー。ステートメントのリストをロールのインラインポリシーにコピーする前に、 regionと を実際の値accountIDに置き換えます。

注記

Amazon EMRクラスターへのロールベースのアクセスコントロール (RBAC) 接続のユーザーは、 も参照する必要がありますAmazon EMRクラスターと Studio が同じアカウントにある場合のランタイムロール認証の設定

開始する前に、プライベートスペースで使用される SageMaker 実行ロールARNの を取得します。

のスペースと実行ロールの詳細については SageMaker、「」を参照してくださいドメインスペースのアクセス許可と実行ロールについて

の実行ロールARNの を取得する方法の詳細については、 SageMaker「」を参照してください実行ロールを取得する

Amazon EMRクラスターと Studio または Studio Classic が別々の にデプロイされている場合 AWS アカウントでは、両方のアカウントに対するアクセス許可を設定します。

注記

Amazon EMRクラスターへのロールベースのアクセスコントロール (RBAC) 接続のユーザーは、 も参照する必要がありますクラスターと Studio が別のアカウントにある場合のランタイムロール認証の設定

Amazon EMRクラスターアカウントで

以下の手順に従って、Amazon がEMRデプロイされているアカウントに必要なロールとポリシーを作成します。これは、信頼するアカウント とも呼ばれます。

  1. ステップ 1: Amazon クラスター ARN のサービスロールの を取得します。 EMR

    クラスターのサービスロールARNの を検索する方法については、「 に対する Amazon アクセスEMR許可IAMのサービスロールの設定」を参照してください。 AWS のサービスとリソース

  2. ステップ 2: 以下の設定AssumableRoleで という名前のカスタムIAMロールを作成します。

    • アクセス許可: Amazon EMRリソースへのアクセスを許可AssumableRoleするために必要なアクセス許可を に付与します。このロールは、クロスアカウントアクセスを伴うシナリオではアクセスロールとも呼ばれます。

    • 信頼関係: アクセスを必要とする Studio アカウントから実行ロール (クロスアカウント図SageMakerExecutionRoleの ) を引き受けるAssumableRoleことができるように、 の信頼ポリシーを設定します。

    ロールを引き受けることで、Studio または Studio Classic は Amazon で必要なアクセス許可に一時的にアクセスできますEMR。

    Amazon AssumableRoleで新しい を作成する方法の詳細については、「」を参照してください。 EMR AWS アカウント、以下のステップに従います。

    1. IAM コンソールに移動します。

    2. 左側のナビゲーションペインで、ポリシー を選択し、ポリシー を作成します。

    3. JSON タブに、Amazon アクセスとオペレーションを許可する Amazon EMR アクセスEMR許可を追加します。ポリシードキュメントの詳細については、「」の「Amazon EMRポリシーを一覧表示する」を参照してくださいリファレンスポリシー。ステートメントのリストをロールのインラインポリシーにコピーする前にregion、、、および を実際の値accountIDに置き換えます。

    4. 次へ を選択し、ポリシー名 を指定します。

    5. [Create policy] を選択します。

    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 Classic アカウント ID studio-accountに置き換えます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::studio-account:root" }, "Action": "sts:AssumeRole" } ] }
    9. 「アクセス許可の追加」ページで、先ほど作成したアクセス許可を追加し、「次へ」を選択します。

    10. レビューページで、 などのロールの名前AssumableRoleとオプションの説明を入力します。

    11. ロールの詳細を確認し、[ロールの作成] を選択します。

    でのロールの作成の詳細については、「」を参照してください。 AWS アカウント、「 IAMロールの作成 (コンソール)」を参照してください。

Studio アカウントで

Studio がデプロイされているアカウントで、信頼されたアカウント とも呼ばれます。クラスターにアクセスする実行ロールを、信頼するアカウントのリソースにアクセスするために必要なアクセス許可で更新 SageMakerします。

  1. ステップ 1: プライベートスペースで使用される SageMaker 実行ロールARNの を取得します。

    のスペースと実行ロールの詳細については SageMaker、「」を参照してくださいドメインスペースのアクセス許可と実行ロールについて

    の実行ロールARNの を取得する方法の詳細については、 SageMaker「」を参照してください実行ロールを取得する

  2. ステップ 2: Amazon EMRクラスターにアクセスする SageMaker 実行ロールに次のアクセス許可をアタッチします。

    1. IAM コンソールに移動します。

    2. 「ロール」を選択し、「検索」フィールドで実行ロールを名前で検索します。ロール名は、最後のスラッシュ (/) ARNの後にある の最後の部分です。

    3. ロールへのリンクに従います。

    4. アクセス許可を追加 を選択し、インラインポリシー を作成します。

    5. JSON タブに、ドメイン、ユーザープロファイル、スペースを更新するアクセス許可をロールに付与するインラインポリシーを追加します。ポリシードキュメントの詳細については、「」の「ドメイン、ユーザープロファイル、およびスペース更新アクションポリシー」を参照してくださいリファレンスポリシー。ステートメントのリストをロールのインラインポリシーにコピーする前に、 regionと を実際の値accountIDに置き換えます。

    6. 次へ を選択し、ポリシー名 を指定します。

    7. [Create policy] を選択します。

    8. インラインポリシーの作成ステップを繰り返して、実行ロールに を引き受けAssumableRole、ロールのアクセスポリシーで許可されているアクションを実行するアクセス許可を付与する別のポリシーを追加します。を Amazon EMRアカウント ID AssumableRoleに置き換え、 を Amazon EMRアカウントで作成された引き受け可能なロールの名前emr-accountに置き換えます。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRoleAssumptionForCrossAccountDiscovery", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": ["arn:aws:iam::emr-account:role/AssumableRole" ] }] }
    9. インラインポリシーの作成ステップを繰り返して、 を使用して新しい Amazon EMRクラスターをプロビジョニングするアクセス許可を実行ロールに付与する別のポリシーを追加します。 AWS CloudFormation テンプレート。ポリシードキュメントの詳細については、「 で Amazon EMRclustersポリシーを作成する」を参照してくださいリファレンスポリシー。ステートメントのリストをロールのインラインポリシーにコピーする前に、 regionと を実際の値accountIDに置き換えます。

    10. (オプション) Studio と同じアカウントにデプロイされた Amazon EMRクラスターの一覧表示を許可するには、「 の Amazon ポリシーの一覧表示」で定義されているように、Studio 実行ロールにインラインEMRポリシーを追加しますリファレンスポリシー

  3. ステップ 3: Studio のドメインまたはユーザー profile. JupyterLab users に引き受け可能なロール (アクセスロール) を SageMaker関連付けるには、 コンソールまたは提供されたスクリプトを使用できます。

    ユースケースに対応するタブを選択します。

    Associate your assumable roles in JupyterLab using the SageMaker console

    SageMaker コンソールを使用して、引き受け可能なロールをユーザープロファイルまたはドメインに関連付けるには:

    1. で SageMaker コンソールに移動しますhttps://console.aws.amazon.com/sagemaker/

    2. 左側のナビゲーションペインで、ドメイン を選択し、アクセス許可を更新した SageMaker 実行ロールを使用してドメインを選択します。

      • 引き受け可能なロール (複数可) (アクセスロール) をドメインに追加するには: ドメインの詳細ページのアプリ設定タブで、 JupyterLabセクションに移動します。

      • ユーザープロファイルに引き受け可能なロール (アクセスロール) を追加するには: ドメインの詳細ページで、ユーザープロファイルタブを選択し、アクセス許可を更新した SageMaker 実行ロールを使用してユーザープロファイルを選択します。アプリ設定 タブで、 JupyterLabセクションに移動します。

    3. 引き受け可能なロール (アクセスロール) ARNsの編集と追加を選択します。

    4. [送信] を選択します。

    Associate your assumable roles in JupyterLab using a Python script

    アクセス許可を更新した SageMaker 実行ロールを使用してスペースから開始した JupyterLab アプリケーションで、ターミナルで次のコマンドを実行します。domainIDuser-profile-name、、emr-accountIDおよび AssumableRole (ランタイムロール EMRServiceRoleの場合は ) を適切な値に置き換えます。 RBAC このコードスニペットは、 SageMaker ドメイン内の特定のユーザープロファイル ( を使用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

    Studio Classic 実行ロールAssumableRoleに ARNの を指定します。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。