

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 실시간 추론 컨테이너에 대한 프라이빗 Docker 레지스트리 사용
<a name="your-algorithms-containers-inference-private"></a>

Amazon SageMaker AI 호스팅을 이용하면 Amazon ECR에 저장된 이미지를 사용하여 실시간 추론용 컨테이너를 기본적으로 빌드할 수 있습니다. 사용자는 프라이빗 Docker 레지스트리에 있는 이미지를 통해 실시간 추론용 컨테이너를 선택적으로 빌드할 수 있습니다. 프라이빗 레지스트리는 사용자 계정의 Amazon VPC에서 액세스할 수 있어야 합니다. 프라이빗 Docker 레지스트리에 저장된 이미지를 기준으로 생성하는 모델은 프라이빗 Docker 레지스트리에 액세스할 수 있는 동일한 VPC에 연결되도록 구성해야 합니다. 모델을 VPC에 연결하는 방법에 대한 자세한 내용은 [SageMaker AI에서 호스팅된 엔드포인트에 Amazon VPC의 리소스에 대한 액세스 권한 부여](host-vpc.md)을(를) 참조하세요.

Docker 레지스트리는 알려진 퍼블릭 인증 기관(CA)의 TLS 인증서로 보호해야 합니다.

**참고**  
프라이빗 Docker 레지스트리는 SageMaker AI 호스팅이 레지스트리에서 모델 이미지를 가져올 수 있도록 모델의 VPC 구성에 지정된 보안 그룹의 인바운드 트래픽을 허용해야 합니다.  
VPC 내부의 개방형 인터넷에 접속할 수 있는 경로가 있는 경우, SageMaker AI가 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 레지스트리 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. 모델의 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 인터페이스 엔드포인트에 `lambda.region.amazonaws.com`을(를) 매핑해야 합니다.