From d7d10e6e0c90fade668febaf06abe51fb807691f Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Wed, 29 Jul 2020 14:00:11 -0700 Subject: [PATCH 1/2] breaking: deprecate get_ecr_image_uri_prefix --- src/sagemaker/utils.py | 14 ------------- tests/integ/test_multidatamodel.py | 32 +++++++++++++++++------------- tests/unit/test_utils.py | 8 -------- 3 files changed, 18 insertions(+), 36 deletions(-) diff --git a/src/sagemaker/utils.py b/src/sagemaker/utils.py index f7e132dfed..a8734a0ee7 100644 --- a/src/sagemaker/utils.py +++ b/src/sagemaker/utils.py @@ -613,20 +613,6 @@ def download_file(bucket_name, path, target, sagemaker_session): bucket.download_file(path, target) -def get_ecr_image_uri_prefix(account, region): - """get prefix of ECR image URI - - Args: - account (str): AWS account number - region (str): AWS region name - - Returns: - (str): URI prefix of ECR image - """ - endpoint_data = _botocore_resolver().construct_endpoint("ecr", region) - return "{}.dkr.{}".format(account, endpoint_data["hostname"]) - - def sts_regional_endpoint(region): """Get the AWS STS endpoint specific for the given region. diff --git a/tests/integ/test_multidatamodel.py b/tests/integ/test_multidatamodel.py index 415cdd1048..fcade2ee5a 100644 --- a/tests/integ/test_multidatamodel.py +++ b/tests/integ/test_multidatamodel.py @@ -29,7 +29,7 @@ from sagemaker.mxnet import MXNet from sagemaker.predictor import Predictor from sagemaker.serializers import NumpySerializer -from sagemaker.utils import sagemaker_timestamp, unique_name_from_base, get_ecr_image_uri_prefix +from sagemaker.utils import sagemaker_timestamp, unique_name_from_base from tests.integ import DATA_DIR, TRAINING_DEFAULT_TIMEOUT_MINUTES from tests.integ.retry import retries from tests.integ.timeout import timeout, timeout_and_delete_endpoint_by_name @@ -42,19 +42,9 @@ @pytest.fixture(scope="module") def container_image(sagemaker_session): - """ Create a Multi-Model container image for use with integration testcases - since 1P containers supporting multiple models are not available yet""" - region = sagemaker_session.boto_region_name - ecr_client = sagemaker_session.boto_session.client("ecr", region_name=region) - sts_client = sagemaker_session.boto_session.client( - "sts", region_name=region, endpoint_url=utils.sts_regional_endpoint(region) - ) - account_id = sts_client.get_caller_identity()["Account"] - algorithm_name = "sagemaker-multimodel-integ-test-{}".format(sagemaker_timestamp()) - ecr_image_uri_prefix = get_ecr_image_uri_prefix(account=account_id, region=region) - ecr_image = "{prefix}/{algorithm_name}:latest".format( - prefix=ecr_image_uri_prefix, algorithm_name=algorithm_name - ) + """Create a Multi-Model image since pre-built ones are not available yet.""" + algorithm_name = unique_name_from_base("sagemaker-multimodel-integ-test-{}") + ecr_image = _ecr_image_uri(sagemaker_session, algorithm_name) # Build and tag docker image locally docker_client = docker.from_env() @@ -64,7 +54,9 @@ def container_image(sagemaker_session): image.tag(ecr_image, tag="latest") # Create AWS ECR and push the local docker image to it + ecr_client = sagemaker_session.boto_session.client("ecr") _create_repository(ecr_client, algorithm_name) + username, password = _ecr_login(ecr_client) # Retry docker image push for _ in retries(3, "Upload docker image to ECR repo", seconds_to_sleep=10): @@ -83,6 +75,18 @@ def container_image(sagemaker_session): _delete_repository(ecr_client, algorithm_name) +def _ecr_image_uri(sagemaker_session, algorithm_name): + region = sagemaker_session.boto_region_name + + sts_client = sagemaker_session.boto_session.client( + "sts", region_name=region, endpoint_url=utils.sts_regional_endpoint(region) + ) + account_id = sts_client.get_caller_identity()["Account"] + + endpoint_data = utils._botocore_resolver().construct_endpoint("ecr", region) + return "{}.dkr.{}/{}:latest".format(account_id, endpoint_data["hostname"], algorithm_name) + + def _create_repository(ecr_client, repository_name): """ Creates an ECS Repository (ECR). When a new transform is being registered, diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index 9f9415b9f9..b2a28737b7 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -755,14 +755,6 @@ def walk(): return result if result else {} -def test_get_ecr_image_uri_prefix(): - ecr_prefix = sagemaker.utils.get_ecr_image_uri_prefix("123456789012", "us-west-2") - assert ecr_prefix == "123456789012.dkr.ecr.us-west-2.amazonaws.com" - - ecr_prefix = sagemaker.utils.get_ecr_image_uri_prefix("123456789012", "us-iso-east-1") - assert ecr_prefix == "123456789012.dkr.ecr.us-iso-east-1.c2s.ic.gov" - - def test_sts_regional_endpoint(): endpoint = sagemaker.utils.sts_regional_endpoint("us-west-2") assert endpoint == "https://sts.us-west-2.amazonaws.com" From cf61dba49b4cab9a45093eb5431d8a8b069e7300 Mon Sep 17 00:00:00 2001 From: Lauren Yu <6631887+laurenyu@users.noreply.github.com> Date: Thu, 30 Jul 2020 14:21:32 -0700 Subject: [PATCH 2/2] fix integ test --- tests/integ/test_multidatamodel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integ/test_multidatamodel.py b/tests/integ/test_multidatamodel.py index fcade2ee5a..75289f20d3 100644 --- a/tests/integ/test_multidatamodel.py +++ b/tests/integ/test_multidatamodel.py @@ -43,7 +43,7 @@ @pytest.fixture(scope="module") def container_image(sagemaker_session): """Create a Multi-Model image since pre-built ones are not available yet.""" - algorithm_name = unique_name_from_base("sagemaker-multimodel-integ-test-{}") + algorithm_name = unique_name_from_base("sagemaker-multimodel-integ-test") ecr_image = _ecr_image_uri(sagemaker_session, algorithm_name) # Build and tag docker image locally