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

次の手順ではCloudFormation 、スタックを使用して end-to-end 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 スタックを準備する

開始する前に:

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

  • 選択した認証方法をサポートする既存の 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 テンプレートを参照する

ポートフォリオ のサービスカタログ製品で、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指定された に対応します。

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

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

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

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

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

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

重要

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

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

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

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

    8. インラインポリシーの作成ステップを繰り返して、テンプレートを使用して AWS CloudFormation 新しい Amazon EMRクラスターをプロビジョニングするアクセス許可を実行ロールに付与する別のポリシーを追加します。ポリシードキュメントの詳細については、「」の「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の を検索する方法については、IAM「サービス AWS およびリソースへの Amazon EMR アクセス許可のサービスロールの設定」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

      { "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ポリシーの作成」を参照してくださいリファレンスポリシー。ステートメントのリストをロールのインラインポリシーにコピーする前に、 regionと をaccountID実際の値に置き換えます。

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

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

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

    Associate your assumable roles in JupyterLab using the SageMaker console

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

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

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

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

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

    3. ARNs 想定ロール (アクセスロール) の編集と追加を選択します。

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

    Associate your assumable roles in JupyterLab using a Python script

    アクセス許可を更新した SageMaker 実行ロールを使用してスペースから開始された JupyterLab アプリケーションで、ターミナルで次のコマンドを実行します。domainID、、user-profile-nameemr-accountIDAssumableRole ( ランタイムロール 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。