

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

# Amazon EMR を使用したデータ準備
<a name="studio-notebooks-emr-cluster"></a>

**重要**  
Amazon SageMaker Studio と Amazon SageMaker Studio Classic は、SageMaker AI を操作するために使用できる 2 つの機械学習環境です。  
ドメインが 2023 年 11 月 30 日以降に作成されている場合には、Studio がデフォルトのエクスペリエンスになります。  
ドメインが 2023 年 11 月 30 日より前に作成されている場合には、Amazon SageMaker Studio Classic がデフォルトのエクスペリエンスになります。Amazon SageMaker Studio Classic がデフォルトのエクスペリエンスである場合に Studio を使用するには、「[Amazon SageMaker Studio Classic からの移行](studio-updated-migrate.md)」を参照してください。  
Amazon SageMaker Studio Classic から Amazon SageMaker Studio に移行しても、利用できる機能に変わりはありません。Studio Classic は Amazon SageMaker Studio 内のアプリケーションとしても利用でき、従来の機械学習ワークフローの実行に役立ちます。

Amazon SageMaker Studio と Studio Classic には、[Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) との統合が組み込まれています。データサイエンティストやデータエンジニアは、JupyterLab や Studio Classic のノートブック内で、既存の Amazon EMR クラスターを検出して接続し、[Apache Spark](https://aws.amazon.com/emr/features/spark)、[Apache Hive](https://aws.amazon.com/emr/features/hive)、[Presto](https://aws.amazon.com/emr/features/presto) を使用して、大規模なデータをインタラクティブに探索、可視化したり、機械学習向けに準備できます。ワンクリックで Spark UI にアクセスして、ノートブック以外を使用する必要なく、Spark ジョブのステータスとメトリクスをモニタリングできます。

管理者は、Amazon EMR クラスターを定義する[CloudFormation テンプレート](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)を作成できます。その後、ユーザーが Studio や Studio Classic が起動できるように、このようなクラスターテンプレートを [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/userguide/end-user-console.html) で利用できるようにします。その後、データサイエンティストは事前定義されたテンプレートを選択して、Studio 環境から直接 Amazon EMR クラスターをセルフプロビジョンできます。管理者はさらにテンプレートをパラメータ化して、クラスターの要素を事前定義された値の範囲内でユーザーが選択できるようにすることができます。例えば、ユーザーはコアノードの数を指定したり、ドロップダウンメニューからノードのインスタンスタイプを選択したりできます。

を使用すると CloudFormation、管理者は Amazon EMR クラスターの組織、セキュリティ、ネットワークのセットアップを制御できます。データサイエンティストやデータエンジニアは、ワークロードに応じてこのようなテンプレートをカスタマイズして、複雑な設定を必要とせずに Studio と Studio Classic から直接オンデマンドで Amazon EMR クラスターを作成できます。ユーザーは、使用後に Amazon EMR クラスターを終了できます。
+ **管理者の場合:**

  Studio または Studio Classic のクラスターと Amazon EMR クラスター間の通信が有効になっていることを確認します。手順については、「[Amazon EMR クラスターのネットワークアクセスを設定する](studio-notebooks-emr-networking.md)」を参照してください。この通信が有効になったら、以下を実行できます。
  + [Service Catalog で Amazon EMR CloudFormation テンプレートを設定する](studio-notebooks-set-up-emr-templates.md)
  + [Amazon EMR クラスターのリストを設定する](studio-notebooks-configure-discoverability-emr-cluster.md)
+ **データサイエンティストまたはデータエンジニアの場合**、以下を実行できます。
  + [Studio または Studio Classic から Amazon EMR クラスターを起動する](studio-notebooks-launch-emr-cluster-from-template.md)
  + [Studio または Studio Classic から Amazon EMR クラスターを一覧表示する](discover-emr-clusters.md)
  + [SageMaker Studio または Studio Classic から Amazon EMR クラスターに接続する](connect-emr-clusters.md)
  + [Studio または Studio Classic から Amazon EMR クラスターを終了する](terminate-emr-clusters.md)
  + [Studio または Studio Classic から Spark UI にアクセスする](studio-notebooks-access-spark-ui.md)

**Topics**
+ [クイックスタート: Studio で Amazon EMR クラスターを起動するための SageMaker AI サンドボックスドメインを作成する](studio-notebooks-emr-cluster-quickstart.md)
+ [管理者ガイド](studio-emr-admin-guide.md)
+ [ユーザーガイド](studio-emr-user-guide.md)
+ [ブログとホワイトペーパー](studio-notebooks-emr-resources.md)
+ [トラブルシューティング](studio-notebooks-emr-troubleshooting.md)

# クイックスタート: Studio で Amazon EMR クラスターを起動するための SageMaker AI サンドボックスドメインを作成する
<a name="studio-notebooks-emr-cluster-quickstart"></a>

このセクションでは、Amazon SageMaker Studio での完全なテスト環境のクイックセットアップについて説明します。ユーザーが Studio から新しい Amazon EMR クラスターを直接起動できるようにする新しい Studio ドメインを作成します。このステップでは、Amazon EMR クラスターに接続して、Spark ワークロードの実行を開始できるサンプルノートブックを説明します。このノートブックを使用して、Amazon EMR Spark 分散処理と OpenSearch ベクトルデータベースを使って、検索拡張生成 (RAG) を構築します。

**注記**  
開始するには、管理者権限を持つ AWS Identity and Access Management (IAM) ユーザーアカウントを使用して AWS マネジメントコンソールにサインインします。 AWS アカウントにサインアップして、管理アクセス権を持つユーザーを作成する方法については、「[Amazon SageMaker AI の前提条件を満たす](gs-set-up.md)」を参照してください。

**Studio テスト環境をセットアップして、Spark ジョブの実行を開始するには:**
+ [ステップ 1: Studio で Amazon EMR クラスターを起動するための SageMaker AI ドメインを作成する](#studio-notebooks-emr-cluster-quickstart-setup)
+ [ステップ 2: Studio UI から新しい Amazon EMR クラスターを起動する](#studio-notebooks-emr-cluster-quickstart-launch)
+ [ステップ 3: JupyterLab ノートブックを Amazon EMR クラスターに接続する](#studio-notebooks-emr-cluster-quickstart-connect)
+ [ステップ 4: CloudFormation スタックをクリーンアップする](#studio-notebooks-emr-cluster-quickstart-clean-stack)

## ステップ 1: Studio で Amazon EMR クラスターを起動するための SageMaker AI ドメインを作成する
<a name="studio-notebooks-emr-cluster-quickstart-setup"></a>

次の手順では、 CloudFormation スタックを適用して新しい SageMaker AI ドメインを自動的に作成します。このスタックを使用すると、ユーザープロファイルを作成して、必要な環境とアクセス許可を設定できます。SageMaker AI ドメインは、Studio から Amazon EMR クラスターを直接起動できるように設定されます。この例では、Amazon EMR クラスターは SageMaker AI と同じ AWS アカウントで認証なしで作成されます。Kerberos などのさまざまな認証方法をサポートする追加の CloudFormation スタックは、[geting\$1started](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub リポジトリにあります。

**注記**  
SageMaker AI では、 AWS アカウントごとに AWS リージョン デフォルトで 5 つの Studio ドメインを使用できます。スタックを作成する前に、アカウントのリージョン内のドメインが 4 つ以下であることを確認してください。

**Studio から Amazon EMR クラスターを起動するための SageMaker AI ドメインを設定するには、次の手順を実行します。**

1. `sagemaker-studio-emr` GitHub レポジトリから、この [CloudFormation テンプレート](https://github.com/aws-samples/sagemaker-studio-foundation-models/blob/main/workshop-artifacts/cfn/workshop-cfn.yaml)の raw ファイルをダウンロードします。

1.  CloudFormation コンソールに移動します: [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)

1. **[スタックの作成]** をクリックして、ドロップダウンメニューから **[新しいリソースを使用 (標準)]** を選択します。

1. **ステップ 1**:

   1. **[テンプレートの準備]** セクションで、**[既存のテンプレートを選択]** をクリックします。

   1. **[テンプレートの指定]** セクションで、**[テンプレートファイルのアップロード]** を選択します。

   1. ダウンロードした CloudFormation テンプレートをアップロードし、**次へ**を選択します。

1. **[ステップ 2]** で、**[スタック名]** と**[SageMakerDomainName]** を入力してから、**[次へ]** をクリックします。

1. **[ステップ 3]** ではすべてのデフォルト値をそのままにして、**[次へ]** をクリックします。

1. **[ステップ 4]** で、リソースの作成に同意するチェックボックスをオンして、**[スタックの作成]** をクリックします。これにより、アカウントのリージョンに Studio ドメインが作成されます。

## ステップ 2: Studio UI から新しい Amazon EMR クラスターを起動する
<a name="studio-notebooks-emr-cluster-quickstart-launch"></a>

次のステップでは、Studio UI から新しい Amazon EMR クラスターを起動します。

1. SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開き、左側のメニューで **[ドメイン]** を選択します。

1. ドメイン名 **[GenerativeAIDomain]** をクリックして、**[ドメインの詳細]** ページを開きます。

1. ユーザープロファイル `genai-user` から Studio を起動します。

1. 左側のナビゲーションペインで、**[データ]** に移動し、**[Amazon EMR クラスター]** に移動します。

1. [Amazon EMR クラスター] ページで、**[作成]** をクリックします。 CloudFormation スタックが作成したテンプレートである **SageMaker Studio Domain No Auth EMR** を選択してから、**[次へ]** をクリックします。

1. 新しい Amazon EMR クラスター名を入力します。必要に応じて、コアノードとプライマリノードのインスタンスタイプ、アイドルタイムアウト、コアノード数などのその他のパラメータを更新します。

1. **[リソースの作成]** をクリックして、新しい Amazon EMR クラスターを起動します。

   Amazon EMR クラスターを作成したら、**EMR クラスター** ページのステータスに従います。ステータスが `Running/Waiting` に変わると、Amazon EMR クラスターは Studio で使用できるようになります。

## ステップ 3: JupyterLab ノートブックを Amazon EMR クラスターに接続する
<a name="studio-notebooks-emr-cluster-quickstart-connect"></a>

次の手順では、JupyterLab のノートブックを実行中の Amazon EMR クラスターに接続します。この例では、Amazon EMR Spark 分散処理と OpenSearch ベクトルデータベースを使って、検索拡張生成 (RAG) を構築できるノートブックをインポートします。

1. 

**JupyterLab を起動する**

   Studio から JupyterLab アプリケーションを起動します。

1. 

**プライベートスペースを作成します。**

   JupyterLab アプリケーション用のスペースを作成していない場合は、**[JupyterLab スペースの作成]** を選択します。スペース名を入力します。スペースは **[プライベート]** のままにします。その他のすべての設定をデフォルトのままにして、**[スペースを作成]** をクリックします。

   それ以外の場合は、JupyterLab スペースを実行して、JupyterLab アプリケーションを起動します。

1. 

**LLM と推論用の埋め込みモデルをデプロイする**
   + 上部のメニューから、**[ファイル]**、**[新規]**、**[ターミナル]** の順に選択します。
   + ターミナルで、以下のコマンドを実行します。

     ```
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-00-setup/Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb
     mkdir AWSGuides
     cd AWSGuides
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/AmazonSageMakerDeveloperGuide.pdf
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/EC2DeveloperGuide.pdf
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/S3DeveloperGuide.pdf
     ```

     これにより `Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb` ノートブックがローカルディレクトリに取得され、3 つの PDF ファイルがローカル `AWSGuides` フォルダにダウンロードされます。
   + `lab-00-setup/Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb` を開いて、`Python 3 (ipykernel)` カーネルのままにして、各セルを実行します。
**警告**  
続行する前に、必ず **[Llama 2 ライセンス契約]** セクションの Llama2 EULA を承諾してください。  
このノートブックは、`ml.g5.2xlarge` に推論用の `Llama 2` と `all-MiniLM-L6-v2 Models` の 2 つのモデルをデプロイします。

     モデルのデプロイとエンドポイントの作成には時間がかかる場合があります。

1. 

**メインノートブックを開く**

   JupyterLab でターミナルを平井て、以下のコマンドを実行します。

   ```
   cd ..
   wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb
   ```

   JupyterLab の左側のパネルに追加の `Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` ノートブックが表示されます。

1. 

**`PySpark` カーネルを選択します。**

   `Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` ノートブックを開いて、`SparkMagic PySpark` カーネルを使用していることを確認します。カーネルは、ノートブックの右上で切り替えられます。現在のカーネル名を選択してカーネル選択モーダルを開き、`SparkMagic PySpark` を選択します。

1. 

**ノートブックをクラスターに接続する**

   1. ノートブックの上部にある **[クラスター]** をクリックします。このアクションは、アクセス許可を持つ実行中のすべてのクラスターを一覧表示するモーダルウィンドウを開きます。

   1. クラスターを選択してから、**[接続]** をクリックします。新しい認証情報タイプの選択モーダルウィンドウが開きます。

   1. **[認証情報なし]** を選択してから、**[接続]** をクリックします。  
![\[JupyterLab ノートブックの Amazon EMR 認証情報の選択を示すモーダル\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-credential-selection.png)

   1. ノートブックセルは自動的に入力され、実行されます。ノートブックセルは、Amazon EMR クラスターに接続する機能を提供する `sagemaker_studio_analytics_extension.magics` 拡張機能をロードします。次に、`%sm_analytics` Magic コマンドを使用して Amazon EMR クラスターと Spark アプリケーションへの接続を開始します。
**注記**  
Amazon EMR クラスターへの接続文字列の認証タイプが `None` に設定されていることを確認します。これは、次の例の `--auth-type None` 値で説明されています。このフィールドは、必要に応じて変更できます。  

      ```
      %load_ext sagemaker_studio_analytics_extension.magics
      %sm_analytics emr connect --verify-certificate False --cluster-id your-cluster-id --auth-type None --language python
      ```

   1. 接続の確立が正常に完了すると、接続セルの出力メッセージに、クラスター ID、`YARN` アプリケーションID、Spark ジョブのモニタリング用 Spark UI へのリンクなど、`SparkSession` の詳細が表示されます。

これで、`Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` ノートブックを使用する準備が整いました。このサンプルノートブックは、LangChain と OpenSearch を使用して RAG システムを構築するための分散 PySpark ワークロードを実行します。

## ステップ 4: CloudFormation スタックをクリーンアップする
<a name="studio-notebooks-emr-cluster-quickstart-clean-stack"></a>

完了したら、継続的な料金の発生を避けるために、2 つのエンドポイントを終了し、 CloudFormation スタックを削除します。スタックを削除すると、スタックがプロビジョンしたすべてのリソースがクリーンアップされます。

**CloudFormation スタックの完了時にスタックを削除するには**

1.  CloudFormation コンソールに移動します: [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)

1. 削除するスタックを選択します。名前で検索することも、スタックのリストで検索することもできます。

1. **[削除]** ボタンをクリックしてスタックの削除を確定してから、もう一度 **[削除]** をクリックして、スタックが作成したすべてのリソースの削除を承認します。

   スタックの削除が完了するまで待ちます。これには数分かかる場合があります。 CloudFormation は、スタックのテンプレートで定義されているすべてのリソースを自動的にクリーンアップします。

1. スタックが作成したすべてのリソースが削除されていることを検証します。例えば、Amazon EMR クラスターが残っていないかを確認します。

**モデルの API エンドポイントを削除するには**

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

1. 左側のナビゲーションペインで、**[推論]**、**[エンドポイント]** の順に選択します。

1. エンドポイント `hf-allminil6v2-embedding-ep` を選択して、**[アクション]** ドロップダウンリストで **[削除]** を選択します。エンドポイント `meta-llama2-7b-chat-tg-ep` について、このステップを繰り返します。

# 管理者ガイド
<a name="studio-emr-admin-guide"></a>

このセクションでは、Studio または Studio Classic と Amazon EMR クラスターとの間の通信を許可するようにネットワークを設定する方法について説明します。Studio と Amazon EMR がパブリックインターネットアクセスなしでプライベート Amazon VPC 内にプロビジョンされる場合や、インターネット経由で通信する必要がある場合など、さまざまなデプロイシナリオを説明します。

管理者が を使用して CloudFormation テンプレート AWS Service Catalog を Studio で使用できるようにし、データサイエンティストが Studio 内から直接 Amazon EMR クラスターを検出して自己プロビジョニングできるようにする方法について説明します。これには、Service Catalog ポートフォリオの作成、必要なアクセス許可の付与、Amazon EMR テンプレートのリファレンス、クラスター作成時にカスタマイズできるようにするためのパラメータ化などを行います。

最後に、Studio や Studio Classic から実行中の既存の Amazon EMR クラスターの検出可能性を設定するガイダンスを提供します。これには、必要な IAM アクセス許可と、単一のアカウントおよびクロスアカウントアクセスのシナリオなどがあります。

**Topics**
+ [Service Catalog で Amazon EMR CloudFormation テンプレートを設定する](studio-notebooks-set-up-emr-templates.md)
+ [Amazon EMR クラスターのリストを設定する](studio-notebooks-configure-discoverability-emr-cluster.md)
+ [Studio で Amazon EMR クラスターへのアクセスのための IAM ランタイムロールを設定する](studio-notebooks-emr-cluster-rbac.md)
+ [リファレンスポリシー](studio-set-up-emr-permissions-reference.md)

# Service Catalog で Amazon EMR CloudFormation テンプレートを設定する
<a name="studio-notebooks-set-up-emr-templates"></a>

このトピックでは、管理者が [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)、 [のポートフォリオと製品 AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-portfolio.html)、および [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html) に精通していることを前提としています。

Studio からの Amazon EMR クラスターの作成を簡素化するために、管理者は [Amazon EMR CloudFormation テンプレート](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html)を [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) のポートフォリオの製品として登録できます。このようなテンプレートをデータサイエンティストが利用できるようにするには、ポートフォリオを Studio または Studio Classic で使用される SageMaker AI 実行ロールに関連付ける必要があります。最後に、ユーザーが Studio または Studio Classic からテンプレートを検出し、クラスターをプロビジョンして、Amazon EMR クラスターに接続できるようにするために、管理者は適切なアクセス許可を設定する必要があります。

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

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

**注記**  
GitHub リポジトリ [aws-samples/sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) は、必要な IAM ロール、ネットワーク、SageMaker ドメイン、ユーザープロファイル、Service Catalog ポートフォリオをデプロイして、Amazon EMR の起動 CloudFormation テンプレートを追加する、エンドツーエンドの CloudFormation スタックの例を提供しています。このテンプレートは、Studio または Studio Classic のクラスターと Amazon EMR クラスター間でのさまざまな認証オプションを提供します。このようなサンプルテンプレートでは、親 CloudFormation スタックが SageMaker AI VPC、セキュリティグループ、サブネットパラメータを Amazon EMR クラスターテンプレートに渡します。  
[sagemaker-studio-emr/cloudformation/emr\$1servicecatalog\$1templates](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/emr_servicecatalog_templates) リポジトリは、単一のアカウントおよびクロスアカウントのデプロイオプションなど、さまざまなサンプル Amazon EMR CloudFormation 起動テンプレートを提供しています。  
Amazon EMR クラスターへの接続に使用できる認証方法の詳細については、「[SageMaker Studio または Studio Classic から Amazon EMR クラスターに接続する](connect-emr-clusters.md)」を参照してください。

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

## ステップ 0: ネットワークを確認して、CloudFormation スタックを準備する
<a name="studio-set-up-emr-prereq"></a>

開始する前に:
+ 「[Amazon EMR クラスターのネットワークアクセスを設定する](studio-notebooks-emr-networking.md)」のネットワーク要件とセキュリティ要件を必ず確認します。
+ 選択した認証方法をサポートする既存のエンドツーエンドの CloudFormation スタックが必要となります。CloudFormation テンプレートの例は [aws-samples/sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) の GitHub レポジトリに提供されています。次の手順では、Studio または Studio Classic 内で Amazon EMR テンプレートを使用できるようにするための、エンドツーエンドスタックの特定の設定について説明します。

## ステップ 1: Service Catalog ポートフォリオを SageMaker AI に関連付ける
<a name="studio-set-up-emr-service-catalog-portfolio"></a>

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

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

 *SageMakerExecutionRole.Arn* と *SageMakerStudioEMRProductPortfolio.ID* は、実際の値に置き換えます。

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

必要な IAM アクセス許可セットの詳細については、「[アクセス許可](#studio-emr-permissions)」セクションを参照してください。

## ステップ 2: Service Catalog 製品で Amazon EMR テンプレートを参照する
<a name="studio-set-up-emr-service-catalog-product"></a>

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

これを行うには、Service Catalog 製品定義で Amazon EMR テンプレートリソースを参照し、次のタグキー `"sagemaker:studio-visibility:emr"` を追加して値を `"true"` に設定します (YAML 形式の例を参照)。

Service Catalog 製品定義では、クラスターの 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 テンプレートをパラメータ化する
<a name="studio-set-up-emr-cfn-template"></a>

**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 テンプレートから組み立てられた動的フォームの図\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)


このような Amazon EMR テンプレートを使用して、Studio または Studio Classic からクラスターを起動する方法の詳細については、「[Studio または Studio Classic から Amazon EMR クラスターを起動する](studio-notebooks-launch-emr-cluster-from-template.md)」にアクセスしてください。

## ステップ 4: Studio から Amazon EMR クラスターを一覧表示して起動できるようにアクセス許可を設定する
<a name="studio-emr-permissions"></a>

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

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

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

### 単一のアカウント
<a name="studio-set-up-emr-permissions-singleaccount"></a>

Amazon EMR クラスターと Studio または Studio Classic が同じ AWS アカウントにデプロイされている場合は、クラスターにアクセスする 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**: Amazon EMR クラスターにアクセスする SageMaker AI 実行ロールに次のアクセス許可を付与します。

   1. [[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) に入ります。

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

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

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

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

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

   1. [**Create policy**] (ポリシーの作成) を選択します。

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

**注記**  
Amazon EMR クラスターへのロールベースのアクセスコントロール (RBAC) 接続を使用する場合も、「[Amazon EMR クラスターと Studio が同じアカウントにある場合のランタイムロール認証の設定](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)」を参照する必要があります。

### クロスアカウント
<a name="studio-set-up-emr-permissions-crossaccount"></a>

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

SageMaker AI のスペースと実行ロールの詳細については、「[ドメインスペースのアクセス許可と実行ロールを理解する](execution-roles-and-spaces.md)」を参照してください。

SageMaker AI 実行ロールの ARN を取得する方法の詳細については、「[実行ロールを取得する](sagemaker-roles.md#sagemaker-roles-get-execution-role)」を参照してください。

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

**注記**  
Amazon EMR クラスターへのロールベースのアクセスコントロール (RBAC) 接続を使用する場合も、「[クラスターと Studio が別のアカウントにある場合のランタイムロール認証の設定](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)」を参照する必要があります。

#### Amazon EMR クラスターアカウントの設定
<a name="studio-set-up-emr-permissions-crossaccount-emraccount"></a>

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

1. **ステップ 1**: [Amazon EMR クラスターのサービスロール](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)の ARN を取得します。

   クラスターのサービスロールの ARN を検索する方法については、「[AWS のサービスおよびリソースへのアクセス許可を Amazon EMR に付与する IAM サービスロールの設定](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)」を参照してください。

1. **ステップ 2**: 以下の設定を使用して、`AssumableRole` という名前のカスタム IAM ロールを作成します。
   + アクセス許可: Amazon EMR リソースへのアクセスを許可するために必要なアクセス許可を `AssumableRole` に付与します。このロールは、クロスアカウントアクセスのシナリオでの*アクセスロール*とも呼ばれます。
   + 信頼関係: アクセスを必要とする Studio アカウントから実行ロール (クロスアカウント図の `SageMakerExecutionRole`) を引き受けることができるように、`AssumableRole` の信頼ポリシーを設定します。

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

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

   1. [[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) に入ります。

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

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

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

   1. [**Create policy**] (ポリシーの作成) を選択します。

   1. 左側のナビゲーションペインで、**[ロール]**、**[ロールを作成]** の順に選択します。

   1. **[ロールを作成]** ページで、信頼されたエンティティとして、**[カスタム信頼ポリシー]** を選択します。

   1. **[カスタム信頼ポリシー]** セクションで、以下の JSON ドキュメントに貼り付け、**[次へ]** をクリックします。

------
#### [ For users of Studio and JupyterLab ]

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

------

------
#### [ For users of Studio Classic ]

      `studio-account` は Studio Classic アカウント ID に置き換えます。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. **[アクセス許可を追加]** ページで、先ほど作成したアクセス許可を追加し、**[次へ]** をクリックします。

   1. **[レビュー]** ページで、`AssumableRole` など、ロール名と、必要に応じて説明を入力します。

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

    AWS アカウントでのロールの作成の詳細については、「[IAM ロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

#### Studio アカウントの設定
<a name="studio-set-up-emr-permissions-crossaccount-studioaccount"></a>

*信頼されたアカウント*とも呼ばれる Studio がデプロイされているアカウントで、信頼するアカウントのリソースにアクセスするために必要なアクセス許可を使用して、クラスターにアクセスする 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**: Amazon EMR クラスターにアクセスする SageMaker AI 実行ロールに次のアクセス許可を付与します。

   1. [[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) に入ります。

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

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

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

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

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

   1. [**Create policy**] (ポリシーの作成) を選択します。

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

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

****  

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

------

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

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

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

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

------
#### [ Associate your assumable roles in JupyterLab using the 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. **[編集]** をクリックして、引き受けられるロール (アクセスロール) の ARN を追加します。

   1. [**Submit**] を選択してください。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    アクセス許可を更新した SageMaker AI 実行ロールを使用してスペースから起動した JupyterLab アプリケーションのターミナルで以下のコマンドを実行します。`domainID`、`user-profile-name`、`emr-accountID`、`AssumableRole` ([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](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)」を参照してください。

   以下は 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 を保存します。

------

# Amazon EMR クラスターのリストを設定する
<a name="studio-notebooks-configure-discoverability-emr-cluster"></a>

管理者は、ユーザーが利用できる Amazon EMR クラスターを一覧表示できるアクセス許可を付与して、これらのクラスターに接続できるように、SageMaker Studio 実行ロールのアクセス許可を設定できます。アクセスするクラスターは、Studio と同じ AWS アカウント (*単一アカウント*を選択) または別のアカウント (*クロスアカウント*を選択) にデプロイできます。次のページでは、Studio または Studio Classic から Amazon EMR クラスターを表示するためのアクセス許可を付与する方法について説明します。

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

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

## 単一のアカウント
<a name="studio-set-up-emr-permissions-singleaccount-list-clusters"></a>

Amazon EMR クラスターと Studio または Studio Classic が同じ AWS アカウントにデプロイされている場合は、クラスターにアクセスする 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**: Amazon EMR クラスターにアクセスする SageMaker AI 実行ロールに次のアクセス許可を付与します。

   1. [[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) に入ります。

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

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

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

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

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

   1. [**Create policy**] (ポリシーの作成) を選択します。

**注記**  
Amazon EMR クラスターへのロールベースのアクセスコントロール (RBAC) 接続を使用する場合も、「[Amazon EMR クラスターと Studio が同じアカウントにある場合のランタイムロール認証の設定](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)」を参照する必要があります。

## クロスアカウント
<a name="studio-set-up-emr-permissions-crossaccount-list-clusters"></a>

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

SageMaker AI のスペースと実行ロールの詳細については、「[ドメインスペースのアクセス許可と実行ロールを理解する](execution-roles-and-spaces.md)」を参照してください。

SageMaker AI 実行ロールの ARN を取得する方法の詳細については、「[実行ロールを取得する](sagemaker-roles.md#sagemaker-roles-get-execution-role)」を参照してください。

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

**注記**  
Amazon EMR クラスターへのロールベースのアクセスコントロール (RBAC) 接続を使用する場合も、「[クラスターと Studio が別のアカウントにある場合のランタイムロール認証の設定](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)」を参照する必要があります。

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

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

1. **ステップ 1**: [Amazon EMR クラスターのサービスロール](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)の ARN を取得します。

   クラスターのサービスロールの ARN を検索する方法については、「[AWS のサービスおよびリソースへのアクセス許可を Amazon EMR に付与する IAM サービスロールの設定](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)」を参照してください。

1. **ステップ 2**: 以下の設定を使用して、`AssumableRole` という名前のカスタム IAM ロールを作成します。
   + アクセス許可: Amazon EMR リソースへのアクセスを許可するために必要なアクセス許可を `AssumableRole` に付与します。このロールは、クロスアカウントアクセスのシナリオでの*アクセスロール*とも呼ばれます。
   + 信頼関係: アクセスを必要とする Studio アカウントから実行ロール (クロスアカウント図の `SageMakerExecutionRole`) を引き受けることができるように、`AssumableRole` の信頼ポリシーを設定します。

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

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

   1. [[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) に入ります。

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

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

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

   1. [**Create policy**] (ポリシーの作成) を選択します。

   1. 左側のナビゲーションペインで、**[ロール]**、**[ロールを作成]** の順に選択します。

   1. **[ロールを作成]** ページで、信頼されたエンティティとして、**[カスタム信頼ポリシー]** を選択します。

   1. **[カスタム信頼ポリシー]** セクションで、以下の JSON ドキュメントに貼り付け、**[次へ]** をクリックします。

------
#### [ For users of Studio and JupyterLab ]

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

------

------
#### [ For users of Studio Classic ]

      `studio-account` は Studio Classic アカウント ID に置き換えます。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. **[アクセス許可を追加]** ページで、先ほど作成したアクセス許可を追加し、**[次へ]** をクリックします。

   1. **[レビュー]** ページで、`AssumableRole` など、ロール名と、必要に応じて説明を入力します。

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

    AWS アカウントでのロールの作成の詳細については、[「IAM ロールの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

**Studio アカウントの設定**

*信頼されたアカウント*とも呼ばれる Studio がデプロイされているアカウントで、信頼するアカウントのリソースにアクセスするために必要なアクセス許可を使用して、クラスターにアクセスする 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**: Amazon EMR クラスターにアクセスする SageMaker AI 実行ロールに次のアクセス許可を付与します。

   1. [[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) に入ります。

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

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

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

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

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

   1. [**Create policy**] (ポリシーの作成) を選択します。

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

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

****  

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

------

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

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

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

------
#### [ Associate your assumable roles in JupyterLab using the 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. **[編集]** をクリックして、引き受けられるロール (アクセスロール) の ARN を追加します。

   1. [**Submit**] を選択してください。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    アクセス許可を更新した SageMaker AI 実行ロールを使用してスペースから起動した JupyterLab アプリケーションのターミナルで以下のコマンドを実行します。`domainID`、`user-profile-name`、`emr-accountID`、`AssumableRole` ([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](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)」を参照してください。

   以下は 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 を保存します。

------

Studio ノートブックまたは Studio Classic ノートブックから Amazon EMR クラスターを検出して接続する方法については、「[Studio または Studio Classic から Amazon EMR クラスターを一覧表示する](discover-emr-clusters.md)」を参照してください。

# Studio で Amazon EMR クラスターへのアクセスのための IAM ランタイムロールを設定する
<a name="studio-notebooks-emr-cluster-rbac"></a>

Studio ノートブックまたは Studio Classic ノートブックから Amazon EMR クラスターに接続すると、ランタイムロールと呼ばれる IAM ロールのリストを視覚的に参照し、臨機応変にそのいずれかを選択できます。その後、ノートブックから作成された Apache Spark、Apache Hive、または Presto のすべてのジョブは、ランタイムロールにアタッチされたポリシーが許可するデータとリソースにのみアクセスするようになります。また、 で管理されているデータレイクからデータにアクセスする場合 AWS Lake Formation、ランタイムロールにアタッチされたポリシーを使用して、テーブルレベルおよび列レベルのアクセスを適用できます。

この機能により、各自がデータへのアクセスレベルに合ったアクセス許可でスコープされたランタイムロールを使用して、自分とチームメイトが同じクラスターに接続できます。また、セッションは共有クラスター上で相互に分離されます。

Studio Classic を使用してこの機能を試すには、[「 AWS Lake Formation と Amazon SageMaker Studio Classic の Amazon EMR を使用してきめ細かなデータアクセスコントロールを適用する](https://aws.amazon.com/blogs/machine-learning/apply-fine-grained-data-access-controls-with-aws-lake-formation-and-amazon-emr-from-amazon-sagemaker-studio/)」を参照してください。このブログ投稿は、事前設定されたランタイムロールを使用して Amazon EMR クラスターへの接続を試すデモ環境をセットアップするのに役立ちます。

## 前提条件
<a name="studio-notebooks-emr-cluster-rbac-prereq"></a>

使用を開始する前に、次の前提条件を満たしていることを確認します。
+ Amazon EMR バージョン 6.9 以降を使用します。
+ **Studio Classic を使用する場合**: Studio Classic Jupyter サーバーアプリケーションの設定で、JupyterLab のバージョン 3 を使用します。このバージョンは、ランタイムロールを使用した Amazon EMR クラスターへの Studio Classic の接続をサポートします。

  **Studio を使用する場合**: [SageMaker ディストリビューションイメージ](sagemaker-distribution.md)バージョン `1.10` 以降を使用します。
+ クラスターのセキュリティ設定でランタイムロールの使用を許可します。詳細については、「[Runtime roles for Amazon EMR steps](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-steps-runtime-roles.html)」を参照してください。
+ 「[Studio または Studio Classic から Amazon EMR クラスターに接続するためにサポートされているイメージとカーネル](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels)」に記載されているカーネルのいずれかを使用してノートブックを作成します。
+ ランタイムロールを設定するには、「[ランタイム IAM ロールを使用するための Studio の設定](#studio-notebooks-emr-cluster-iam)」の手順を必ず確認します。

## クロスアカウント接続シナリオ
<a name="studio-notebooks-emr-cluster-rbac-scen"></a>

ランタイムロール認証は、データが Studio アカウントの外にある場合に、さまざまなクロスアカウント接続シナリオをサポートします。次の図は、Studio とデータアカウント間で Amazon EMR クラスター、データ、さらには Amazon EMR 実行ロールを割り当てる 3 つの異なる方法を説明しています。

![\[ランタイム IAM ロール認証でサポートされるクロスアカウントシナリオ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio-emr-rbac-scenarios.png)


オプション 1 では、Amazon EMR クラスターと Amazon EMR ランタイム実行ロールは、Studio アカウントとは別のデータアカウントに配置されています。Studio または Studio Classic の実行ロールに Amazon EMR アクセスロールを引き受けるアクセス許可を付与する、別の (`Assumable role` とも呼ばれる) Amazon EMR アクセスロールのアクセス許可ポリシーを定義します。Amazon EMR アクセスロールは、Studio または Studio Classic の実行ロールに代わって Amazon EMR API `GetClusterSessionCredentials` を呼び出し、クラスターへのアクセスを許可します。

オプション 2 では、Amazon EMR クラスターと Amazon EMR ランタイム実行ロールは、Studio アカウント内に配置されています。Studio 実行ロールには、Amazon EMR API `GetClusterSessionCredentials` を使用してクラスターにアクセスするアクセス許可があります。Amazon S3 バケットにアクセスするには、Amazon EMR ランタイム実行ロールにクロスアカウントの Amazon S3 バケットアクセス許可を付与します。このようなアクセス許可は、Amazon S3 バケットポリシー内で付与します。

オプション 3 では、Amazon EMR クラスターは Studio アカウント内にあり、Amazon EMRランタイム実行ロールはデータアカウント内にあります。Studio または Studio Classic の実行ロールには、Amazon EMR API `GetClusterSessionCredentials` を使用してクラスターにアクセスするアクセス許可が付与されています。Amazon EMR ランタイム実行ロールを実行ロールの設定 JSON に追加します。その後、クラスターを選択するときに UI でロールを選択できます。実行ロール設定 JSON ファイルの設定方法の詳細については、「[実行ロールを Studio または Studio Classic にプリロードする](#studio-notebooks-emr-cluster-iam-preload)」を参照してください。

## ランタイム IAM ロールを使用するための Studio の設定
<a name="studio-notebooks-emr-cluster-iam"></a>

Amazon EMR クラスターのランタイムロール認証を確立するには、必要な IAM ポリシー、ネットワーク、およびユーザビリティの強化を設定します。Amazon EMR クラスター、Amazon EMR ランタイム実行ロール、またはその両方が Studio アカウント以外にある場合、クロスアカウント配置を処理するかどうかによって設定は異なります。次のセクションでは、インストールするポリシー、アカウント間のトラフィックを許可するようにネットワークを設定する方法、Amazon EMR 接続を自動化するために指定するローカル設定ファイルについて説明します。

### Amazon EMR クラスターと Studio が同じアカウントにある場合のランタイムロール認証の設定
<a name="studio-notebooks-emr-cluster-iam-same"></a>

Amazon EMR クラスターが Studio アカウント内に配置されている場合は、以下の手順を実行して Studio 実行ポリシーに必要なアクセス許可を追加します。

1. Amazon EMR クラスターに接続するために必要な IAM ポリシーを追加します。詳細については、「[Amazon EMR クラスターのリストを設定する](studio-notebooks-configure-discoverability-emr-cluster.md)」を参照してください。

1. ポリシーで指定されている、単一または複数の許可済みの Amazon EMR ランタイム実行ロールを渡す際に、Amazon EMR API `GetClusterSessionCredentials` を呼び出すアクセス許可を付与します。

1. (オプション) ユーザー定義の命名規則に従った IAM ロールを渡すアクセス許可を付与します。

1. (オプション) 特定のユーザー定義文字列でタグ付けされた Amazon EMR クラスターにアクセスするアクセス許可を付与します。

1. Amazon EMR クラスターに接続する際に使用するロールを選択できるように、IAM ロールをプリロードします。IAM ロールをプリロードする方法の詳細については、「[実行ロールを Studio または Studio Classic にプリロードする](#studio-notebooks-emr-cluster-iam-preload)」を参照してください。

次のサンプルポリシーでは、モデリンググループとトレーニンググループに属する Amazon EMR ランタイム実行ロールが `GetClusterSessionCredentials` を呼び出すことを許可します。さらに、ポリシー所有者は、`modeling` または `training` という文字列でタグ付けされた Amazon EMR クラスターにアクセスできます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "elasticmapreduce:GetClusterSessionCredentials",
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "elasticmapreduce:ExecutionRoleArn": [
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-modeling*",
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-training*"
			]},
		"StringLike":{
                    "elasticmapreduce:ResourceTag/group": [
                        "*modeling*",
                        "*training*"
                    ]
                }
            }
        }
    ]
}
```

------

### クラスターと Studio が別のアカウントにある場合のランタイムロール認証の設定
<a name="studio-notebooks-emr-cluster-iam-diff"></a>

Amazon EMR クラスターが Studio アカウント内に配置されていない場合は、クラスターに接続できるように、SageMaker AI 実行ロールがクロスアカウントの Amazon EMR アクセスロールを引き受けることを許可します。次の手順を実行して、クロスアカウント設定をセットアップします。

1. 実行ロールが Amazon EMR アクセスロールを引き受けられるように、SageMaker AI 実行ロールのアクセス許可ポリシーを作成します。次に、ポリシーの例を示します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowAssumeCrossAccountEMRAccessRole",
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Resource": "arn:aws:iam::111122223333:role/emr-access-role-name"
           }
       ]
   }
   ```

------

1. 信頼ポリシーを作成して、Amazon EMR アクセスロールを引き受ける信頼された Studio アカウント ID を指定します。次に、ポリシーの例を示します。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
           "Sid": "AllowCrossAccountSageMakerExecutionRoleToAssumeThisRole",
           "Effect": "Allow",
           "Principal": {
             "AWS": "arn:aws:iam::111122223333:role/studio_execution_role"
           },
           "Action": "sts:AssumeRole"
         }
       ]
   }
   ```

------

1. Amazon EMR ランタイム実行ロールに、クラスター上で想定されるタスクを実行するために必要なアクセス許可を付与するように、Amazon EMR アクセスロールのアクセス許可ポリシーを作成します。アクセスロールのアクセス許可ポリシーで指定された Amazon EMR ランタイム実行ロールを使用して `GetClusterSessionCredentials` API を呼び出すように、Amazon EMR アクセスロールを設定します。次に、ポリシーの例を示します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowCallingEmrGetClusterSessionCredentialsAPI",
               "Effect": "Allow",
               "Action": "elasticmapreduce:GetClusterSessionCredentials",
               "Resource": "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/cluster-id",
               "Condition": {
                   "StringLike": {
                       "elasticmapreduce:ExecutionRoleArn": [
                           "arn:aws:iam::111122223333:role/emr-execution-role-name"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. アカウント間でトラフィックが行き来できるように、クロスアカウントネットワークを設定します。ガイド付き手順については、「*Set up the [Amazon EMR クラスターのネットワークアクセスを設定する](studio-notebooks-emr-networking.md)*」を参照してください。このセクションの手順は、以下のタスクを完了するのに役立ちます。

   1. Studio アカウントと Amazon EMR アカウントを VPC ピアリング接続して接続を確立します。

   1. 両方のアカウントのプライベートサブネットルートテーブルにルートを手動で追加します。これにより、Studio アカウントからリモートアカウントのプライベートサブネットへの Amazon EMR クラスターの作成と接続ができるようになります。

   1. Studio ドメインにアタッチされたセキュリティグループを設定してアウトバウンドトラフィックを許可し、Amazon EMR プライマリノードのセキュリティグループを Studio インスタンスのセキュリティグループからのインバウンド TCP トラフィックを許可するように設定します。

1. Amazon EMR クラスターに接続する際に使用するロールを選択できるように、IAM ランタイムロールをプリロードします。IAM ロールをプリロードする方法の詳細については、「[実行ロールを Studio または Studio Classic にプリロードする](#studio-notebooks-emr-cluster-iam-preload)」を参照してください。

### Lake Formation へのアクセスの設定
<a name="studio-notebooks-emr-cluster-iam-lf"></a>

が管理するデータレイクからデータにアクセスする場合 AWS Lake Formation、ランタイムロールにアタッチされたポリシーを使用して、テーブルレベルおよび列レベルのアクセスを適用できます。Lake Formation へのアクセス許可を設定するには、「[Integrate Amazon EMR with AWS Lake Formation](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-lake-formation.html)」を参照してください。

### 実行ロールを Studio または Studio Classic にプリロードする
<a name="studio-notebooks-emr-cluster-iam-preload"></a>

Amazon EMR クラスターに接続する際に使用するロールを選択できるように、IAM ランタイムロールをプリロードできます。Studio で JupyterLab を使用する場合、SageMaker AI コンソールまたは提供されているスクリプトを使用できます。

------
#### [ Preload runtime roles in JupyterLab using the 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. [**Submit**] を選択してください。

次に Amazon EMR サーバーに接続すると、ランタイムロールがドロップダウンメニューに表示されて選択できるようになります。

------
#### [ Preload runtime roles in JupyterLab using a Python script ]

アクセス許可を更新した SageMaker AI 実行ロールを使用してスペースから起動した JupyterLab アプリケーションのターミナルで以下のコマンドを実行します。`domainID`、`user-profile-name`、`emr-accountID`、`EMRServiceRole` は、実際の適切な値に置き換えます。このコードスニペットは、クロスアカウントユースケースで SageMaker AI ドメイン内のユーザープロファイル設定 (`client.update_user_profile`) を更新します。具体的には、Amazon EMR のサービスロールを設定します。JupyterLab アプリケーションが Amazon EMR アカウント内で Amazon EMR を実行するための特定の IAM ロール (`AssumableRole` または `AccessRole`) を引き受けることを許可します。

スペースがドメインレベルで設定された実行ロールを使用している場合は、`client.update_domain` を使用してドメイン設定を更新することもできます。

```
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",
UserSettings={
    '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))
```

------
#### [ Preload runtime roles in Studio Classic ]

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

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

以下は LCC スクリプトの例です。スクリプトを変更するには、`AssumableRole` と `emr-account` をそれぞれの値に置き換えます。クロスアカウントの数は、最大 5 つに制限されています。

以下のスニペットは、Studio Classic アプリケーションとクラスターが同じアカウントにある場合に適用できる LCC bash スクリプトの例です。

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::123456789012:role/emr-execution-role-1",
          "arn:aws:iam::123456789012:role/emr-execution-role-2"
      ]
    }
}
EOF
```

Studio Classic アプリケーションとクラスターが別々のアカウントにある場合は、クラスターを使用できる Amazon EMR アクセスロールを指定します。以下のサンプルポリシーでは、*123456789012* が Amazon EMR クラスターのアカウント ID で、*212121212121* と *434343434343* は、許可済みの Amazon EMR アクセスロールの ARN です。

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::212121212121:role/emr-execution-role-1",
          "arn:aws:iam::434343434343:role/emr-execution-role-2"
      ]
    }
}
EOF

# add your cross-account EMR access role
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 << 'EOF' > "$FILE"
{
    "123456789012": "arn:aws:iam::123456789012:role/cross-account-emr-access-role"
}
EOF
```

------

# リファレンスポリシー
<a name="studio-set-up-emr-permissions-reference"></a>
+ **Amazon EMR ポリシーを一覧表示する**: このポリシーは、以下のアクションの実行を許可します。
  + `AllowPresignedUrl` は、Studio 内から Spark UI にアクセスするための署名付き URL の生成を許可します。
  + `AllowClusterDiscovery` と `AllowClusterDetailsDiscovery` は、指定したリージョンとアカウント内の Amazon EMR クラスターの一覧表示と説明を許可します。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowPresignedUrl",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:CreatePersistentAppUI",
                  "elasticmapreduce:DescribePersistentAppUI",
                  "elasticmapreduce:GetPersistentAppUIPresignedURL",
                  "elasticmapreduce:GetOnClusterAppUIPresignedURL"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDetailsDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:DescribeCluster",
                  "elasticmapreduce:ListInstances",
                  "elasticmapreduce:ListInstanceGroups",
                  "elasticmapreduce:DescribeSecurityConfiguration"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:ListClusters"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ **Amazon EMR クラスターのポリシーを作成する**: このポリシーは、以下のアクションの実行を許可します。
  + `AllowEMRTemplateDiscovery` は、Service Catalog での Amazon EMR テンプレートの検索を許可します。Studio と Studio Classic は、これを使用して利用できるテンプレートを表示します。
  + `AllowSagemakerProjectManagement` は [SageMaker AI プロジェクトとは](sagemaker-projects-whatis.md) の作成を有効にします。Studio または Studio Classic では、 へのアクセス AWS Service Catalog は を通じて管理されます[SageMaker AI プロジェクトとは](sagemaker-projects-whatis.md)。

  ここで提示する JSON で定義されている IAM ポリシーは、このようなアクセス許可を付与します。ステートメントのリストをロールのインラインポリシーにコピーする前に、*region* と *accountID* を実際のリージョンと AWS アカウント ID の値に置き換えます。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowEMRTemplateDiscovery",
              "Effect": "Allow",
              "Action": [
                  "servicecatalog:SearchProducts"
              ],
              "Resource": "*"
          },
          {
              "Sid": "AllowSagemakerProjectManagement",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:CreateProject",
                  "sagemaker:DeleteProject"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:111122223333:project/*"
          }
      ]
  }
  ```

------
+ **ドメイン、ユーザープロファイル、およびスペース更新アクションポリシー: **次のポリシーは、指定されたリージョンと 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/*"
              ]
          }
      ]
  }
  ```

------

# ユーザーガイド
<a name="studio-emr-user-guide"></a>

このセクションでは、データサイエンティストとデータエンジニアが Studio または Studio Classic から Amazon EMR クラスターを起動、検出、接続、または終了できる方法について説明します。

ユーザーがクラスターを一覧表示または起動できるようにする前に、管理者は Studio 環境で必要な設定を指定しておく必要があります。Amazon EMR クラスターのセルフプロビジョニングと一覧表示を許可するように、管理者が Studio 環境を設定する方法については、「[管理者ガイド](studio-emr-admin-guide.md)」を参照してください。

**Topics**
+ [Studio または Studio Classic から Amazon EMR クラスターに接続するためにサポートされているイメージとカーネル](#studio-notebooks-emr-cluster-connect-kernels)
+ [独自のイメージを使用する](#studio-notebooks-emr-byoi)
+ [Studio または Studio Classic から Amazon EMR クラスターを起動する](studio-notebooks-launch-emr-cluster-from-template.md)
+ [Studio または Studio Classic から Amazon EMR クラスターを一覧表示する](discover-emr-clusters.md)
+ [SageMaker Studio または Studio Classic から Amazon EMR クラスターに接続する](connect-emr-clusters.md)
+ [Studio または Studio Classic から Amazon EMR クラスターを終了する](terminate-emr-clusters.md)
+ [Studio または Studio Classic から Spark UI にアクセスする](studio-notebooks-access-spark-ui.md)

## Studio または Studio Classic から Amazon EMR クラスターに接続するためにサポートされているイメージとカーネル
<a name="studio-notebooks-emr-cluster-connect-kernels"></a>

以下のイメージとカーネルには、[Apache Livy](https://livy.apache.org/) を使用して [SparkMagic](https://github.com/jupyter-incubator/sparkmagic) ライブラリ経由でリモートの Spark (Amazon EMR) クラスターに接続できるようにする JupyterLab 拡張機能である [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/) を備えています。
+ **Studio を使用する場合:** SageMaker Distribution は、JupyterLab ノートブックインスタンスのデフォルトイメージとして使用されるデータサイエンス向けの Docker 環境です。[SageMaker AI Distribution](https://github.com/aws/sagemaker-distribution) のすべてのバージョンには、`sagemaker-studio-analytics-extension` がプリインストールされています。
+ **Studio Classic を使用する場合:** `sagemaker-studio-analytics-extension` には、以下のイメージがプリインストールされています。
  + DataScience – Python 3 カーネル
  + DataScience 2.0 – Python 3 カーネル
  + DataScience 3.0 – Python 3 カーネル
  + SparkAnalytics 1.0 – SparkMagic および PySpark カーネル
  + SparkAnalytics 2.0 – SparkMagic および PySpark カーネル
  + SparkMagic – SparkMagic および PySpark カーネル
  + PyTorch 1.8 – Python 3 カーネル
  + TensorFlow 2.6 – Python 3 カーネル
  + TensorFlow 2.11 – Python 3 カーネル

別の組み込みイメージまたは独自のイメージを使用して Amazon EMR クラスターに接続するには、「[独自のイメージを使用する](#studio-notebooks-emr-byoi)」の手順に従ってください。

## 独自のイメージを使用する
<a name="studio-notebooks-emr-byoi"></a>

Studio または Studio Classic で独自のイメージを使用し、ノートブックを Amazon EMR クラスターに接続できるようにするには、以下の [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/) 拡張機能をカーネルにインストールします。これは、[SparkMagic](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html) ライブラリを介したSageMaker Studio ノートブックまたは Studio Classic ノートブックの Spark (Amazon EMR) クラスターへの接続をサポートしています。

```
pip install sparkmagic
pip install sagemaker-studio-sparkmagic-lib
pip install sagemaker-studio-analytics-extension
```

[Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html) 認証を使用して Amazon EMR に接続する場合は、kinit クライアントをインストールする必要があります。お使いの OS によって、kinit クライアントをインストールするコマンドは異なる場合があります。Ubuntu (Debian ベース) イメージを取り込むには、`apt-get install -y -qq krb5-user` コマンドを使用します。

SageMaker Studio または Studio Classic で独自のカスタムイメージを使用する方法の詳細については、「[Bring your own SageMaker image](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html)」を参照してください。

# Studio または Studio Classic から Amazon EMR クラスターを起動する
<a name="studio-notebooks-launch-emr-cluster-from-template"></a>

データサイエンティストとデータエンジニアは、管理者が設定した CloudFormation テンプレートを使用して Studio または Studio Classic から Amazon EMR クラスターを自己プロビジョニングできます。ユーザーがクラスターを起動できるようにする前に、管理者は Studio 環境で必要な設定を指定しておく必要があります。Amazon EMR クラスターのセルフプロビジョニングを許可するように、管理者が Studio 環境を設定する方法については、「[Service Catalog で Amazon EMR CloudFormation テンプレートを設定する](studio-notebooks-set-up-emr-templates.md)」を参照してください。

Studio または Studio Classic から新しい Amazon EMR クラスターをプロビジョンするには

1. Studio UI または Studio Classic UI の左側のパネルの左側のナビゲーションメニューで、**[データ]** ノードを選択します。**[Amazon EMR クラスター]** まで下に移動します。これにより、Studio または Studio Classic からアクセスできる Amazon EMR クラスターを一覧表示するページが開きます。

1. 右上隅にある **[作成]** ボタンをクリックします。これにより、利用できるクラスターテンプレートを一覧表示する新しいモーダルが開きます。

1. テンプレート名を選んでクラスターテンプレートを選択し、**[次へ]** をクリックします。

1. クラスター名や管理者が設定した特定の設定可能なパラメータなどのクラスターの詳細を入力して、**[クラスターを作成]** をクリックします。クラスターの作成には数分かかる場合があります。  
![\[Studio または Studio Classic からの Amazon EMR クラスター作成フォーム\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)

クラスターのプロビジョニングが完了すると、Studio UI または Studio Classic UI に *[クラスターが正常に作成されました]* というメッセージが表示されます。

クラスターに接続するには、「[SageMaker Studio または Studio Classic から Amazon EMR クラスターに接続する](connect-emr-clusters.md)」を参照してください。

# Studio または Studio Classic から Amazon EMR クラスターを一覧表示する
<a name="discover-emr-clusters"></a>

データサイエンティストとデータエンジニアは、Studio から Amazon EMR クラスターを検出し、接続できます。Amazon EMR クラスターは、Studio と同じ AWS アカウントまたは別の AWS アカウントにある場合があります。

ユーザーがクラスターを一覧表示または接続できるようにする前に、管理者は Studio 環境で必要な設定を指定しておく必要があります。実行中の Amazon EMR クラスターの検出を許可するように、管理者が Studio 環境を設定する方法については、「[管理者ガイド](studio-emr-admin-guide.md)」を参照してください。管理者が [Amazon EMR クラスターのクロスアカウント検出を設定](studio-notebooks-configure-discoverability-emr-cluster.md)した場合、クラスターの統合された一覧を表示できます。このリストには、Studio が使用する AWS アカウントのクラスターと、アクセス権が付与されたリモートアカウントのクラスターが含まれます。

Studio 内から利用可能な Amazon EMR クラスターのリストを表示するには:

1. Studio UI の左側のナビゲーションメニューで、**[EMR クラスター]** まで下にスクロールします。これにより、アクセスできる Amazon EMR クラスターを一覧表示するページが開きます。

   この一覧は、**[ブートストラッピング]**、**[開始中]**、**[実行中]**、**[待機中]** の各段階にあるクラスターを表示します。フィルターアイコンを使用すると、表示されているクラスターを現在のステータスで絞り込むことができます。

1. 接続する特定の**[実行中]** のクラスターを選択して、「[SageMaker Studio または Studio Classic から Amazon EMR クラスターに接続する](connect-emr-clusters.md)」を参照してください。

# SageMaker Studio または Studio Classic から Amazon EMR クラスターに接続する
<a name="connect-emr-clusters"></a>

データサイエンティストとデータエンジニアは、Studio ユーザーインターフェイスから直接 Amazon EMR クラスターを検出して接続できます。開始する前に、「[ステップ 4: Studio から Amazon EMR クラスターを一覧表示して起動できるようにアクセス許可を設定する](studio-notebooks-set-up-emr-templates.md#studio-emr-permissions)」セクションの説明に従って必要なアクセス許可が設定されていることを確認してください。これらのアクセス許可により、Studio はクラスターを作成、起動、表示、アクセス、終了できるようになります。

Amazon EMR クラスターには、Studio UI から直接新しい JupyterLab ノートブックに接続する方法と、実行中の JupyterLab アプリケーションのノートブックで接続を開始する方法を選択できます。

**重要**  
プライベートスペースから起動される JupyterLab アプリケーションと Studio Classic アプリケーションの Amazon EMR クラスターのみを検出して接続できます。Amazon EMR クラスターが Studio 環境と同じ AWS リージョンにあることを確認します。JupyterLab スペースでは、SageMaker Distribution イメージバージョン `1.10` 以降を使用する必要があります。

## Studio UI を使用して Amazon EMR クラスターに接続する
<a name="connect-emr-clusters-ui-options"></a>

Studio UI または Studio Classic UI を使用してクラスターに接続するには、「[Studio または Studio Classic から Amazon EMR クラスターを一覧表示する](discover-emr-clusters.md)」でアクセスしたクラスターのリストからも、SageMaker Studio ノートブックまたは Studio Classic ノートブックからも接続を開始できます。

**Studio UI から Amazon EMR クラスターを新しい JupyterLab ノートブックに接続するには:**

1. Studio UI の左側のパネルの左側のナビゲーションメニューで、**[データ]** ノードを選択します。**[Amazon EMR アプリケーションとクラスター]** まで下に移動します。これにより、**[Amazon EMR クラスター]** タブに Studio からアクセスできる Amazon EMR クラスターを一覧表示するページが開きます。
**注記**  
Amazon EMR クラスターへのクロスアカウントアクセスを許可するアクセス許可をユーザーまたは管理者が設定した場合は、Studio へのアクセスを許可したすべてのアカウントにわたるクラスターの統合された一覧を表示できます。

1. 新しいノートブックに接続する Amazon EMR クラスターを選択して、**[ノートブックにアタッチ]** をクリックします。これにより、JupyterLab スペースのリストを表示するモーダルウィンドウが開きます。

1. 
   + JupyterLab アプリケーションを起動するスペースを選択して、**[ノートブックを開く]** をクリックします。これにより、選択したスペースから JupyterLab アプリケーションが起動され、新しいノートブックが開きます。
**注記**  
Studio Classic を使用する場合は、イメージとカーネルを選択する必要があります。サポートされているイメージのリストについては、「[Studio または Studio Classic から Amazon EMR クラスターに接続するためにサポートされているイメージとカーネル](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels)」または「[独自のイメージを使用する](studio-emr-user-guide.md#studio-notebooks-emr-byoi)」を参照してください。
   + 別の方法として、モーダルウィンドウの上部にある**[新しいスペースの作成]** ボタンをクリックして、新しいプライベートスペースを作成することもできます。スペース名を入力してから、**[スペースを作成してノートブックを開く]** をクリックします。これにより、デフォルトのインスタンスタイプと最新の SageMaker ディストリビューションイメージが利用できるプライベートスペースが作成され、JupyterLab アプリケーションが起動され、新しいノートブックが開きます。

1. 選択したクラスターが Kerberos、LDAP、または[ランタイムロール]()認証を使用していない場合、Studio は認証情報タイプを選択するように求めます。**[HTTP 基本認証]** または **[認証情報なし]** を選択し、該当する場合は認証情報を入力します。

   選択したクラスターがランタイムロールをサポートしている場合は、Amazon EMR クラスターがジョブ実行のために引き受けることができる IAM ロール名を選択します。
**重要**  
ランタイムロールをサポートする Amazon EMR クラスターへの JupyterLab ノートブックの接続を正常に完了するには、「[Studio で Amazon EMR クラスターへのアクセスのための IAM ランタイムロールを設定する](studio-notebooks-emr-cluster-rbac.md)」で説明されているとおり、まずランタイムロールのリストをドメインまたはユーザープロファイルに関連付ける必要があります。このステップが完了していないと、接続を確立できません。

   選択すると、接続コマンドがノートブックの最初のセルにデータを入力して、Amazon EMR クラスターとの接続を開始します。

   接続に成功すると、接続と Spark アプリケーションの起動を確認するメッセージが表示されます。

**別の方法として、JupyterLab ノートブックまたは Studio Classic ノートブックからクラスターに接続することもできます。**

1. ノートブックの上部にある **[クラスター]** ボタンをクリックします。これにより、`Running` ステータスの Amazon EMR クラスターを一覧表示するモーダルウィンドウが開き、アクセスできます。**[Amazon EMR クラスター]** タブで、`Running` の Amazon EMR クラスターを確認できます。
**注記**  
Studio Classic を使用する場合、**[クラスター]** は、[Studio または Studio Classic から Amazon EMR クラスターに接続するためにサポートされているイメージとカーネル](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels) から、または [独自のイメージを使用する](studio-emr-user-guide.md#studio-notebooks-emr-byoi) からカーネルを使用する場合にのみ表示されます。ノートブックの上部に **[クラスター]** が表示されない場合は、管理者が[クラスターの検出可能性を設定している](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-configure-discoverability-emr-cluster.html)ことを確認し、サポートされているカーネルに切り替えてください。

1. 接続するクラスターを選択し、**[接続]** を選択します。

1. [ランタイム IAM ロール](studio-notebooks-emr-cluster-rbac.md)をサポートするように Amazon EMR クラスターを設定した場合は、**[Amazon EMR 実行ロール]** ドロップダウンメニューからロールを選択できます。
**重要**  
ランタイムロールをサポートする Amazon EMR クラスターへの JupyterLab ノートブックの接続を正常に完了するには、「[Studio で Amazon EMR クラスターへのアクセスのための IAM ランタイムロールを設定する](studio-notebooks-emr-cluster-rbac.md)」で説明されているとおり、まずランタイムロールのリストをドメインまたはユーザープロファイルに関連付ける必要があります。このステップが完了していないと、接続を確立できません。

   それ以外の場合、選択したクラスターが Kerberos、LDAP、またはランタイムロール認証を使用していない場合、Studio または Studio Classic は認証情報タイプを選択するように求めます。**[HTTP basic authentication]** (HTTP Basic 認証) または **[No Credential]** (認証情報なし) を選択できます。

1. Studio は、コードブロックをアクティブなセルに追加して実行し、接続を確立します。このセルには、認証タイプに応じてノートブックをアプリケーションに接続するための接続 Magic コマンドが含まれています。

   接続に成功すると、接続と Spark アプリケーションの起動を確認するメッセージが表示されます。

## 接続コマンドを使用して Amazon EMR クラスターに接続する
<a name="connect-emr-clusters-manually"></a>

Amazon EMR クラスターへの接続を確立するには、ノートブックセル内で接続コマンドを実行できます。

接続を確立する際は、[Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html)、[Lightweight Directory Access Protocol (LDAP)](https://docs.aws.amazon.com/)、または[ランタイム IAM ロール](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-emr-cluster-rbac.html) の認証を使用して認証できます。選択する認証方法は、クラスターの設定によって異なります。

Kerberos 認証を使用する Amazon EMR クラスターを設定するには、この例、「[Access Apache Livy using a Network Load Balancer on a Kerberos-enabled Amazon EMR cluster](https://aws.amazon.com/blogs/big-data/access-apache-livy-using-a-network-load-balancer-on-a-kerberos-enabled-amazon-emr-cluster/)」を参照してください。別の方法として、[aws-samples/sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) の GitHub レポジトリで、Kerberos または LDAP の認証を使用した CloudFormation サンプルテンプレートを利用することもできます。

管理者がクロスアカウントアクセスを有効にしている場合は、Studio Classic アプリケーションとクラスターが同じアカウントに存在するか、異なる AWS アカウントに存在するかにかかわらず、Studio Classic ノートブックから Amazon EMR クラスターに接続できます。

以下の各認証タイプで指定されたコマンドを使用して、Studio ノートブックまたは Studio Classic ノートブックからクラスターに接続します。
+ **Kerberos**

  クロスアカウントの Amazon EMR アクセスが必要な場合は、`--assumable-role-arn` 引数を追加します。HTTPS を使用してクラスターに接続する場合は、`--verify-certificate` 引数を追加します。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Kerberos --language python 
  [--assumable-role-arn EMR_access_role_ARN ] 
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **LDAP**

  クロスアカウントの Amazon EMR アクセスが必要な場合は、`--assumable-role-arn` 引数を追加します。HTTPS を使用してクラスターに接続する場合は、`--verify-certificate` 引数を追加します。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Basic_Access --language python 
  [--assumable-role-arn EMR_access_role_ARN ]
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **NoAuth**

  クロスアカウントの Amazon EMR アクセスが必要な場合は、`--assumable-role-arn` 引数を追加します。HTTPS を使用してクラスターに接続する場合は、`--verify-certificate` 引数を追加します。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type None --language python
  [--assumable-role-arn EMR_access_role_ARN ]
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **ランタイム IAM ロール**

  クロスアカウントの Amazon EMR アクセスが必要な場合は、`--assumable-role-arn` 引数を追加します。HTTPS を使用してクラスターに接続する場合は、`--verify-certificate` 引数を追加します。

  ランタイム IAM ロールを使用して Amazon EMR クラスターに接続する方法の詳細については、「[Studio で Amazon EMR クラスターへのアクセスのための IAM ランタイムロールを設定する](studio-notebooks-emr-cluster-rbac.md)」を参照してください。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Basic_Access \
  --emr-execution-role-arn arn:aws:iam::studio_account_id:role/emr-execution-role-name
  [--assumable-role-arn EMR_access_role_ARN]
  [--verify-certificate /home/user/certificateKey.pem]
  ```

## HTTPS 経由で Amazon EMR クラスターに接続する
<a name="connect-emr-clusters-ssl"></a>

Amazon EMR クラスターで転送暗号化が有効になっており、Apache Livy サーバーが HTTPS 用に設定されていて、Studio または Studio Classic が HTTPS を使用して Amazon EMR と通信するようにする場合は、証明書キーにアクセスするように Studio または Studio Classic を設定する必要があります。

自己署名証明書またはローカル認証局 (CA) 署名証明書の場合、2 つのステップでこれを行うことができます。

1. 次のいずれかのオプションを使用して、証明書の PEM ファイルをローカルファイルシステムにダウンロードします。
   + Jupyter に組み込まれているファイルアップロード機能。
   + ノートブックのセル。
   + (Studio Classic を使用する場合のみ) ライフサイクル設定 (LCC) スクリプト。

     LCC スクリプトの使用方法については、「[Customize a Notebook Instance Using a Lifecycle Configuration Script](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-lifecycle-config.html)」を参照してください。

1. 接続コマンドの `--verify-certificate` 引数に証明書へのパスを指定して、証明書の検証を有効にします。

   ```
   %sm_analytics emr connect --cluster-id cluster_id \
   --verify-certificate /home/user/certificateKey.pem ...
   ```

パブリック CA が発行する証明書の場合は、`--verify-certificate` パラメータを `true` に設定して証明書の検証を設定します。

または、`--verify-certificate` パラメータを `false` に設定して証明書の検証を無効にすることもできます。

Amazon EMR クラスターに利用できる接続コマンドのリストは、「[接続コマンドを使用して Amazon EMR クラスターに接続する](#connect-emr-clusters-manually)」で確認できます。

# Studio または Studio Classic から Amazon EMR クラスターを終了する
<a name="terminate-emr-clusters"></a>

次の手順では、Studio ノートブックまたは Studio Classic ノートブックから Amazon EMR クラスターを終了する方法を説明します。

**`Running` ステータスのクラスターを終了するには、使用可能な Amazon EMR クラスターのリストに移動します。**

1. Studio UI の左側のナビゲーションメニューで、**[データ]** ノードまで下にスクロールします。

1. **[EMR クラスター]** ノードまで下に移動します。これにより、アクセスできる Amazon EMR クラスターを一覧表示するページが開きます。

1. 終了するクラスター名を選択して、**[終了]** をクリックします。

1. これにより、クラスター上の保留中の作業やデータが終了後に完全に失われることを通知する確認ウィンドウが開きます。もう一度 **[終了]** を選択して確定します。

# Studio または Studio Classic から Spark UI にアクセスする
<a name="studio-notebooks-access-spark-ui"></a>

次のセクションでは、SageMaker AI Studio または Studio Classic ノートブックから Spark UI にアクセスする手順について説明します。Spark UI を使用すると、Studio ノートブックまたは Studio Classic ノートブックから Amazon EMR で実行するために送信された Spark ジョブをモニタリングしてデバッグできます。Spark UI にアクセスするための 2 つの方法は、SSH トンネリングと署名済み URL です。

## Spark UI アクセス用の SSH トンネリングを設定する
<a name="studio-notebooks-emr-ssh-tunneling"></a>

Spark UI にアクセスするための SSH トンネリングを設定するには、このセクションの 2 つのオプションのいずれかに従います。

SSH トンネリングを設定するためのオプションを次に示します。
+ [オプション 1: ローカルポートフォワーディングを使用してマスターノードへの SSH トンネルをセットアップする](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ssh-tunnel-local.html)
+ [オプション 2、パート 1: ダイナミックポートフォワーディングを使用してマスターノードへの SSH トンネルをセットアップする](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ssh-tunnel.html)

  [オプション 2、パート 2: マスターノードでホストされるウェブサイトを表示するようにプロキシを設定する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-proxy.html)

Amazon EMR クラスターでホストされているウェブインターフェイスの表示の詳細については、「[Amazon EMR クラスターでホストされているウェブインターフェイスを表示する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html)」を参照してください。Amazon EMR コンソールにアクセスして Spark UI にアクセスすることもできます。

**注記**  
署名済み URL が利用できない場合でも、SSH トンネルをセットアップできます。

## 署名付き URL
<a name="studio-notebooks-emr-spark-ui-presigned-urls"></a>

SageMaker Studio または Studio Classic ノートブックから Amazon EMR 上の Spark UI にアクセスできるワンクリック URL を作成するには、以下の IAM アクセス許可を有効にする必要があります。適用するオプションを次から選択します。
+ **SageMaker Studio ノートブックまたは Studio Classic ノートブックと同じアカウントに配置された Amazon EMR クラスターの場合: SageMaker Studio または Studio Classic の IAM 実行ロールに以下のアクセス許可を追加します。**
+ **(SageMaker Studio ノートブックまたは Studio Classic ノートブックとは) 別のアカウントに配置された Amazon EMR クラスターの場合: [Studio または Studio Classic から Amazon EMR クラスターを一覧表示する](discover-emr-clusters.md)ために作成したクロスアカウントロールに以下のアクセス許可を追加します。**

**注記**  
署名付き URL には、次のリージョンでコンソールからアクセスできます。  
米国東部 (バージニア州北部) リージョン
US West (N. California) リージョン
カナダ (中部) リージョン
欧州 (フランクフルト) リージョン
欧州 (ストックホルム) リージョン
欧州 (アイルランド) リージョン
欧州 (ロンドン) リージョン
欧州(パリ)リージョン
アジアパシフィック (東京) リージョン
Asia Pacific (Seoul) Region
アジアパシフィック (シドニー) リージョン
アジアパシフィック (ムンバイ) リージョン
アジアパシフィック (シンガポール) リージョン
南米 (サンパウロ)

 次のポリシーは、実行ロールの署名付き URL へのアクセス権を付与します。

```
{
        "Sid": "AllowPresignedUrl",
        "Effect": "Allow",
        "Action": [
            "elasticmapreduce:DescribeCluster",
            "elasticmapreduce:ListInstanceGroups",
            "elasticmapreduce:CreatePersistentAppUI",
            "elasticmapreduce:DescribePersistentAppUI",
            "elasticmapreduce:GetPersistentAppUIPresignedURL",
            "elasticmapreduce:GetOnClusterAppUIPresignedURL"
        ],
        "Resource": [
            "arn:aws:elasticmapreduce:region:account-id:cluster/*"
        ]
}
```

# ブログとホワイトペーパー
<a name="studio-notebooks-emr-resources"></a>

以下のブログでは、映画レビューのセンチメント予測のケーススタディを使用して、完全な機械学習ワークフローを実行するプロセスを説明しています。これには、データ準備、Spark ジョブのモニタリング、Studio ノートブックまたは Studio Classic ノートブックから予測を直接取得するための ML モデルのトレーニングとデプロイなどのプロセスがあります。
+ 「[Create and manage Amazon EMR clusters from SageMaker Studio or Studio Classic to run interactive Spark and ML workloads](https://aws.amazon.com/blogs/machine-learning/part-1-create-and-manage-amazon-emr-clusters-from-sagemaker-studio-to-run-interactive-spark-and-ml-workloads/)」
+ SageMaker Studio または Studio Classic と Amazon EMR クラスターが別々のアカウントにデプロイされるクロス AWS アカウント設定にユースケースを拡張するには、[SageMaker Studio または Studio Classic から Amazon EMR クラスターを作成して管理し、インタラクティブな Spark および ML ワークロードを実行する - パート 2](https://aws.amazon.com/blogs/machine-learning/part-2-create-and-manage-amazon-emr-clusters-from-sagemaker-studio-to-run-interactive-spark-and-ml-workloads/)」を参照してください。

以下も参照してください。
+ 「[Access Apache Livy using a Network Load Balancer on a Kerberos-enabled Amazon EMR cluster](https://aws.amazon.com/blogs/big-data/access-apache-livy-using-a-network-load-balancer-on-a-kerberos-enabled-amazon-emr-cluster/)」の設定のウォークスルー。
+ AWS [SageMaker Studio または Studio Classic のベストプラクティス](https://docs.aws.amazon.com/whitepapers/latest/sagemaker-studio-admin-best-practices/sagemaker-studio-admin-best-practices.html)に関するホワイトペーパー。

# トラブルシューティング
<a name="studio-notebooks-emr-troubleshooting"></a>

Studio ノートブックまたは Studio Classic ノートブックから Amazon EMR クラスターを操作する場合、接続または使用プロセス中にさまざまな潜在的な問題や課題が発生する場合があります。このようなエラーのトラブルシューティングと解決に役立つように、このセクションでは発生する可能性のある一般的な問題に関するガイダンスを提供します。

以下は、Studio ノートブックまたは Studio Classic ノートブックから Amazon EMR クラスターに接続したり使用したりする際に発生する可能性のある一般的なエラーのトラブルシューティング方法を説明します。

## Livy 接続がハングアップまたは失敗した場合のトラブルシューティング
<a name="studio-notebooks-emr-troubleshooting.memoryerror"></a>

以下は、Studio ノートブックまたは Studio Classic ノートブックから Amazon EMR クラスターを使用する際に発生する可能性がある Livy 接続に関する問題です。
+ **Amazon EMR クラスターでメモリ不足エラーが発生しました。**

  `sparkmagic` による Livy 接続がハングアップまたは失敗する原因としては、Amazon EMR クラスターでメモリ不足エラーが発生したことが考えられます。

  デフォルトでは、Apache Spark ドライバーの Java 設定パラメータ `spark.driver.defaultJavaOptions` は `-XX:OnOutOfMemoryError='kill -9 %p'` に設定されています。つまり、ドライバープログラムで `OutOfMemoryError` が発生したときに実行されるデフォルトのアクションは、SIGKILL シグナルを送信してドライバープログラムを終了することを意味します。Apache Spark ドライバーが終了すると、そのドライバーに依存する `sparkmagic` 経由の Livy 接続はすべてハングまたは失敗します。これは、Spark ドライバーがタスクのスケジュール設定や実行など、Spark アプリケーションのリソースを管理する責任があるためです。このドライバーがないと Spark アプリケーションは機能せず、Spark アプリケーションを操作しようとしても失敗します。

  Spark クラスターでメモリの問題が発生していると思われる場合は、[Amazon EMR ログ](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html)を確認できます。メモリ不足エラーにより強制終了されたコンテナは、通常、コード `137` で終了します。このような場合は、Spark アプリケーションを再起動し、新しい Livy 接続を確立して Spark クラスターとのやり取りを再開する必要があります。

  ナレッジベースの記事[「Amazon EMR の Spark で「メモリ制限を超えたために YARN によって強制終了されたコンテナ」というエラーを解決する方法を教えてください](https://repost.aws/knowledge-center/emr-spark-yarn-memory-limit)」を参照して、out-of-memoryの問題に対処するために使用できるさまざまな戦略とパラメータについて学習できます。 AWS re:Post 

  Amazon EMR クラスターで Apache Spark ワークロードを実行する際のベストプラクティスと調整ガイダンスについては、「[Amazon EMR Best Practices Guides](https://aws.github.io/aws-emr-best-practices/)」を確認することをお勧めします。
+ **Amazon EMR クラスターに初めて接続すると、Livy セッションがタイムアウトします。**

  [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/) を使用して Amazon EMR クラスターに初めて接続すると、[Apache Livy](https://livy.apache.org/) を使用した [SparkMagic](https://github.com/jupyter-incubator/sparkmagic) ライブラリ経由でリモート Spark (Amazon EMR) クラスターへの接続が可能になり、次の接続タイムアウトエラーが発生する可能性があります:

  `An error was encountered: Session 0 did not start up in 60 seconds.`

  Amazon EMR クラスターで接続の確立時に Spark アプリケーションの初期化が必要な場合、接続タイムアウトエラーが発生する可能性が高くなります。

  分析拡張機能を経由して Livy を使用して Amazon EMR クラスターに接続する際にタイムアウトが発生する可能性を減らすため、`sagemaker-studio-analytics-extension` バージョン `0.0.19` 以降では、デフォルトのサーバーセッションタイムアウトが、`sparkmagic` のデフォルトの `60` 秒ではなく `120` 秒にオーバーライドされます。

  以下のアップグレードコマンドを実行して、拡張機能を `0.0.18` 以降にアップグレードすることをおすすめします。

  ```
  pip install --upgrade sagemaker-studio-analytics-extension
  ```

  `sparkmagic` でカスタムタイムアウト設定を指定する場合、`sagemaker-studio-analytics-extension` は、このオーバーライドを優先することに注意してください。ただし、セッションタイムアウトを `60` 秒に設定すると、`sagemaker-studio-analytics-extension` でデフォルトのサーバーセッションタイムアウト `120` 秒が自動的にトリガーされます。