Udacity-Data-Engineering-Projects icon indicating copy to clipboard operation
Udacity-Data-Engineering-Projects copied to clipboard

Check if IAM role already exists and then skip creating new one.

Open san089 opened this issue 5 years ago • 1 comments

Check if IAM role already exists and then skip creating a new one.

try:
        create_response = iam_client.create_role(
                    Path='/',
                    RoleName=role_name,
                    Description=role_description,
                    AssumeRolePolicyDocument = role_policy_document
        )
        logger.debug(f"Got response from IAM client for creating role : {create_response}")
        logger.info(f"Role create response code : {create_response['ResponseMetadata']['HTTPStatusCode']}")
    except Exception as e:
        logger.error(f"Error occured while creating role : {e}")
        return False

san089 avatar Jan 30 '20 16:01 san089

In order to check it, you can use 'get_role' method of the 'boto3' IAM client. here is the code:

`import boto3 import logging

Initialize logging

logger = logging.getLogger() logger.setLevel(logging.INFO)

Initialize IAM client

iam_client = boto3.client('iam')

def ensure_iam_role(role_name, role_description, role_policy_document): try: # Check if the role already exists logger.info(f"Checking if IAM role '{role_name}' exists...") response = iam_client.get_role(RoleName=role_name) logger.info(f"Role '{role_name}' already exists. Skipping creation.") return True # Role exists except iam_client.exceptions.NoSuchEntityException: # Role does not exist, proceed to create it try: logger.info(f"Role '{role_name}' does not exist. Creating a new one...") create_response = iam_client.create_role( Path='/', RoleName=role_name, Description=role_description, AssumeRolePolicyDocument=role_policy_document ) logger.debug(f"Got response from IAM client for creating role: {create_response}") logger.info(f"Role create response code: {create_response['ResponseMetadata']['HTTPStatusCode']}") return True # Role created successfully except Exception as e: logger.error(f"Error occurred while creating role: {e}") return False # Role creation failed except Exception as e: # Handle other exceptions from get_role logger.error(f"Unexpected error occurred while checking role: {e}") return False `

BestuSingh avatar Jan 24 '25 21:01 BestuSingh