

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

# プライベート Docker レジストリ内のイメージにアクセスするようにトレーニングジョブを適応
<a name="docker-containers-adapt-your-own-private-registry"></a>

Amazon Elastic Container Registry (Amazon ECR) の代わりにプライベート [Docker レジストリ](https://docs.docker.com/registry/)を使用して、SageMaker AI トレーニング用のイメージをホストできます。以下の手順では、Docker レジストリの作成、仮想プライベートクラウド (VPC) とトレーニングジョブの設定、イメージの保存、プライベート Docker レジストリ内のトレーニングイメージへのアクセス許可を SageMaker AI に付与する方法を示します。また、SageMaker トレーニングジョブで認証を必要とする Docker レジストリの使用方法についても説明します。

## プライベート Docker レジストリでのイメージの作成と保存
<a name="docker-containers-adapt-your-own-private-registry-prerequisites"></a>

プライベート Docker レジストリを作成してイメージを保存します。レジストリは次の条件を満たす必要があります。
+ [Docker レジストリ HTTP API](https://docs.docker.com/registry/spec/api/) プロトコルを使用します
+ `CreateTrainingJob` API の [VPCConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#API_CreateTrainingJob_RequestSyntax) パラメータで指定されているのと同じ VPC からアクセス可能です。トレーニングジョブの作成時に `VpcConfig` を入力します。
+ 既知の公開認証機関 (CA) からの [TLS 証明書](https://aws.amazon.com/what-is/ssl-certificate/)で保護されています。

Docker レジストリの作成の詳細については、「[Deploy a registry server](https://docs.docker.com/registry/deploying/)」を参照してください。

## VPC と SageMaker トレーニングジョブの設定
<a name="docker-containers-adapt-your-own-private-registry-configure"></a>

SageMaker AI は VPC 内のネットワーク接続を使用して Docker レジストリ内のイメージにアクセスします。Docker レジストリ内のイメージをトレーニングに使用するには、アカウントの Amazon VPC からレジストリにアクセス可能である必要があります。詳細については、「[トレーニングに認証が必要な Docker レジストリの使用](docker-containers-adapt-your-own-private-registry-authentication.md)」を参照してください。

また、Docker レジストリがアクセスできるのと同じ VPC に接続するようにトレーニングジョブを設定する必要があります。詳細については、「[Configure a Training Job for Amazon VPC Access](https://docs.aws.amazon.com/sagemaker/latest/dg/train-vpc.html#train-vpc-configure)」を参照してください。

## プライベート Docker レジストリのイメージを使用したトレーニングジョブの作成
<a name="docker-containers-adapt-your-own-private-registry-create"></a>

プライベート Docker レジストリのイメージをトレーニングに使用するには、以下のガイドを使用してイメージの設定、トレーニングジョブの設定と作成を行います。次のコード例では、 AWS SDK for Python (Boto3) クライアントを使用します。

1. トレーニングイメージ設定オブジェクトを作成し、以下のように `TrainingRepositoryAccessMode` フィールドに `Vpc` を入力します。

   ```
   training_image_config = {
       'TrainingRepositoryAccessMode': 'Vpc'
   }
   ```
**注記**  
プライベート Docker レジストリに認証が必要な場合は、`TrainingRepositoryAuthConfig` オブジェクトを、トレーニングイメージ設定オブジェクトに追加する必要があります。オブジェクトの `TrainingRepositoryCredentialsProviderArn`フィールドを使用して SageMaker AI にアクセス認証情報を提供する AWS Lambda 関数の Amazon リソースネーム (ARN) も指定する必要があります`TrainingRepositoryAuthConfig`。詳細については、以下のコード構造例を参照してください。  

   ```
   training_image_config = {
      'TrainingRepositoryAccessMode': 'Vpc',
      'TrainingRepositoryAuthConfig': {
           'TrainingRepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName'
      }
   }
   ```

   認証を提供するために Lambda 関数を作成する方法については、「[トレーニングに認証が必要な Docker レジストリの使用](docker-containers-adapt-your-own-private-registry-authentication.md)」を参照してください。

1. Boto3 クライアントを使用してトレーニングジョブを作成し、正しい設定を [create\$1training\$1job](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API に渡します。以下の手順は、コンポーネントの設定方法とトレーニングジョブの作成方法を示しています。

   1. `create_training_job` に渡す `AlgorithmSpecification` オブジェクトを作成します。次のコード例に示すように、前のステップで作成したトレーニングイメージ設定オブジェクトを使用します。

      ```
      algorithm_specification = {
         'TrainingImage': 'myteam.myorg.com/docker-local/my-training-image:<IMAGE-TAG>',
         'TrainingImageConfig': training_image_config,
         'TrainingInputMode': 'File'
      }
      ```
**注記**  
更新バージョンではなく固定バージョンのイメージを使用するには、名前やタグではなく、イメージの[ダイジェスト](https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-by-digest-immutable-identifier)を参照します。

   1. 次のコード例に示すように、`create_training_job` に渡すトレーニングジョブの名前とロールを指定します。

      ```
      training_job_name = 'private-registry-job'
      execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
      ```

   1. トレーニングジョブの VPC 設定のセキュリティグループとサブネットを指定します。プライベート Docker レジストリは、以下のコード例に示すように、指定したセキュリティグループからのインバウンドトラフィックを許可する必要があります。

      ```
      vpc_config = {
          'SecurityGroupIds': ['sg-0123456789abcdef0'],
          'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1']
      }
      ```
**注記**  
サブネットがプライベート Docker レジストリと同じ VPC にない場合は、2 つの VPC 間にネットワーク接続を設定する必要があります。詳細については、「[VPC ピアリング](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-peering.html)を使用して VPC を接続する」を参照してください。

   1. 次のコード例に示すように、トレーニングに使用する機械学習コンピューティングインスタンスやストレージボリュームなどのリソース設定を指定します。

      ```
      resource_config = {
          'InstanceType': 'ml.m4.xlarge',
          'InstanceCount': 1,
          'VolumeSizeInGB': 10,
      }
      ```

   1. 次のコード例に示すように、入力および出力データ設定、トレーニングデータセットの保存場所、モデルアーティファクトの保存場所を指定します。

      ```
      input_data_config = [
          {
              "ChannelName": "training",
              "DataSource":
              {
                  "S3DataSource":
                  {
                      "S3DataDistributionType": "FullyReplicated",
                      "S3DataType": "S3Prefix",
                      "S3Uri": "s3://your-training-data-bucket/training-data-folder"
                  }
              }
          }
      ]
      
      output_data_config = {
          'S3OutputPath': 's3://your-output-data-bucket/model-folder'
      }
      ```

   1. 次のコード例に示すように、モデルトレーニングジョブを実行できる最大秒数を指定します。

      ```
      stopping_condition = {
          'MaxRuntimeInSeconds': 1800
      }
      ```

   1. 最後に、次のコード例に示すように、前のステップで指定したパラメータを使用してトレーニングジョブを作成します。

      ```
      import boto3
      sm = boto3.client('sagemaker')
      try:
          resp = sm.create_training_job(
              TrainingJobName=training_job_name,
              AlgorithmSpecification=algorithm_specification,
              RoleArn=execution_role_arn,
              InputDataConfig=input_data_config,
              OutputDataConfig=output_data_config,
              ResourceConfig=resource_config,
              VpcConfig=vpc_config,
              StoppingCondition=stopping_condition
          )
      except Exception as e:
          print(f'error calling CreateTrainingJob operation: {e}')
      else:
          print(resp)
      ```

# SageMaker AI 推定器を使用したトレーニングジョブの実行
<a name="docker-containers-adapt-your-own-private-registry-estimator"></a>

SageMaker Python SDK の[推定器](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html)を使用して、SageMaker トレーニングジョブの設定と実行を処理することもできます。以下のコード例は、プライベート Docker レジストリからのイメージを使用して推定器を設定および実行する方法を示しています。

1. 次のコード例に示すように、必要なライブラリと依存関係をインポートします。

   ```
   import boto3
   import sagemaker
   from sagemaker.estimator import Estimator
   
   session = sagemaker.Session()
   
   role = sagemaker.get_execution_role()
   ```

1. 次のコード例に示すように、トレーニングイメージ、セキュリティグループ、トレーニングジョブの VPC 設定用サブネットに Uniform Resource Identifier (URI) を指定します。

   ```
   image_uri = "myteam.myorg.com/docker-local/my-training-image:<IMAGE-TAG>"
   
   security_groups = ["sg-0123456789abcdef0"]
   subnets = ["subnet-0123456789abcdef0", "subnet-0123456789abcdef0"]
   ```

   `security_group_ids` および `subnets` の詳細については、SageMaker Python SDK の「[推定器](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html)」セクションにある該当するパラメータの説明を参照してください。
**注記**  
SageMaker AI は VPC 内のネットワーク接続を使用して Docker レジストリ内のイメージにアクセスします。Docker レジストリ内のイメージをトレーニングに使用するには、レジストリがアカウントの Amazon VPC からアクセス可能である必要があります。

1. 必要に応じて、Docker レジストリで認証が必要な場合は、SageMaker AI にアクセス認証情報を提供する AWS Lambda 関数の Amazon リソースネーム (ARN) も指定する必要があります。次のコード例は、ARN を指定する方法を示しています。

   ```
   training_repository_credentials_provider_arn = "arn:aws:lambda:us-west-2:1234567890:function:test"
   ```

   認証が必要な Docker レジストリでイメージを使用する方法の詳細については、以下の「**Use a Docker registry that requires authentication for training**」を参照してください。

1. 次のコード例に示すように、前のステップのコード例を使用して推定器を設定します。

   ```
   # The training repository access mode must be 'Vpc' for private docker registry jobs 
   training_repository_access_mode = "Vpc"
   
   # Specify the instance type, instance count you want to use
   instance_type="ml.m5.xlarge"
   instance_count=1
   
   # Specify the maximum number of seconds that a model training job can run
   max_run_time = 1800
   
   # Specify the output path for the model artifacts
   output_path = "s3://your-output-bucket/your-output-path"
   
   estimator = Estimator(
       image_uri=image_uri,
       role=role,
       subnets=subnets,
       security_group_ids=security_groups,
       training_repository_access_mode=training_repository_access_mode,
       training_repository_credentials_provider_arn=training_repository_credentials_provider_arn,  # remove this line if auth is not needed
       instance_type=instance_type,
       instance_count=instance_count,
       output_path=output_path,
       max_run=max_run_time
   )
   ```

1. 次のコード例に示すように、ジョブ名と入力パスをパラメータとして使用して `estimator.fit` を呼び出し、トレーニングジョブを開始します。

   ```
   input_path = "s3://your-input-bucket/your-input-path"
   job_name = "your-job-name"
   
   estimator.fit(
       inputs=input_path,
       job_name=job_name
   )
   ```

# トレーニングに認証が必要な Docker レジストリの使用
<a name="docker-containers-adapt-your-own-private-registry-authentication"></a>

Docker レジストリで認証が必要な場合は、SageMaker AI にアクセス認証情報を指定する AWS Lambda 関数を作成する必要があります。次に、トレーニングジョブを作成し、[create\$1training\$1job](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_training_job) API 内でこの Lambda 関数の ARN を指定します。最後に、VPC がインターネット経由でトラフィックを送信せずに Lambda 関数と通信できるように、オプションでインターフェイス VPC エンドポイントを作成できます。次のガイドでは、Lambda 関数を作成し、正しいロールを割り当て、インターフェイス VPC エンドポイントを作成する方法を示しています。

## Lambda 関数を作成する
<a name="docker-containers-adapt-your-own-private-registry-authentication-create-lambda"></a>

アクセス認証情報を SageMaker AI に渡し、レスポンスを返す AWS Lambda 関数を作成します。次のコード例では、次のように Lambda 関数ハンドラーを作成します。

```
def handler(event, context):
   response = {
      "Credentials": {"Username": "username", "Password": "password"}
   }
   return response
```

プライベート Docker レジストリの設定に使用される認証の種類によって、Lambda 関数から返されるレスポンスの内容が次のように決まります。
+ プライベート Docker レジストリが基本認証を使用する場合は、Lambda 関数はレジストリの認証に必要なユーザー名とパスワードを返します。
+ プライベート Docker レジストリが[ベアラートークン認証](https://docs.docker.com/registry/spec/auth/token/)を使用する場合は、ユーザー名とパスワードが認可サーバーに送信され、認可サーバーは、ベアラートークンが返します。その後、このトークンはプライベート Docker レジストリの認証に使用されます。

**注記**  
同じアカウントのレジストリに複数の Lambda 関数があり、トレーニングジョブの実行ロールが同じ場合、レジストリ 1 のトレーニングジョブは他のレジストリの Lambda 関数にアクセスできます。

## Lambda 関数への適切なロールのアクセス許可の付与
<a name="docker-containers-adapt-your-own-private-registry-authentication-lambda-role"></a>

`create_training_job` API で使用する [IAMrole](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)には、 AWS Lambda 関数を呼び出すアクセス許可が必要です。次のコード例は、IAM ロールのアクセス許可ポリシーを拡張して、`myLambdaFunction` を呼び出す方法を示しています。

```
{
    "Effect": "Allow",
    "Action": [
        "lambda:InvokeFunction"
    ],
    "Resource": [
        "arn:aws:lambda:*:*:function:*myLambdaFunction*"
    ]
}
```

ロールのアクセス許可ポリシーの編集の詳細については、「*AWS Identity and Access Management ユーザーガイド*」の「[ロールのアクセス許可ポリシーの変更 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy)」を参照してください。

**注記**  
**AmazonSageMakerFullAccess** 管理ポリシーがアタッチされている IAM ロールには、名前に「SageMaker AI」を含む任意の Lambda 関数を呼び出すアクセス許可があります。

## Lambda のインターフェイス VPC エンドポイントを作成する
<a name="docker-containers-adapt-your-own-private-registry-authentication-lambda-endpoint"></a>

インターフェイスエンドポイントを作成すると、Amazon VPC がインターネット経由でトラフィックを送信せずに Lambda 関数と通信できます。詳細については、*AWS Lambda デベロッパーガイド*の「[Lambda のインターフェイス VPC エンドポイントの設定](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc-endpoints.html)」を参照してください。

インターフェースエンドポイントが作成されると、SageMaker トレーニングは VPC 経由で `lambda.region.amazonaws.com` にリクエストを送信して Lambda 関数を呼び出します。インターフェイスエンドポイントの作成時に **DNS 名の有効化**を選択した場合、Amazon Route 53 は呼び出しを Lambda インターフェイスエンドポイントにルーティングします。別の DNS プロバイダーを使用する場合は、`lambda.region.amazonaws.co`m を Lambda インターフェイスエンドポイントにマッピングする必要があります。