

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

# リアルタイム推論コンテナにプライベート Docker レジストリを使用する
<a name="your-algorithms-containers-inference-private"></a>

Amazon SageMaker AI ホスティングでは、Amazon ECR に保存されているイメージを使用して、デフォルトでリアルタイム推論のためのコンテナを構築できます。オプションで、プライベート Docker レジストリ内のイメージからリアルタイム推論用のコンテナを構築できます。プライベートレジストリは、アカウント内の Amazon VPC からアクセスできることが必要です。プライベート Docker レジストリに格納されているイメージに基づいて作成するモデルは、プライベート Docker レジストリがアクセスできる同じ VPC に接続するように設定する必要があります。モデルの VPC への接続の詳細については、「[Amazon VPC のリソースへのアクセス権を SageMaker AI のホストされたエンドポイントに付与する](host-vpc.md)」を参照してください。

Docker レジストリは、既知の公開認証機関 (CA) からの TLS 証明書で保護されている必要があります。

**注記**  
SageMaker AI ホスティングがレジストリからモデルイメージをプルできるように、プライベート Docker レジストリは、モデルの VPC 設定で指定したセキュリティグループからのインバウンドトラフィックを許可する必要があります。  
SageMaker AI は、VPC 内にオープンインターネットへのパスがある場合、DockerHub からモデルイメージをプルできます。

