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

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

注記

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

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

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

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

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

開始する前に:

  • Amazon EMR クラスターのネットワークアクセスを設定する」のネットワーク要件とセキュリティ要件を必ず確認します。

  • 選択した認証方法をサポートする既存のエンドツーエンドの CloudFormation スタックが必要となります。CloudFormation テンプレートの例は aws-samples/sagemaker-studio-emr の GitHub レポジトリに提供されています。次の手順では、Studio または Studio Classic 内で Amazon EMR テンプレートを使用できるようにするための、エンドツーエンドスタックの特定の設定について説明します。

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

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

これを行うには、以下のセクション (ここでは YAML 形式) をスタックに追加します。これにより、Amazon EMR テンプレートなどの製品を含む指定された Service Catalog ポートフォリオへのアクセス権が SageMaker AI 実行ロールに付与されます。これにより、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" ] } }

管理者が Amazon EMR CloudFormation テンプレートを Studio 内で利用できるようにした後、データサイエンティストはこのようなテンプレートを使用して Amazon EMR クラスターをセルフプロビジョンできるようになります。テンプレートで定義されている Parameters セクションは、Studio または Studio Classic 内のクラスター作成フォームの入力フィールドに変換されます。各パラメータについて、データサイエンティストは入力ボックスにカスタム値を入力するか、ドロップダウンメニューにリストされている事前定義されたオプションから選択することができます。これは、テンプレートで指定された AllowedValues に対応するものです。

次の画像は、Studio または Studio Classic で Amazon EMR クラスターを作成するために CloudFormation Amazon EMR テンプレートから組み立てられた動的フォームを示しています。

Studio または Studio Classic から Amazon EMR クラスターを作成するために CloudFormation 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 クラスターが 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 console] (IAM コンソール) に入ります。

    2. [ロール] をクリックしてから、[検索] フィールドで名前を使って実行ロールを検索します。ロール名は、ARN の最後のスラッシュ (/) の後にある最後の部分です。

    3. ロールへのリンクをクリックします。

    4. [アクセス許可の追加] をクリックしてから、[インラインポリシーの作成] をクリックします。

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

    6. [次へ] をクリックして、[ポリシー名] を指定します。

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

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

注記

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

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

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

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

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

注記

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

Amazon EMR クラスターアカウントの設定

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

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

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

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

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

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

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

    Amazon EMR AWS アカウントAssumableRoleで新しい を作成する方法の詳細については、次の手順に従います。

    1. [IAM console] (IAM コンソール) に入ります。

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

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

    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-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. ロールの詳細を確認し、[ロールの作成] を選択します。

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

Studio アカウントの設定

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

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

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

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

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

    1. [IAM console] (IAM コンソール) に入ります。

    2. [ロール] をクリックしてから、[検索] フィールドで名前を使って実行ロールを検索します。ロール名は、ARN の最後のスラッシュ (/) の後にある最後の部分です。

    3. ロールへのリンクをクリックします。

    4. [アクセス許可の追加] をクリックしてから、[インラインポリシーの作成] をクリックします。

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

    6. [次へ] をクリックして、[ポリシー名] を指定します。

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

    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 クラスターをプロビジョンするアクセス許可を実行ロールに付与する別のポリシーを追加します。ポリシードキュメントの詳細については、「リファレンスポリシー」の「Create Amazon EMRclusters policies」を参照してください。ステートメントのリストをロールのインラインポリシーにコピーする前に、regionaccountID を実際の値に置き換えます。

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

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

    ユースケースに対応するタブをクリックします。

    Associate your assumable roles in JupyterLab using the SageMaker AI console

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

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

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

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

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

    3. [編集] をクリックして、引き受けられるロール (アクセスロール) の ARN を追加します。

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

    Associate your assumable roles in JupyterLab using a Python script

    アクセス許可を更新した SageMaker AI 実行ロールを使用してスペースから開始された JupyterLab アプリケーションで、ターミナルで次のコマンドを実行します。domainIDuser-profile-nameemr-accountIDAssumableRole (RBAC ランタイムロール の場合は EMRServiceRole) は、適切な値に置き換えます。このコードスニペットは、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

    Studio Classic の実行ロールに AssumableRole の ARN を指定します。Jupyter サーバーは起動時にこの ARN をロードします。Studio が使用する実行ロールは、信頼するアカウントの Amazon EMR クラスターを検出して接続するクロスアカウントロールを想定しています。

    この情報は、ライフサイクル設定 (LCC) スクリプトを使用して指定できます。LCC は、ドメインまたは特定のユーザープロファイルにアタッチできます。使用する LCC スクリプトは JupyterServer 設定である必要があります。LCC スクリプトを作成する方法の詳細については、「Use Lifecycle Configurations with Studio Classic」を参照してください。

    以下は LCC スクリプトの例です。スクリプトを変更するには、AssumableRoleemr-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 を保存します。