diff --git a/samtranslator/translator/arn_generator.py b/samtranslator/translator/arn_generator.py index a9f6e0325..852c66c74 100644 --- a/samtranslator/translator/arn_generator.py +++ b/samtranslator/translator/arn_generator.py @@ -17,16 +17,20 @@ def _get_region_from_session() -> str: def _region_to_partition(region: str) -> str: # setting default partition to aws, this will be overwritten by checking the region below region_string = region.lower() - if region_string.startswith("cn-"): - return "aws-cn" - if region_string.startswith("us-iso-"): - return "aws-iso" - if region_string.startswith("us-isob"): - return "aws-iso-b" - if region_string.startswith("us-gov"): - return "aws-us-gov" - if region_string.startswith("eu-isoe"): - return "aws-iso-e" + region_to_partition_map = { + "cn-": "aws-cn", + "us-iso-": "aws-iso", + "us-isob": "aws-iso-b", + "us-gov": "aws-us-gov", + "eu-isoe": "aws-iso-e", + } + for key, value in region_to_partition_map.items(): + if region_string.startswith(key): + return value + + # Using the ${AWS::Partition} placeholder so that we don't have to add new regions to the static list above + if "iso" in region_string: + return "${AWS::Partition}" return "aws" diff --git a/tests/translator/test_arn_generator.py b/tests/translator/test_arn_generator.py index ae2c1bf7f..d7187ccea 100644 --- a/tests/translator/test_arn_generator.py +++ b/tests/translator/test_arn_generator.py @@ -10,7 +10,15 @@ def setUp(self): ArnGenerator.BOTO_SESSION_REGION_NAME = None @parameterized.expand( - [("us-east-1", "aws"), ("cn-east-1", "aws-cn"), ("us-gov-west-1", "aws-us-gov"), ("US-EAST-1", "aws")] + [ + ("us-east-1", "aws"), + ("cn-east-1", "aws-cn"), + ("us-gov-west-1", "aws-us-gov"), + ("us-isob-east-1", "aws-iso-b"), + ("eu-isoe-west-1", "aws-iso-e"), + ("US-EAST-1", "aws"), + ("us-isof-east-1", "${AWS::Partition}"), + ] ) def test_get_partition_name(self, region, expected): actual = ArnGenerator.get_partition_name(region)