**Topics**
+ [Amazon Elastic コンテナレジストリ以外のプライベート Docker レジストリにイメージを保存する](#your-algorithms-containers-inference-private-registry)
+ [リアルタイム推論にプライベート Docker レジストリのイメージを使用する](#your-algorithms-containers-inference-private-use)
+ [SageMaker AI がプライベート Docker レジストリに対して認証できるようにする](#inference-private-docker-authenticate)
+ [Lambda 関数を作成する](#inference-private-docker-lambda)
+ [実行ロールに Lambda へのアクセス許可を付与する](#inference-private-docker-perms)
+ [Lambda のインターフェイス VPC エンドポイントを作成する](#inference-private-docker-vpc-interface)

## Amazon Elastic コンテナレジストリ以外のプライベート Docker レジストリにイメージを保存する
<a name="your-algorithms-containers-inference-private-registry"></a>

プライベートの Docker レジストリを使用して SageMaker AI リアルタイム推論用にイメージを保存するには、Amazon VPC からアクセスできるプライベートレジストリを作成します。Docker レジストリの作成の詳細については、Docker ドキュメントの「[レジストリサーバーをデプロイする](https://docs.docker.com/registry/deploying/)」を参照してください。Docker レジストリは、以下を満たす必要があります。
+ レジストリは [Docker Registry HTTP API V2](https://docs.docker.com/registry/spec/api/) レジストリであることが必要です。
+ Docker レジストリは、モデルの作成時に指定する `VpcConfig` パラメータで指定する同じ VPC からアクセスできる必要があります。

## リアルタイム推論にプライベート Docker レジストリのイメージを使用する
<a name="your-algorithms-containers-inference-private-use"></a>

モデルを作成し、SageMaker AI ホスティングにデプロイする場合に、プライベート Docker レジストリのイメージを使用して推論コンテナを構築するように指定できます。[create\$1model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model) 関数の呼び出しに渡す `PrimaryContainer` パラメータの `ImageConfig` オブジェクトでこれを指定します。

**プライベート Docker レジストリに保存されているイメージを推論コンテナに使用するには**

1. イメージ設定オブジェクトを作成し、`RepositoryAccessMode` フィールドに `Vpc` の値を指定します。

   ```
   image_config = {
                       'RepositoryAccessMode': 'Vpc'
                  }
   ```

1. プライベートの Docker レジストリに認証が必要な場合は、`RepositoryAuthConfig` オブジェクトを、イメージ設定オブジェクトに追加します。`RepositoryAuthConfig` オブジェクトの `RepositoryCredentialsProviderArn`フィールドで、SageMaker AI がプライベート Docker レジストリに対して認証できるようにする認証情報を提供する AWS Lambda 関数の Amazon リソースネーム (ARN) を指定します。認証を提供するために Lambda 関数を作成する方法については、「[SageMaker AI がプライベート Docker レジストリに対して認証できるようにする](#inference-private-docker-authenticate)」を参照してください。

   ```
   image_config = {
                       'RepositoryAccessMode': 'Vpc',
                       'RepositoryAuthConfig': {
                          'RepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName'
                        }
                  }
   ```

1. 前のステップで作成したイメージ設定オブジェクトを使用し、`create_model` に渡すプライマリコンテナオブジェクトを作成します。

   [ダイジェスト](https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-by-digest-immutable-identifier)フォームでイメージを提供します。`:latest` タグを使用してイメージを提供する場合、SageMaker AI が意図したよりも新しいバージョンのイメージをプルするリスクがあります。ダイジェストフォームを使用すると、意図したイメージバージョンを確実に SageMaker AI がプルするようになります。

   ```
   primary_container = {
       'ContainerHostname': 'ModelContainer',
       'Image': 'myteam.myorg.com/docker-local/my-inference-image:<IMAGE-TAG>',
       'ImageConfig': image_config
   }
   ```

1. `create_model` に渡すモデル名と実行ロールを指定します。

   ```
   model_name = 'vpc-model'
   execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
   ```

1. 1 つ以上のセキュリティグループとサブネットをモデルの VPC 設定に指定します。プライベート Docker レジストリは、指定したセキュリティグループからのインバウンドトラフィックを許可する必要があります。指定するサブネットは、プライベート Docker レジストリと同じ VPC 内にある必要があります。

   ```
   vpc_config = {
       'SecurityGroupIds': ['sg-0123456789abcdef0'],
       'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1']
   }
   ```

1. Boto3 SageMaker AI クライアントを入手します。

   ```
   import boto3
   sm = boto3.client('sagemaker')
   ```

1. `PrimaryContainer` および `VpcConfig` パラメータに前の手順で指定した値を使用して `create_model` を呼び出し、モデルを作成します。

   ```
   try:
       resp = sm.create_model(
           ModelName=model_name,
           PrimaryContainer=primary_container,
           ExecutionRoleArn=execution_role_arn,
           VpcConfig=vpc_config,
       )
   except Exception as e:
       print(f'error calling CreateModel operation: {e}')
   else:
       print(resp)
   ```

1. 最後に、前のステップで作成したモデルを使用し、[create\$1endpoint\$1config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config) および [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) を呼び出してホスティングエンドポイントを作成します。

   ```
   endpoint_config_name = 'my-endpoint-config'
   sm.create_endpoint_config(
       EndpointConfigName=endpoint_config_name,
       ProductionVariants=[
           {
               'VariantName': 'MyVariant',
               'ModelName': model_name,
               'InitialInstanceCount': 1,
               'InstanceType': 'ml.t2.medium'
           },
       ],
   )
   
   endpoint_name = 'my-endpoint'
   sm.create_endpoint(
       EndpointName=endpoint_name,
       EndpointConfigName=endpoint_config_name,
   )
   
   sm.describe_endpoint(EndpointName=endpoint_name)
   ```

## SageMaker AI がプライベート Docker レジストリに対して認証できるようにする
<a name="inference-private-docker-authenticate"></a>

認証を必要とするプライベート Docker レジストリから推論イメージをプルするには、認証情報を提供する AWS Lambda 関数を作成し、[create\$1model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model) を呼び出すときに Lambda 関数の Amazon リソースネーム (ARN) を指定します。SageMaker AI が `create_model` を実行する場合、指定した Lambda 関数を呼び出して Docker レジストリに認証するための認証情報を取得します。

## Lambda 関数を作成する
<a name="inference-private-docker-lambda"></a>

次の形式でレスポンスを返す AWS Lambda 関数を作成します。

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

プライベート Docker レジストリの認証の設定方法に応じて、Lambda 関数が返す認証情報は、次のいずれかを意味する可能性があります。
+ 基本認証を使用するようにプライベート Docker レジストリを設定した場合、レジストリに対して認証するためのサインイン認証情報を提供します。
+ ベアラトークン認証を使用するようにプライベート Docker レジストリを設定すると、サインイン認証情報が認可サーバーに送信され、ベアラトークンが返され、これをプライベートの Docker レジストリへの認証に使用できます。

## 実行ロールに Lambda へのアクセス許可を付与する
<a name="inference-private-docker-perms"></a>

呼び出しに使用する実行ロールには、 AWS Lambda 関数を呼び出すアクセス許可`create_model`が必要です。実行ロールのアクセス許可ポリシーに以下を追加します。

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

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

**注記**  
`AmazonSageMakerFullAccess` マネージドポリシーがアタッチされた実行ロールには、名前に **SageMaker** がある任意の Lambda 関数を呼び出せるアクセス許可があります。

## Lambda のインターフェイス VPC エンドポイントを作成する
<a name="inference-private-docker-vpc-interface"></a>

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

SageMaker AI ホスティングは VPC 経由で `lambda.region.amazonaws.com` にリクエストを送信し、Lambda 関数を呼び出します。インターフェイスエンドポイントの作成時にプライベート DNS 名を選択すると、Amazon Route 53 は呼び出しを Lambda インターフェイスエンドポイントにルーティングします。別の DNS プロバイダーを使用する場合は、必ず `lambda.region.amazonaws.com` を Lambda インターフェイスエンドポイントに対応付けてください。