

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

# Amazon SageMaker Studio でのローカルモードのサポート
<a name="studio-updated-local"></a>

**重要**  
Amazon SageMaker Studio または Amazon SageMaker Studio Classic に Amazon SageMaker リソースの作成を許可するカスタム IAM ポリシーでは、これらのリソースにタグを追加するアクセス許可も付与する必要があります。Studio と Studio Classic は、作成したリソースに自動的にタグ付けするため、リソースにタグを追加するアクセス許可が必要になります。IAM ポリシーで Studio と Studio Classic によるリソースの作成が許可されていても、タグ付けが許可されていない場合は、リソースを作成しようとしたときに「AccessDenied」エラーが発生する可能性があります。詳細については、「[SageMaker AI リソースにタグ付けのアクセス許可を付与する](security_iam_id-based-policy-examples.md#grant-tagging-permissions)」を参照してください。  
SageMaker リソースを作成するためのアクセス許可を付与する [AWS Amazon SageMaker AI の マネージドポリシー](security-iam-awsmanpol.md) には、それらのリソースの作成中にタグを追加するためのアクセス許可もあらかじめ含まれています。

Amazon SageMaker Studio アプリケーションでサポートされるローカルモードを使用すると、ローカル環境にデプロイする推定器、プロセッサ、パイプラインを作成できます。ローカルモードを使用すると、Amazon SageMaker AI が管理するトレーニング環境またはホスティング環境で機械学習スクリプトを実行する前にテストを実行できます。Studio は、次のアプリケーションでローカルモードをサポートしています。
+ Amazon SageMaker Studio Classic
+ JupyterLab
+ Code-OSS (Visual Studio Code - Open Source) に基づく Code Editor

Studio アプリケーションのローカルモードは、SageMaker Python SDK を使用して呼び出されます。Studio アプリケーションでは、ローカルモードは Amazon SageMaker ノートブックインスタンスと同様に機能しますが、いくつかの違いがあります。[Rootless Docker 設定](studio-updated-local-get-started.md#studio-updated-local-rootless) を有効にすると、オンプレミスリポジトリやパブリックレジストリなどの VPC 構成を介して、追加の Docker レジストリにアクセスできるようになります。SageMaker Python SDK でのローカルモード使用の詳細については、[「Local Mode」](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode)を参照してください。

**注記**  
Studio アプリケーションは、ローカルモードでのマルチコンテナジョブをサポートしていません。ローカルモードジョブは、トレーニング、推論、および処理ジョブの 1 つのインスタンスに制限されます。ローカルモードジョブを作成する場合、インスタンスカウント設定は `1` である必要があります。 

## Docker サポート
<a name="studio-updated-local-docker"></a>

ローカルモードのサポートの一環として、Studio アプリケーションは制限付き Docker アクセス機能をサポートしています。このサポートにより、ユーザーは Jupyter Notebook またはアプリケーションのイメージターミナルから Docker API を操作できます。顧客は次のいずれかを使用して Docker とやり取りできます。
+ [Docker CLI](https://docs.docker.com/engine/reference/run/)
+ [Docker Compose CLI](https://docs.docker.com/compose/reference/)
+ 各言語用の Docker SDK クライアント

Studio は、Docker アクセス機能も以下の制限付きでサポートしています。
+ Docker ネットワークの使用はサポートされていません。
+ コンテナの実行中は、Docker [ボリューム](https://docs.docker.com/storage/volumes/)の使用がサポートされません。コンテナオーケストレーション中には、ボリュームのバインドマウント入力のみが許可されます。ボリュームのバインドマウント入力は、Studio Classic の Amazon Elastic File System (Amazon EFS) ボリュームに配置する必要があります。JupyterLab およびコードエディタアプリケーションの場合、Amazon Elastic Block Store (Amazon EBS) ボリュームに配置する必要があります。
+ コンテナ検査の操作は許可されます。
+ コンテナポートからホストへのマッピングは許可されません。ただし、ホストするポートを指定できます。その後、次の URL を使用して Studio からエンドポイントにアクセスできます。

  ```
  http://localhost:port
  ```

### サポートされる Docker 操作
<a name="studio-updated-local-docker-supported"></a>

次の表で、Studio でサポートされているすべての Docker API エンドポイントと、サポートの制限事項について説明します。この表に記載のない API エンドポイントは、Studio で使用できません。


|  API ドキュメント  |  制限事項  | 
| --- | --- | 
|  [SystemAuth](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemAuth)  |   | 
|  [SystemEvents](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemEvents)  |   | 
|  [SystemVersion](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemVersion)  |   | 
|  [SystemPing](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemPing)  |   | 
|  [SystemPingHead](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemPingHead)  |   | 
|  [ContainerCreate](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerCreate)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/studio-updated-local.html)  | 
|  [ContainerStart](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerStart)  |   | 
|  [ContainerStop](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerStop)  |   | 
|  [ContainerKill](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerKill)  |   | 
|  [ContainerDelete](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerDelete)  |   | 
|  [ContainerList](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerList)  |   | 
|  [ContainerLogs](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerLogs)  |   | 
|  [ContainerInspect](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect)  |   | 
|  [ContainerWait](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerWait)  |   | 
|  [ContainerAttach](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerAttach)  |   | 
|  [ContainerPrune](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerPrune)  |   | 
|  [ContainerResize](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerResize)  |   | 
|  [ImageCreate](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageCreate)  |  VPC-only モードのサポートは、許可リストに登録されたアカウントの Amazon ECR イメージに制限されます。[Rootless Docker 設定](studio-updated-local-get-started.md#studio-updated-local-rootless) を有効にすると、オンプレミスリポジトリやパブリックレジストリなどの VPC 構成を介して、追加の Docker レジストリにアクセスできるようになります。 | 
|  [ImagePrune](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImagePrune)  |   | 
|  [ImagePush](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImagePush)  |  VPC-only モードのサポートは、許可リストに登録されたアカウントの Amazon ECR イメージに制限されます。[Rootless Docker 設定](studio-updated-local-get-started.md#studio-updated-local-rootless) を有効にすると、オンプレミスリポジトリやパブリックレジストリなどの VPC 構成を介して、追加の Docker レジストリにアクセスできるようになります。 | 
|  [ImageList](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageList)  |   | 
|  [ImageInspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect)  |   | 
|  [ImageGet](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageGet)  |   | 
|  [ImageDelete](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageDelete)  |   | 
|  [ImageBuild](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageBuild)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/studio-updated-local.html)  | 

**Topics**
+ [Docker サポート](#studio-updated-local-docker)
+ [ローカルモードの開始方法](studio-updated-local-get-started.md)

# ローカルモードの開始方法
<a name="studio-updated-local-get-started"></a>

以下のセクションでは、Amazon SageMaker Studio でローカルモードを開始するために必要な、次の手順の概要を示します。
+ 前提条件を満たす
+ `EnableDockerAccess` の設定
+ Docker のインストール

## 前提条件
<a name="studio-updated-local-prereq"></a>

Studio アプリケーションでローカルモードを使用するには、次の前提条件を満たす必要があります。
+ Amazon Elastic Container Registry リポジトリからイメージを取得するために、Amazon ECR イメージをホストするアカウントから、ユーザーの実行ロールにアクセス許可を付与する必要があります。ドメインの実行ロールで Amazon ECR へのアクセスを許可する必要もあります。
+ 次のコマンドを使用して、最新バージョンの Studio Python SDK を使用していることを確認します: 

  ```
  pip install -U sagemaker
  ```
+ ローカルモードと Docker 機能を使用するために、 AWS Command Line Interface (AWS CLI) を使用してドメインの `DockerSettings` に次のパラメータを設定します: 

  ```
  EnableDockerAccess : ENABLED
  ```
+ `EnableDockerAccess` を使用すると、ドメイン内のユーザーにローカルモードの使用を許可するかどうかも制御できます。デフォルトでは、Studio アプリケーションでのローカルモードと Docker 機能の使用は許可されていません。詳細については、「[`EnableDockerAccess` の設定](#studio-updated-local-enable)」を参照してください。
+ 「[Docker のインストール](#studio-updated-local-docker-installation)」の手順に従って、Studio アプリケーションに Docker CLI をインストールします。
+ [Rootless Docker 設定](#studio-updated-local-rootless) では、VPC に必要な Docker レジストリに適したエンドポイントとルーティングが設定されていることを確認します。

## `EnableDockerAccess` の設定
<a name="studio-updated-local-enable"></a>

以下のセクションでは、ドメインがパブリックインターネットにアクセスできるか、または `VPC-only` モードである場合に `EnableDockerAccess` を設定する方法を示します。

**注記**  
`EnableDockerAccess` の変更は、ドメインの更新後に作成されたアプリケーションにのみ適用されます。ドメインを更新した後で、新しいアプリケーションを作成している必要があります。

**パブリックインターネットアクセス**

次のコマンド例は、新しいドメインの作成時、または既存のドメインをパブリックインターネットアクセスで更新する場合に `EnableDockerAccess` を設定する方法を示しています。

```
# create new domain
aws --region region \
    sagemaker create-domain --domain-name domain-name \
    --vpc-id vpc-id \
    --subnet-ids subnet-ids \
    --auth-mode IAM \
    --default-user-settings "ExecutionRole=execution-role" \
    --domain-settings '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}' \
    --query DomainArn \
    --output text

# update domain
aws --region region \
    sagemaker update-domain --domain-id domain-id \
    --domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}'
```

**`VPC-only` モード**

ドメインを `VPC-only` モードで使用する場合、Docker イメージのプッシュリクエストとプルリクエストは、顧客が設定した VPC ではなく、サービスの VPC を使用してルーティングされます。そのため管理者は、ユーザーに Amazon ECR Docker のプルリクエストとプッシュリクエストの送信を許可する、信頼された AWS アカウント のリストを設定できます。

信頼された Docker のリストに AWS アカウント ない に対してイメージのプッシュまたはプルリクエストが行われた場合 AWS アカウント、リクエストは失敗します。Amazon Elastic Container Registry (Amazon ECR) 外のDockerプルおよびプッシュオペレーションは、 `VPC-only` モードではサポートされていません。

デフォルトでは、以下 AWS アカウント が信頼されています。
+ SageMaker AI ドメインをホストするアカウント
+ 次の SageMaker イメージをホストする SageMaker AI アカウント:
  + DLC フレームワークイメージ
  + イメージを処理する Sklearn、Spark、XGBoost

追加の信頼された のリストを設定するには AWS アカウント、次のように`VpcOnlyTrustedAccounts`値を指定します。

```
aws --region region \
    sagemaker update-domain --domain-id domain-id \
    --domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED", "VpcOnlyTrustedAccounts": ["account-list"]}}'
```

**注記**  
[Rootless Docker 設定](#studio-updated-local-rootless) を有効にすると、`VpcOnlyTrustedAccounts` は無視され、Docker トラフィックは VPC 構成を経由してルーティングされるため、VPC からアクセスできるすべてのレジストリへのアクセスが許可されます。

## Rootless Docker 設定
<a name="studio-updated-local-rootless"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DockerSettings.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DockerSettings.html) を有効にすると、Studio は [Rootless Docker デーモン](https://docs.docker.com/engine/security/rootless/)を使用してトラフィックを VPC 経由でルーティングします。これにより、セキュリティが強化され、追加の Docker レジストリへのアクセスが許可されます。`RootlessDocker` との主な違いは、次のとおりです。
+ コンテナポートには、localhost の代わりに Docker ゲートウェイ IP (`172.17.0.1`) を使用してアクセスできます。
+ Docker 操作でアクセスできるレジストリは、VPC 構成によって決まります。`VpcOnlyTrustedAccounts` は無視され、Docker トラフィックは VPC 構成を経由してルーティングされます。

Rootless Docker を使用するには、`DockerSettings` で `EnableDockerAccess` と `RootlessDocker` の両方を `ENABLED` に設定する必要があります。例えば、上記の [`EnableDockerAccess` の設定](#studio-updated-local-enable) の例では、ドメイン設定を変更して以下を含めることができます。

```
'{"DockerSettings": {"EnableDockerAccess": "ENABLED", "RootlessDocker": "ENABLED"}}'
```

## Docker のインストール
<a name="studio-updated-local-docker-installation"></a>

Docker を使用するには、Studio アプリケーションのターミナルから手動で Docker をインストールする必要があります。ドメインがインターネットにアクセスできるかどうかによって、Docker のインストール手順は異なります。

### インターネットアクセス
<a name="studio-updated-local-docker-installation-internet"></a>

ドメインがパブリックインターネットアクセスありで作成されている場合、または `VPC-only` モードで、インターネットアクセスが制限された状態で作成されている場合は、次の手順で Docker をインストールします。

1. (オプション) ドメインが `VPC-only` モードで、インターネットアクセスが制限された状態で作成されている場合は、Docker ウェブサイトにアクセス可能なパブリック NAT ゲートウェイを作成します。手順については、「[NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)」を参照してください。

1. Docker をインストールする Studio アプリケーションのターミナルに移動します。

1. アプリケーションのオペレーティングシステムを返すには、ターミナルから次のコマンドを実行します:

   ```
   cat /etc/os-release
   ```

1. Docker を、[Amazon SageMaker Local Mode 例のリポジトリ](https://github.com/aws-samples/amazon-sagemaker-local-mode/tree/main/sagemaker_studio_docker_cli_install)にある、アプリケーションのオペレーティングシステム別の手順に従ってインストールします。

   例えば、Docker をUbuntu にインストールする場合は、[https://github.com/aws-samples/amazon-sagemaker-local-mode/blob/main/sagemaker\$1studio\$1docker\$1cli\$1install/sagemaker-ubuntu-focal-docker-cli-install.sh](https://github.com/aws-samples/amazon-sagemaker-local-mode/blob/main/sagemaker_studio_docker_cli_install/sagemaker-ubuntu-focal-docker-cli-install.sh)のスクリプトに従います。以下の点を考慮してください。
   + 連鎖コマンドが失敗する場合は、コマンドを 1 つずつ実行します。
   + Studio は Docker バージョン `20.10.X.` および Docker Engine API バージョン `1.41` のみをサポートします。
   + 以下のパッケージは Studio で Docker CLI を使用する際に必要ないため、インストールをスキップできます。
     + `containerd.io`
     + `docker-ce`
     + `docker-buildx-plugin`
**注記**  
アプリケーションで Docker サービスを起動する必要はありません。Studio アプリケーションをホストするインスタンスが、デフォルトで Docker サービスを実行します。すべての Docker API コールは、自動的に Docker サービスを経由してルーティングされます。

1. Studio アプリケーション内で Docker とやり取りするために、公開された Docker ソケットを使用します。デフォルトでは、次のソケットが公開されます。

   ```
   unix:///docker/proxy.sock
   ```

   この公開されたソケットを、デフォルトの `USER` に対する次の Studio アプリケーション環境変数が使用します。

   ```
   DOCKER_HOST
   ```

### インターネットアクセスがない場合
<a name="studio-updated-local-docker-installation-no-internet"></a>

ドメインが `VPC-only` モードで、インターネットアクセスなしで作成されている場合は、次の手順で Docker をインストールします。

1. Docker をインストールする Studio アプリケーションのターミナルに移動します。

1. ターミナルから次のコマンドを実行して、アプリケーションのオペレーティングシステムを返します。

   ```
   cat /etc/os-release
   ```

1. Docker の `.deb` ファイルをローカルマシンにダウンロードします。Studio アプリケーションのオペレーティングシステムごとに必要なファイルをダウンロードする手順については、[「Install Docker Engine](https://docs.docker.com/engine/install/)」を参照してください。

   例えば、Ubuntu のパッケージから Docker をインストールするには、以下の点を考慮しながら、「[Install from a package](https://docs.docker.com/engine/install/ubuntu/#install-from-a-package)」の手順 1～4 に従います。
   + パッケージから Docker をインストールします。他の方法を使用して Docker をインストールすると失敗します。
   + Docker バージョン `20.10.X` に対応する最新のパッケージをインストールします。
   + Studio で Docker CLI を使用するために、次のパッケージは必要ありません。インストールは不要です:
     + `containerd.io`
     + `docker-ce`
     + `docker-buildx-plugin`
**注記**  
アプリケーションで Docker サービスを起動する必要はありません。Studio アプリケーションをホストするインスタンスが、デフォルトで Docker サービスを実行します。すべての Docker API コール、自動的に Docker サービスを経由してルーティングされます。

1. `.deb` ファイルを Amazon EFS ファイルシステム、またはアプリケーションの Amazon EBS ファイルシステムにアップロードします。

1. Studio アプリケーションターミナルから `docker-ce-cli` および `docker-compose-plugin` `.deb` パッケージを手動でインストールします。詳細と手順については、Docker のドキュメントウェブサイトの「[Install from a package](https://docs.docker.com/engine/install/ubuntu/#install-from-a-package)」の手順 5 を参照してください。

1. Studio アプリケーション内で Docker とやり取りするために、公開された Docker ソケットを使用します。デフォルトでは、次のソケットが公開されます。

   ```
   unix:///docker/proxy.sock
   ```

   この公開されたソケットを、デフォルトの `USER` に対する次の Studio アプリケーション環境変数が使用します。

   ```
   DOCKER_HOST
   ```