29
29
from sagemaker .mxnet import MXNet
30
30
from sagemaker .predictor import Predictor
31
31
from sagemaker .serializers import NumpySerializer
32
- from sagemaker .utils import sagemaker_timestamp , unique_name_from_base , get_ecr_image_uri_prefix
32
+ from sagemaker .utils import sagemaker_timestamp , unique_name_from_base
33
33
from tests .integ import DATA_DIR , TRAINING_DEFAULT_TIMEOUT_MINUTES
34
34
from tests .integ .retry import retries
35
35
from tests .integ .timeout import timeout , timeout_and_delete_endpoint_by_name
42
42
43
43
@pytest .fixture (scope = "module" )
44
44
def container_image (sagemaker_session ):
45
- """ Create a Multi-Model container image for use with integration testcases
46
- since 1P containers supporting multiple models are not available yet"""
47
- region = sagemaker_session .boto_region_name
48
- ecr_client = sagemaker_session .boto_session .client ("ecr" , region_name = region )
49
- sts_client = sagemaker_session .boto_session .client (
50
- "sts" , region_name = region , endpoint_url = utils .sts_regional_endpoint (region )
51
- )
52
- account_id = sts_client .get_caller_identity ()["Account" ]
53
- algorithm_name = "sagemaker-multimodel-integ-test-{}" .format (sagemaker_timestamp ())
54
- ecr_image_uri_prefix = get_ecr_image_uri_prefix (account = account_id , region = region )
55
- ecr_image = "{prefix}/{algorithm_name}:latest" .format (
56
- prefix = ecr_image_uri_prefix , algorithm_name = algorithm_name
57
- )
45
+ """Create a Multi-Model image since pre-built ones are not available yet."""
46
+ algorithm_name = unique_name_from_base ("sagemaker-multimodel-integ-test" )
47
+ ecr_image = _ecr_image_uri (sagemaker_session , algorithm_name )
58
48
59
49
# Build and tag docker image locally
60
50
docker_client = docker .from_env ()
@@ -64,7 +54,9 @@ def container_image(sagemaker_session):
64
54
image .tag (ecr_image , tag = "latest" )
65
55
66
56
# Create AWS ECR and push the local docker image to it
57
+ ecr_client = sagemaker_session .boto_session .client ("ecr" )
67
58
_create_repository (ecr_client , algorithm_name )
59
+
68
60
username , password = _ecr_login (ecr_client )
69
61
# Retry docker image push
70
62
for _ in retries (3 , "Upload docker image to ECR repo" , seconds_to_sleep = 10 ):
@@ -83,6 +75,18 @@ def container_image(sagemaker_session):
83
75
_delete_repository (ecr_client , algorithm_name )
84
76
85
77
78
+ def _ecr_image_uri (sagemaker_session , algorithm_name ):
79
+ region = sagemaker_session .boto_region_name
80
+
81
+ sts_client = sagemaker_session .boto_session .client (
82
+ "sts" , region_name = region , endpoint_url = utils .sts_regional_endpoint (region )
83
+ )
84
+ account_id = sts_client .get_caller_identity ()["Account" ]
85
+
86
+ endpoint_data = utils ._botocore_resolver ().construct_endpoint ("ecr" , region )
87
+ return "{}.dkr.{}/{}:latest" .format (account_id , endpoint_data ["hostname" ], algorithm_name )
88
+
89
+
86
90
def _create_repository (ecr_client , repository_name ):
87
91
"""
88
92
Creates an ECS Repository (ECR). When a new transform is being registered,
0 commit comments