Last active
August 8, 2019 23:51
-
-
Save monkut/71e6e0e5d96120ffb109d3a603407d7b to your computer and use it in GitHub Desktop.
parse AWS ARN
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def parse_arn(arn_str: str) -> Tuple[str, str, str, Optional[str], str, Optional[List[str]]]: | |
""" | |
https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html | |
arn:partition:service:region:account-id:resource | |
arn:partition:service:region:account-id:resourcetype/resource | |
arn:partition:service:region:account-id:resourcetype/resource/qualifier | |
arn:partition:service:region:account-id:resourcetype/resource:qualifier | |
arn:partition:service:region:account-id:resourcetype:resource | |
arn:partition:service:region:account-id:resourcetype:resource:qualifier | |
:return: service, region, account_id, resource_type, resource, qualifier | |
""" | |
*_, service, region, account_id, resource_elements = arn_str.split(':', 5) | |
resource_type = None | |
resource = None | |
qualifiers = None | |
if not any(separator in resource_elements for separator in (':', '/')): | |
resource = resource_elements | |
elif ':' in resource_elements and '/' not in resource_elements: | |
if resource_elements.count(':') == 1: | |
resoruce_type, resource = resource_elements.split(':') | |
elif resource_elements.count(':') >= 2: | |
resource_type, resource, *qualifiers = resource_elements.split(':') | |
elif ':' not in resource_elements and '/' in resource_elements: | |
if resource_elements.count('/') == 1: | |
resoruce_type, resource = resource_elements.split('/') | |
elif resource_elements.count('/') >= 2: | |
resource_type, resource, *qualifiers = resource_elements.split('/') | |
elif ':' in resource_elements and '/' in resource_elements: | |
# 'arn:partition:service:region:account-id:resourcetype/resource:qualifier' | |
resource_type, remaining = resource_elements.split('/') | |
resource, qualifier = remaining.split(':') | |
return service, region, account_id, resource_type, resource, qualifiers |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment